summaryrefslogtreecommitdiffstats
path: root/sys/netinet/ip_input.c
diff options
context:
space:
mode:
authorLuiz Otavio O Souza <luiz@netgate.com>2016-07-02 18:35:17 -0500
committerLuiz Otavio O Souza <luiz@netgate.com>2016-07-02 18:35:17 -0500
commit7aa502721fb5918b709ae7595537705faf38408f (patch)
tree30415c6cc6c3459cd83d9760112ca3b2b6c75c2f /sys/netinet/ip_input.c
parent13d9c0c302a9efbf93724bd23c4b86a757e45348 (diff)
parentd08d8c2ff3af6ce2ba65f9805f1f061373e78a82 (diff)
downloadFreeBSD-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.c15
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);
OpenPOWER on IntegriCloud