diff options
author | Mike Belopuhov <mikeb@cvs.openbsd.org> | 2011-11-01 00:00:02 +0000 |
---|---|---|
committer | Mike Belopuhov <mikeb@cvs.openbsd.org> | 2011-11-01 00:00:02 +0000 |
commit | a6c6bb5107d367f9b2a62cc5048ca5dbe3a43e11 (patch) | |
tree | 3b7f7d968662ef3bf68add1376d31b354a1addae /usr.bin/netstat | |
parent | 9802cee8c76654137430ac0ab1cddb5a60cb4b07 (diff) |
List sockets existing only in the specified or current routing domain.
Prompted by the mail from Andreas Bartelt, tested by Andreas and me.
ok henning
Diffstat (limited to 'usr.bin/netstat')
-rw-r--r-- | usr.bin/netstat/inet.c | 7 | ||||
-rw-r--r-- | usr.bin/netstat/main.c | 21 | ||||
-rw-r--r-- | usr.bin/netstat/netstat.h | 4 |
3 files changed, 19 insertions, 13 deletions
diff --git a/usr.bin/netstat/inet.c b/usr.bin/netstat/inet.c index 3df11b39114..c48b3c089c4 100644 --- a/usr.bin/netstat/inet.c +++ b/usr.bin/netstat/inet.c @@ -1,4 +1,4 @@ -/* $OpenBSD: inet.c,v 1.118 2011/07/05 05:14:41 bluhm Exp $ */ +/* $OpenBSD: inet.c,v 1.119 2011/11/01 00:00:01 mikeb Exp $ */ /* $NetBSD: inet.c,v 1.14 1995/10/03 21:42:37 thorpej Exp $ */ /* @@ -108,7 +108,7 @@ void tcpcb_dump(u_long); * -a (all) flag is specified. */ void -protopr(u_long off, char *name, int af, u_long pcbaddr) +protopr(u_long off, char *name, int af, u_int tableid, u_long pcbaddr) { struct inpcbtable table; struct inpcb *head, *next, *prev; @@ -169,6 +169,9 @@ protopr(u_long off, char *name, int af, u_long pcbaddr) continue; } + if (inpcb.inp_rtableid != tableid) + continue; + kread((u_long)inpcb.inp_socket, &sockb, sizeof (sockb)); if (istcp) { kread((u_long)inpcb.inp_ppcb, &tcpcb, sizeof (tcpcb)); diff --git a/usr.bin/netstat/main.c b/usr.bin/netstat/main.c index a0c3be357df..aac2d3d10a8 100644 --- a/usr.bin/netstat/main.c +++ b/usr.bin/netstat/main.c @@ -1,4 +1,4 @@ -/* $OpenBSD: main.c,v 1.89 2011/07/09 00:45:40 henning Exp $ */ +/* $OpenBSD: main.c,v 1.90 2011/11/01 00:00:01 mikeb Exp $ */ /* $NetBSD: main.c,v 1.9 1996/05/07 02:55:02 thorpej Exp $ */ /* @@ -98,7 +98,7 @@ struct nlist nl[] = { struct protox { u_char pr_index; /* index into nlist of cb head */ - void (*pr_cblocks)(u_long, char *, int, u_long); + void (*pr_cblocks)(u_long, char *, int, u_int, u_long); /* control blocks printing routine */ void (*pr_stats)(char *); /* statistics printing routine */ char *pr_name; /* well-known name */ @@ -136,7 +136,7 @@ struct protox *protoprotox[] = { protox, ip6protox, NULL }; -static void printproto(struct protox *, char *, int, u_long); +static void printproto(struct protox *, char *, int, u_int, u_long); static void usage(void); static struct protox *name2protox(char *); static struct protox *knownname(char *); @@ -357,7 +357,7 @@ main(int argc, char *argv[]) exit(0); } if (pflag) { - printproto(tp, tp->pr_name, af, pcbaddr); + printproto(tp, tp->pr_name, af, tableid, pcbaddr); exit(0); } /* @@ -409,17 +409,18 @@ main(int argc, char *argv[]) break; if (tp->pr_name == 0) continue; - printproto(tp, p->p_name, AF_INET, pcbaddr); + printproto(tp, p->p_name, AF_INET, tableid, pcbaddr); } endprotoent(); } if (af == PF_PFLOW || af == AF_UNSPEC) { tp = name2protox("pflow"); - printproto(tp, tp->pr_name, af, pcbaddr); + printproto(tp, tp->pr_name, af, tableid, pcbaddr); } if (af == AF_INET6 || af == AF_UNSPEC) for (tp = ip6protox; tp->pr_name; tp++) - printproto(tp, tp->pr_name, AF_INET6, pcbaddr); + printproto(tp, tp->pr_name, AF_INET6, tableid, + pcbaddr); if ((af == AF_UNIX || af == AF_UNSPEC) && !sflag) unixpr(nl[N_UNIXSW].n_value, pcbaddr); exit(0); @@ -431,7 +432,8 @@ main(int argc, char *argv[]) * is not in the namelist, ignore this one. */ static void -printproto(struct protox *tp, char *name, int af, u_long pcbaddr) +printproto(struct protox *tp, char *name, int af, u_int tableid, + u_long pcbaddr) { if (sflag) { if (tp->pr_stats != NULL) @@ -441,7 +443,8 @@ printproto(struct protox *tp, char *name, int af, u_long pcbaddr) if (tp->pr_cblocks != NULL && i < sizeof(nl) / sizeof(nl[0]) && (nl[i].n_value || af != AF_UNSPEC)) - (*tp->pr_cblocks)(nl[i].n_value, name, af, pcbaddr); + (*tp->pr_cblocks)(nl[i].n_value, name, af, tableid, + pcbaddr); } } diff --git a/usr.bin/netstat/netstat.h b/usr.bin/netstat/netstat.h index 4a412270674..7583c1f9ca0 100644 --- a/usr.bin/netstat/netstat.h +++ b/usr.bin/netstat/netstat.h @@ -1,4 +1,4 @@ -/* $OpenBSD: netstat.h,v 1.60 2011/07/09 00:45:40 henning Exp $ */ +/* $OpenBSD: netstat.h,v 1.61 2011/11/01 00:00:01 mikeb Exp $ */ /* $NetBSD: netstat.h,v 1.6 1996/05/07 02:55:05 thorpej Exp $ */ /* @@ -70,7 +70,7 @@ int kread(u_long addr, void *buf, int size); char *plural(u_int64_t); char *plurales(u_int64_t); -void protopr(u_long, char *, int, u_long); +void protopr(u_long, char *, int, u_int, u_long); void tcp_stats(char *); void udp_stats(char *); void ip_stats(char *); |