diff --git a/sys/net/route.h b/sys/net/route.h index d9d479918a92..c4b3a1354d63 100644 --- a/sys/net/route.h +++ b/sys/net/route.h @@ -1,4 +1,4 @@ -/* $NetBSD: route.h,v 1.15 1998/08/25 04:22:33 thorpej Exp $ */ +/* $NetBSD: route.h,v 1.16 1998/12/10 15:52:39 christos Exp $ */ /* * Copyright (c) 1980, 1986, 1993 @@ -228,6 +228,7 @@ struct rt_addrinfo { struct route_cb { int ip_count; + int ipx_count; int ns_count; int iso_count; int any_count; diff --git a/sys/net/rtsock.c b/sys/net/rtsock.c index 60e5e12a44db..00cf9bfc00fe 100644 --- a/sys/net/rtsock.c +++ b/sys/net/rtsock.c @@ -1,4 +1,4 @@ -/* $NetBSD: rtsock.c,v 1.26 1998/03/01 02:25:05 fvdl Exp $ */ +/* $NetBSD: rtsock.c,v 1.27 1998/12/10 15:52:40 christos Exp $ */ /* * Copyright (c) 1988, 1991, 1993 @@ -65,6 +65,7 @@ struct walkarg { static struct mbuf *rt_msg1 __P((int, struct rt_addrinfo *)); static int rt_msg2 __P((int, struct rt_addrinfo *, caddr_t, struct walkarg *)); static void rt_xaddrs __P((caddr_t, caddr_t, struct rt_addrinfo *)); +static __inline void rt_adjustcount __P((int, int)); /* Sleazy use of local variables throughout file, warning!!!! */ #define dst info.rti_info[RTAX_DST] @@ -75,6 +76,27 @@ static void rt_xaddrs __P((caddr_t, caddr_t, struct rt_addrinfo *)); #define ifaaddr info.rti_info[RTAX_IFA] #define brdaddr info.rti_info[RTAX_BRD] +static __inline void +rt_adjustcount(af, cnt) + int af, cnt; +{ + route_cb.any_count--; + switch (af) { + case AF_INET: + route_cb.ip_count += cnt; + return; + case AF_IPX: + route_cb.ipx_count += cnt; + return; + case AF_NS: + route_cb.ns_count += cnt; + return; + case AF_ISO: + route_cb.iso_count += cnt; + return; + } +} + /*ARGSUSED*/ int route_usrreq(so, req, m, nam, control, p) @@ -93,17 +115,8 @@ route_usrreq(so, req, m, nam, control, p) bzero(so->so_pcb, sizeof(*rp)); } - if (req == PRU_DETACH && rp) { - int af = rp->rcb_proto.sp_protocol; - if (af == AF_INET) - route_cb.ip_count--; - else if (af == AF_NS) - route_cb.ns_count--; - else if (af == AF_ISO) - route_cb.iso_count--; - route_cb.any_count--; - } - + if (req == PRU_DETACH && rp) + rt_adjustcount(rp->rcb_proto.sp_protocol, -1); s = splsoftnet(); /* @@ -121,19 +134,12 @@ route_usrreq(so, req, m, nam, control, p) rp = sotorawcb(so); if (req == PRU_ATTACH && rp) { - int af = rp->rcb_proto.sp_protocol; if (error) { free((caddr_t)rp, M_PCB); splx(s); return (error); } - if (af == AF_INET) - route_cb.ip_count++; - else if (af == AF_NS) - route_cb.ns_count++; - else if (af == AF_ISO) - route_cb.iso_count++; - route_cb.any_count++; + rt_adjustcount(rp->rcb_proto.sp_protocol, 1); rp->rcb_laddr = &route_src; rp->rcb_faddr = &route_dst; soisconnected(so);