PERFORCE change 164033 for review
Gabor Pali
pgj at FreeBSD.org
Wed Jun 10 19:12:47 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=164033
Change 164033 by pgj at petymeg-current on 2009/06/10 19:12:40
Add support for more protocols in netstat_socket()
Affected files ...
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#20 edit
Differences ...
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#20 (text+ko) ====
@@ -39,6 +39,10 @@
{ .n_name = "_tcbinfo" },
#define X_UDBINFO 6
{ .n_name = "_udbinfo" },
+#define X_DIVCBINFO 7
+ { .n_name = "_divcbinfo" },
+#define X_RIPCBINFO 8
+ { .n_name = "_ripcbinfo" },
{ .n_name = NULL },
};
@@ -50,10 +54,6 @@
static const char *const socktype[] =
{ "#0", "stream", "dgram", "raw", "rdm", "seqpacket" };
-static const char *const ipproto[] =
- { "#0", "#1", "#2", "#3", "#4", "#5", "tcp", "#7", "#8", "#9", "#10",
- "#11", "#12", "#13", "#14", "#15", "#16", "udp" };
-
static int
net_local_pcblist_sysctl(int type, struct socket_type_list *list, int flags)
{
@@ -106,6 +106,7 @@
char *buf;
size_t len;
char mibvar[64];
+ const char *ipproto;
struct xinpgen *xig, *oxig;
struct tcpcb *tp = NULL;
@@ -114,7 +115,23 @@
struct socket_type *stp;
- sprintf(mibvar, "net.inet.%s.pcblist", ipproto[protocol]);
+ switch (protocol) {
+ case IPPROTO_TCP:
+ ipproto = "tcp";
+ break;
+ case IPPROTO_UDP:
+ ipproto = "udp";
+ break;
+ case IPPROTO_DIVERT:
+ ipproto = "divert";
+ break;
+ default:
+ case IPPROTO_RAW:
+ ipproto = "raw";
+ break;
+ }
+
+ sprintf(mibvar, "net.inet.%s.pcblist", ipproto);
len = 0;
if (sysctlbyname(mibvar, 0, &len, 0, 0) < 0) {
@@ -175,7 +192,7 @@
continue;
stp = _netstat_st_allocate(list, PF_INET, protocol,
- ipproto[protocol]);
+ ipproto);
extract_inet_data(tp, inp, so, stp);
}
@@ -332,9 +349,16 @@
}
break;
case PF_INET:
+ case PF_INET6:
switch (protocol) {
case IPPROTO_TCP:
case IPPROTO_UDP:
+ case IPPROTO_DIVERT:
+ case IPPROTO_RAW:
+ case IPPROTO_ICMP:
+ case IPPROTO_IGMP:
+ case IPPROTO_PIM:
+ case IPPROTO_ICMPV6:
if (use_kvm)
NPCB_KVM(inet, protocol, list, kvm, nl, flags);
else
@@ -347,9 +371,15 @@
flags);
NPCB_KVM(inet, IPPROTO_UDP, list, kvm, nl,
flags);
+ NPCB_KVM(inet, IPPROTO_DIVERT, list, kvm, nl,
+ flags);
+ NPCB_KVM(inet, IPPROTO_RAW, list, kvm, nl,
+ flags);
} else {
NPCB_SCT(inet, IPPROTO_TCP, list, flags);
NPCB_SCT(inet, IPPROTO_UDP, list, flags);
+ NPCB_SCT(inet, IPPROTO_DIVERT, list, flags);
+ NPCB_SCT(inet, IPPROTO_RAW, list, flags);
}
break;
default:
More information about the p4-projects
mailing list