IPX counters and centralize statistics routine.

This commit is contained in:
christos 1998-12-10 15:52:39 +00:00
parent e856516838
commit 13d58281de
2 changed files with 28 additions and 21 deletions

View File

@ -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 * Copyright (c) 1980, 1986, 1993
@ -228,6 +228,7 @@ struct rt_addrinfo {
struct route_cb { struct route_cb {
int ip_count; int ip_count;
int ipx_count;
int ns_count; int ns_count;
int iso_count; int iso_count;
int any_count; int any_count;

View File

@ -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 * Copyright (c) 1988, 1991, 1993
@ -65,6 +65,7 @@ struct walkarg {
static struct mbuf *rt_msg1 __P((int, struct rt_addrinfo *)); static struct mbuf *rt_msg1 __P((int, struct rt_addrinfo *));
static int rt_msg2 __P((int, struct rt_addrinfo *, caddr_t, struct walkarg *)); 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 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!!!! */ /* Sleazy use of local variables throughout file, warning!!!! */
#define dst info.rti_info[RTAX_DST] #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 ifaaddr info.rti_info[RTAX_IFA]
#define brdaddr info.rti_info[RTAX_BRD] #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*/ /*ARGSUSED*/
int int
route_usrreq(so, req, m, nam, control, p) 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)); bzero(so->so_pcb, sizeof(*rp));
} }
if (req == PRU_DETACH && rp) { if (req == PRU_DETACH && rp)
int af = rp->rcb_proto.sp_protocol; rt_adjustcount(rp->rcb_proto.sp_protocol, -1);
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--;
}
s = splsoftnet(); s = splsoftnet();
/* /*
@ -121,19 +134,12 @@ route_usrreq(so, req, m, nam, control, p)
rp = sotorawcb(so); rp = sotorawcb(so);
if (req == PRU_ATTACH && rp) { if (req == PRU_ATTACH && rp) {
int af = rp->rcb_proto.sp_protocol;
if (error) { if (error) {
free((caddr_t)rp, M_PCB); free((caddr_t)rp, M_PCB);
splx(s); splx(s);
return (error); return (error);
} }
if (af == AF_INET) rt_adjustcount(rp->rcb_proto.sp_protocol, 1);
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++;
rp->rcb_laddr = &route_src; rp->rcb_laddr = &route_src;
rp->rcb_faddr = &route_dst; rp->rcb_faddr = &route_dst;
soisconnected(so); soisconnected(so);