diff options
author | Luiz Otavio O Souza <luiz@netgate.com> | 2016-07-02 18:35:17 -0500 |
---|---|---|
committer | Luiz Otavio O Souza <luiz@netgate.com> | 2016-07-02 18:35:17 -0500 |
commit | 7aa502721fb5918b709ae7595537705faf38408f (patch) | |
tree | 30415c6cc6c3459cd83d9760112ca3b2b6c75c2f /sys/netinet/ip_input.c | |
parent | 13d9c0c302a9efbf93724bd23c4b86a757e45348 (diff) | |
parent | d08d8c2ff3af6ce2ba65f9805f1f061373e78a82 (diff) | |
download | FreeBSD-src-7aa502721fb5918b709ae7595537705faf38408f.zip FreeBSD-src-7aa502721fb5918b709ae7595537705faf38408f.tar.gz |
Merge remote-tracking branch 'origin/master' into devel-11
Diffstat (limited to 'sys/netinet/ip_input.c')
-rw-r--r-- | sys/netinet/ip_input.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c index dbf9ba6..6543cca 100644 --- a/sys/netinet/ip_input.c +++ b/sys/netinet/ip_input.c @@ -373,6 +373,7 @@ ip_init(void) static void ip_destroy(void *unused __unused) { + struct ifnet *ifp; int error; #ifdef RSS @@ -396,11 +397,21 @@ ip_destroy(void *unused __unused) "type HHOOK_TYPE_IPSEC_OUT, id HHOOK_IPSEC_INET: " "error %d returned\n", __func__, error); } - /* Cleanup in_ifaddr hash table; should be empty. */ - hashdestroy(V_in_ifaddrhashtbl, M_IFADDR, V_in_ifaddrhmask); + + /* Remove the IPv4 addresses from all interfaces. */ + in_ifscrub_all(); + + /* Make sure the IPv4 routes are gone as well. */ + IFNET_RLOCK(); + TAILQ_FOREACH(ifp, &V_ifnet, if_link) + rt_flushifroutes_af(ifp, AF_INET); + IFNET_RUNLOCK(); /* Destroy IP reassembly queue. */ ipreass_destroy(); + + /* Cleanup in_ifaddr hash table; should be empty. */ + hashdestroy(V_in_ifaddrhashtbl, M_IFADDR, V_in_ifaddrhmask); } VNET_SYSUNINIT(ip, SI_SUB_PROTO_DOMAIN, SI_ORDER_THIRD, ip_destroy, NULL); |