bonding: add an option to specify a delay between peer notifications
Currently, gratuitous ARP/ND packets are sent every `miimon' milliseconds. This commit allows a user to specify a custom delay through a new option, `peer_notif_delay'. Like for `updelay' and `downdelay', this delay should be a multiple of `miimon' to avoid managing an additional work queue. The configuration logic is copied from `updelay' and `downdelay'. However, the default value cannot be set using a module parameter: Netlink or sysfs should be used to configure this feature. When setting `miimon' to 100 and `peer_notif_delay' to 500, we can observe the 500 ms delay is respected: 20:30:19.354693 ARP, Request who-has 203.0.113.10 tell 203.0.113.10, length 28 20:30:19.874892 ARP, Request who-has 203.0.113.10 tell 203.0.113.10, length 28 20:30:20.394919 ARP, Request who-has 203.0.113.10 tell 203.0.113.10, length 28 20:30:20.914963 ARP, Request who-has 203.0.113.10 tell 203.0.113.10, length 28 In bond_mii_monitor(), I have tried to keep the lock logic readable. The change is due to the fact we cannot rely on a notification to lower the value of `bond->send_peer_notif' as `NETDEV_NOTIFY_PEERS' is only triggered once every N times, while we need to decrement the counter each time. iproute2 also needs to be updated to be able to specify this new attribute through `ip link'. Signed-off-by:Vincent Bernat <vincent@bernat.ch> Signed-off-by:
David S. Miller <davem@davemloft.net>
Showing
- drivers/net/bonding/bond_main.c 20 additions, 11 deletionsdrivers/net/bonding/bond_main.c
- drivers/net/bonding/bond_netlink.c 14 additions, 0 deletionsdrivers/net/bonding/bond_netlink.c
- drivers/net/bonding/bond_options.c 45 additions, 26 deletionsdrivers/net/bonding/bond_options.c
- drivers/net/bonding/bond_procfs.c 2 additions, 0 deletionsdrivers/net/bonding/bond_procfs.c
- drivers/net/bonding/bond_sysfs.c 13 additions, 0 deletionsdrivers/net/bonding/bond_sysfs.c
- include/net/bond_options.h 1 addition, 0 deletionsinclude/net/bond_options.h
- include/net/bonding.h 1 addition, 0 deletionsinclude/net/bonding.h
- include/uapi/linux/if_link.h 1 addition, 0 deletionsinclude/uapi/linux/if_link.h
- tools/include/uapi/linux/if_link.h 1 addition, 0 deletionstools/include/uapi/linux/if_link.h
Loading