David Ahern
38bd10c447
net: ipv6: Delete host routes on an ifdown
...
It was a simple idea -- save IPv6 configured addresses on a link down
so that IPv6 behaves similar to IPv4. As always the devil is in the
details and the IPv6 stack as too many behavioral differences from IPv4
making the simple idea more complicated than it needs to be.
The current implementation for keeping IPv6 addresses can panic or spit
out a warning in one of many paths:
1. IPv6 route gets an IPv4 route as its 'next' which causes a panic in
rt6_fill_node while handling a route dump request.
2. rt->dst.obsolete is set to DST_OBSOLETE_DEAD hitting the WARN_ON in
fib6_del
3. Panic in fib6_purge_rt because rt6i_ref count is not 1.
The root cause of all these is references related to the host route for
an address that is retained.
So, this patch deletes the host route every time the ifdown loop runs.
Since the host route is deleted and will be re-generated an up there is
no longer a need for the l3mdev fix up. On the 'admin up' side move
addrconf_permanent_addr into the NETDEV_UP event handling so that it
runs only once versus on UP and CHANGE events.
All of the current panics and warnings appear to be related to
addresses on the loopback device, but given the catastrophic nature when
a bug is triggered this patch takes the conservative approach and evicts
all host routes rather than trying to determine when it can be re-used
and when it can not. That can be a later optimizaton if desired.
Signed-off-by: David Ahern <[email protected] >
Signed-off-by: David S. Miller <[email protected] >
2016-04-26 11:48:26 -04:00
..
ila
ila: autoload module
2016-02-21 22:00:28 -05:00
netfilter
netfilter: x_tables: enforce nul-terminated table name from getsockopt GET_ENTRIES
2016-03-28 17:59:24 +02:00
addrconf.c
net: ipv6: Delete host routes on an ifdown
2016-04-26 11:48:26 -04:00
addrconf_core.c
addrlabel.c
ipv6/addrlabel: fix ip6addrlbl_get()
2015-12-22 15:57:54 -05:00
af_inet6.c
sock: struct proto hash function may error
2016-02-11 03:54:14 -05:00
ah6.c
anycast.c
datagram.c
ipv6: udp: Do a route lookup and update during release_cb
2016-04-14 16:29:53 -04:00
esp6.c
exthdrs.c
ipv6: add complete rcu protection around np->opt
2015-12-02 23:37:16 -05:00
exthdrs_core.c
ipv6: re-enable fragment header matching in ipv6_find_hdr
2016-03-03 16:35:20 -05:00
exthdrs_offload.c
ipv6: fix exthdrs offload registration in out_rt path
2015-09-02 15:31:00 -07:00
fib6_rules.c
ipv6: fix the incorrect return value of throw route
2015-10-23 02:38:18 -07:00
icmp.c
ipv6: kill sk_dst_lock
2015-12-03 11:32:06 -05:00
inet6_connection_sock.c
soreuseport: fast reuseport TCP socket selection
2016-02-11 03:54:15 -05:00
inet6_hashtables.c
soreuseport: fast reuseport TCP socket selection
2016-02-11 03:54:15 -05:00
ip6_checksum.c
ipv6: Pass proto to csum_ipv6_magic as __u8 instead of unsigned short
2016-03-13 23:55:13 -04:00
ip6_fib.c
ipv6: per netns FIB garbage collection
2016-03-08 15:16:51 -05:00
ip6_flowlabel.c
ipv6: fix a lockdep splat
2016-02-08 10:33:32 -05:00
ip6_gre.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2016-03-08 12:34:12 -05:00
ip6_icmp.c
ip6_input.c
ipv4: namespacify ip_early_demux sysctl knob
2016-02-16 20:42:54 -05:00
ip6_offload.c
tunnels: Don't apply GRO to multiple layers of encapsulation.
2016-03-20 16:33:40 -04:00
ip6_offload.h
ip6_output.c
ipv6: Count in extension headers in skb->network_header
2016-04-07 22:41:37 -04:00
ip6_tunnel.c
ip6_tunnel: set rtnl_link_ops before calling register_netdevice
2016-04-05 19:48:51 -04:00
ip6_udp_tunnel.c
ip_tunnel: add support for setting flow label via collect metadata
2016-03-11 15:14:26 -05:00
ip6_vti.c
net: replace dst_cache ip6_tunnel implementation with the generic one
2016-02-16 20:21:48 -05:00
ip6mr.c
net: ipmr, ip6mr: fix vif/tunnel failure race condition
2015-11-24 17:15:56 -05:00
ipcomp6.c
ipv6_sockglue.c
ipv6: add complete rcu protection around np->opt
2015-12-02 23:37:16 -05:00
Kconfig
net: replace dst_cache ip6_tunnel implementation with the generic one
2016-02-16 20:21:48 -05:00
Makefile
ila: Create net/ipv6/ila directory
2015-12-15 23:25:20 -05:00
mcast.c
mld, igmp: Fix reserved tailroom calculation
2016-03-03 15:41:07 -05:00
mcast_snoop.c
mip6.c
ipv6: use ktime_t for internal timestamps
2015-10-05 03:16:47 -07:00
ndisc.c
ipv6: add option to drop unsolicited neighbor advertisements
2016-02-11 04:27:36 -05:00
netfilter.c
ipv6: Pass struct net into ip6_route_me_harder
2015-09-29 20:21:32 +02:00
output_core.c
ipv4, ipv6: Pass net into ip_local_out and ip6_local_out
2015-10-08 04:27:02 -07:00
ping.c
net: ping: make ping_v6_sendmsg static
2016-03-23 22:09:58 -04:00
proc.c
protocol.c
raw.c
ipv6: add IPV6_HDRINCL option for raw sockets
2015-12-17 15:12:28 -05:00
reassembly.c
net: use skb_postpush_rcsum instead of own implementations
2016-02-19 23:43:10 -05:00
route.c
ipv6: datagram: Update dst cache of a connected datagram sk during pmtu update
2016-04-14 16:29:51 -04:00
sit.c
tunnels: Remove encapsulation offloads on decap.
2016-03-20 16:33:40 -04:00
syncookies.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2016-03-19 10:05:34 -07:00
sysctl_net_ipv6.c
tcp_ipv6.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
2016-03-19 10:05:34 -07:00
tcpv6_offload.c
tunnel6.c
ipv6: fix tunnel error handling
2015-11-03 10:52:13 -05:00
udp.c
ipv6: udp: Do a route lookup and update during release_cb
2016-04-14 16:29:53 -04:00
udp_impl.h
udp_offload.c
GSO: Provide software checksum of tunneled UDP fragmentation offload
2016-02-26 14:23:35 -05:00
udplite.c
xfrm6_input.c
netfilter: Pass struct net into the netfilter hooks
2015-09-17 17:18:37 -07:00
xfrm6_mode_beet.c
xfrm6_mode_ro.c
xfrm6_mode_transport.c
xfrm6_mode_tunnel.c
ipv6: update skb->csum when CE mark is propagated
2016-01-15 15:07:23 -05:00
xfrm6_output.c
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
2015-10-24 06:54:12 -07:00
xfrm6_policy.c
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/klassert/ipsec
2015-12-22 16:26:31 -05:00
xfrm6_protocol.c
xfrm6_state.c
xfrm6_tunnel.c