inet: hookup in_if_down with rt_purgecloned
authorRoy Marples <roy@marples.name>
Tue, 10 Sep 2019 12:37:43 +0000 (13:37 +0100)
committerRoy Marples <roy@marples.name>
Tue, 10 Sep 2019 12:37:43 +0000 (13:37 +0100)
sys/netinet/in.c
sys/netinet/in_proto.c
sys/netinet/in_var.h

index 18b6f66..457ec86 100644 (file)
@@ -1391,6 +1391,12 @@ in_delmulti(struct in_multi *inm)
                igmp_leavegroup(&my_inm);
 }
 
+void
+in_if_down(struct ifnet *ifp)
+{
+       rt_purgecloned(ifp, AF_INET);
+}
+
 static void
 in_ifdetach_dispatch(netmsg_t nmsg)
 {
index 8f2372e..c38c7a5 100644 (file)
@@ -49,6 +49,7 @@
 #include <netinet/in.h>
 #include <netinet/in_systm.h>
 #include <netinet/in_pcb.h>
+#include <netinet/in_var.h>
 #include <netinet/ip.h>
 #include <netinet/ip_var.h>
 #include <netinet/ip_icmp.h>
@@ -346,7 +347,9 @@ struct domain inetdomain = {
        .dom_rtoffset           = 32,
        .dom_maxrtkey           = sizeof(struct sockaddr_in),
        .dom_ifattach           = NULL,
-       .dom_ifdetach           = NULL
+       .dom_ifdetach           = NULL,
+       .dom_if_up              = NULL,
+       .dom_if_down            = in_if_down
 };
 
 DOMAIN_SET(inet);
index 3d01ea8..906fdd1 100644 (file)
@@ -247,6 +247,7 @@ struct  lwkt_serialize;
 union  netmsg;
 
 void   in_ifdetach(struct ifnet *ifp);
+void   in_if_down(struct ifnet *ifp);
 struct in_multi *in_addmulti (struct in_addr *, struct ifnet *);
 void   in_delmulti (struct in_multi *);
 int    in_control (u_long, caddr_t, struct ifnet *, struct thread *);