diff options
author | ru <ru@FreeBSD.org> | 2002-01-18 14:33:04 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2002-01-18 14:33:04 +0000 |
commit | 7bbde3fb1fe2ff7b5efd1426bdbd435faa950f70 (patch) | |
tree | 868a544aec0071521723bf9f4a0985c76b46ad04 /sys/net/rtsock.c | |
parent | d254e724006714f3f20b2ea58624a58cc97d2874 (diff) | |
download | FreeBSD-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.c | 32 |
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 |