neigh: support smaller retrans_time settting
Currently, we limited the retrans_time to be greater than HZ/2. i.e. setting retrans_time less than 500ms will not work. This makes the user unable to achieve a more accurate control for bonding arp fast failover. Update the sanity check to HZ/100, which is 10ms, to let users have more ability on the retrans_time control. v3: sync the behavior with IPv6 and update all the timer handler v2: use HZ instead of hard code number Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
64948427a6
commit
19e16d220f
@@ -1357,7 +1357,7 @@ retry:
|
||||
|
||||
regen_advance = idev->cnf.regen_max_retry *
|
||||
idev->cnf.dad_transmits *
|
||||
NEIGH_VAR(idev->nd_parms, RETRANS_TIME) / HZ;
|
||||
max(NEIGH_VAR(idev->nd_parms, RETRANS_TIME), HZ/100) / HZ;
|
||||
|
||||
/* recalculate max_desync_factor each time and update
|
||||
* idev->desync_factor if it's larger
|
||||
@@ -4121,7 +4121,8 @@ static void addrconf_dad_work(struct work_struct *w)
|
||||
|
||||
ifp->dad_probes--;
|
||||
addrconf_mod_dad_work(ifp,
|
||||
NEIGH_VAR(ifp->idev->nd_parms, RETRANS_TIME));
|
||||
max(NEIGH_VAR(ifp->idev->nd_parms, RETRANS_TIME),
|
||||
HZ/100));
|
||||
spin_unlock(&ifp->lock);
|
||||
write_unlock_bh(&idev->lock);
|
||||
|
||||
@@ -4527,7 +4528,7 @@ restart:
|
||||
!(ifp->flags&IFA_F_TENTATIVE)) {
|
||||
unsigned long regen_advance = ifp->idev->cnf.regen_max_retry *
|
||||
ifp->idev->cnf.dad_transmits *
|
||||
NEIGH_VAR(ifp->idev->nd_parms, RETRANS_TIME) / HZ;
|
||||
max(NEIGH_VAR(ifp->idev->nd_parms, RETRANS_TIME), HZ/100) / HZ;
|
||||
|
||||
if (age >= ifp->prefered_lft - regen_advance) {
|
||||
struct inet6_ifaddr *ifpub = ifp->ifpub;
|
||||
|
@@ -1359,8 +1359,8 @@ skip_defrtr:
|
||||
|
||||
if (rtime && rtime/1000 < MAX_SCHEDULE_TIMEOUT/HZ) {
|
||||
rtime = (rtime*HZ)/1000;
|
||||
if (rtime < HZ/10)
|
||||
rtime = HZ/10;
|
||||
if (rtime < HZ/100)
|
||||
rtime = HZ/100;
|
||||
NEIGH_VAR_SET(in6_dev->nd_parms, RETRANS_TIME, rtime);
|
||||
in6_dev->tstamp = jiffies;
|
||||
send_ifinfo_notify = true;
|
||||
|
Reference in New Issue
Block a user