summaryrefslogtreecommitdiffstats
path: root/sys/net/rtsock.c
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2002-01-18 14:33:04 +0000
committerru <ru@FreeBSD.org>2002-01-18 14:33:04 +0000
commit7bbde3fb1fe2ff7b5efd1426bdbd435faa950f70 (patch)
tree868a544aec0071521723bf9f4a0985c76b46ad04 /sys/net/rtsock.c
parentd254e724006714f3f20b2ea58624a58cc97d2874 (diff)
downloadFreeBSD-src-7bbde3fb1fe2ff7b5efd1426bdbd435faa950f70.zip
FreeBSD-src-7bbde3fb1fe2ff7b5efd1426bdbd435faa950f70.tar.gz
Introduce an interface announcement message for the routing
socket so that routing daemons and other interested parties know when an interface is attached/detached. PR: kern/33747 Obtained from: NetBSD MFC after: 2 weeks
Diffstat (limited to 'sys/net/rtsock.c')
-rw-r--r--sys/net/rtsock.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c
index c55d765..88c9cc6 100644
--- a/sys/net/rtsock.c
+++ b/sys/net/rtsock.c
@@ -595,6 +595,10 @@ rt_msg1(type, rtinfo)
len = sizeof(struct if_msghdr);
break;
+ case RTM_IFANNOUNCE:
+ len = sizeof(struct if_announcemsghdr);
+ break;
+
default:
len = sizeof(struct rt_msghdr);
}
@@ -861,6 +865,34 @@ rt_newmaddrmsg(cmd, ifma)
}
/*
+ * This is called to generate routing socket messages indicating
+ * network interface arrival and departure.
+ */
+void
+rt_ifannouncemsg(ifp, what)
+ struct ifnet *ifp;
+ int what;
+{
+ struct if_announcemsghdr *ifan;
+ struct mbuf *m;
+ struct rt_addrinfo info;
+
+ if (route_cb.any_count == 0)
+ return;
+ bzero((caddr_t)&info, sizeof(info));
+ m = rt_msg1(RTM_IFANNOUNCE, &info);
+ if (m == NULL)
+ return;
+ ifan = mtod(m, struct if_announcemsghdr *);
+ ifan->ifan_index = ifp->if_index;
+ snprintf(ifan->ifan_name, sizeof(ifan->ifan_name),
+ "%s%d", ifp->if_name, ifp->if_unit);
+ ifan->ifan_what = what;
+ route_proto.sp_protocol = 0;
+ raw_input(m, &route_proto, &route_src, &route_dst);
+ }
+
+/*
* This is used in dumping the kernel table via sysctl().
*/
int
OpenPOWER on IntegriCloud