Patch "ipv4: update RTNH_F_LINKDOWN flag on UP event" has been added to the 4.2-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
ipv4: update RTNH_F_LINKDOWN flag on UP event
to the 4.2-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
ipv4-update-rtnh_f_linkdown-flag-on-up-event.patch
and it can be found in the queue-4.2 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Tue Nov 17 14:34:38 PST 2015
From: Julian Anastasov <[email protected]>
Date: Fri, 30 Oct 2015 10:23:34 +0200
Subject: ipv4: update RTNH_F_LINKDOWN flag on UP event
From: Julian Anastasov <[email protected]>
[ Upstream commit c9b3292eeb52c6834e972eb5b8fe38914771ed12 ]
When nexthop is part of multipath route we should clear the LINKDOWN flag when link goes UP or when first address is added. This is needed because we always set LINKDOWN flag when DEAD flag was set but now on UP the nexthop is not dead anymore. Examples when LINKDOWN bit can be forgotten when no NETDEV_CHANGE is delivered:
- link goes down (LINKDOWN is set), then link goes UP and device shows carrier OK but LINKDOWN remains set
- last address is deleted (LINKDOWN is set), then address is added and device shows carrier OK but LINKDOWN remains set
Steps to reproduce:
modprobe dummy
ifconfig dummy0 192.168.168.1 up
here add a multipath route where one nexthop is for dummy0:
ip route add 1.2.3.4 nexthop dummy0 nexthop SOME_OTHER_DEVICE ifconfig dummy0 down
ifconfig dummy0 up
now ip route shows nexthop that is not dead. Now set the sysctl var:
echo 1 > /proc/sys/net/ipv4/conf/dummy0/ignore_routes_with_linkdown
now ip route will show a dead nexthop because the forgotten RTNH_F_LINKDOWN is propagated as RTNH_F_DEAD.
--- net/ipv4/fib_semantics.c | 7 +++++++ 1 file changed, 7 insertions(+)
net/ipv4/fib_semantics.c +7 -0
@@ -1296,6 +1296,13 @@ int fib_sync_up(struct net_device *dev,if (!(dev->flags &IFF_UP ))return 0 ; +if (nh_flags &RTNH_F_DEAD ) { +unsigned int flags =dev_get_flags (dev); + +if (flags & (IFF_RUNNING |IFF_LOWER_UP )) + nh_flags |=RTNH_F_LINKDOWN ; + } + prev_fi =NULL ; hash =fib_devindex_hashfn (dev->ifindex); head = &fib_info_devhash[hash];
Patches currently in stable-queue which might be from [email protected] are
queue-4.2/ipv4-update-rtnh_f_linkdown-flag-on-up-event.patch queue-4.2/ipv4-fix-to-not-remove-local-route-on-link-down.patch