PERFORCE change 163997 for review
Gabor Pali
pgj at FreeBSD.org
Wed Jun 10 14:17:24 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=163997
Change 163997 by pgj at petymeg-current on 2009/06/10 14:16:41
Replace st_listening for NETSTAT_SOCKET_ALL, so the application itself
does not have to filter the received list (and it more abstract)
Affected files ...
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#16 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#14 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#11 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#13 edit
.. //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/inet.c#8 edit
Differences ...
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.c#16 (text+ko) ====
@@ -14,6 +14,7 @@
#include <netinet/tcp_var.h>
#define TCPSTATES
#include <netinet/tcp_fsm.h>
+#include <arpa/inet.h>
#include <nlist.h>
#include <stdio.h>
#include <stdlib.h>
@@ -54,7 +55,7 @@
"#11", "#12", "#13", "#14", "#15", "#16", "udp" };
static int
-net_local_pcblist_sysctl(int type, struct socket_type_list *list)
+net_local_pcblist_sysctl(int type, struct socket_type_list *list, int flags)
{
char *buf;
size_t len;
@@ -100,7 +101,7 @@
}
static int
-net_inet_pcblist_sysctl(int protocol, struct socket_type_list *list)
+net_inet_pcblist_sysctl(int protocol, struct socket_type_list *list, int flags)
{
char *buf;
size_t len;
@@ -161,6 +162,18 @@
)
continue;
+ if ((flags & NETSTAT_SOCKET_ALL) == 0 &&
+ (
+ (protocol == IPPROTO_TCP && tp->t_state == TCPS_LISTEN)
+ || ((inp->inp_vflag & INP_IPV4) != 0 &&
+ inet_lnaof(inp->inp_laddr) == INADDR_ANY)
+#ifdef INET6
+ || ((inp->inp_vflag & INP_IPV6) != 0 &&
+ IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr))
+#endif
+ ))
+ continue;
+
stp = _netstat_st_allocate(list, PF_INET, protocol,
ipproto[protocol]);
extract_inet_data(tp, inp, so, stp);
@@ -179,7 +192,7 @@
static int
net_local_pcblist_kvm(int type, struct socket_type_list *list,
- kvm_t *kvm, struct nlist *nlistp)
+ kvm_t *kvm, struct nlist *nlistp, int flags)
{
struct unp_head head;
struct unpcb *unp, unp_conn;
@@ -247,7 +260,7 @@
static int
net_inet_pcblist_kvm(int protocol, struct socket_type_list *list,
- kvm_t *kvm, struct nlist *nlistp)
+ kvm_t *kvm, struct nlist *nlistp, int flags)
{
/* XXX: to be filled in. */
return (0);
@@ -272,15 +285,16 @@
}
}
-#define NPCB_KVM(family, type, list, kvm, nl) do { \
- if (net_##family##_pcblist_kvm((type), (list), (kvm), (nl)) != 0) { \
+#define NPCB_KVM(family, type, list, kvm, nl, flags) do { \
+ if (net_##family##_pcblist_kvm((type), (list), (kvm), (nl), \
+ (flags)) != 0) { \
list->stl_error = NETSTAT_ERROR_UNDEFINED; \
return (-1); \
} \
} while (0)
-#define NPCB_SCT(family, type, list) do { \
- if (net_##family##_pcblist_sysctl((type), (list)) != 0) { \
+#define NPCB_SCT(family, type, list, flags) do { \
+ if (net_##family##_pcblist_sysctl((type), (list), (flags)) != 0) { \
list->stl_error = NETSTAT_ERROR_UNDEFINED; \
return (-1); \
} \
@@ -292,19 +306,21 @@
case SOCK_STREAM:
case SOCK_DGRAM:
if (use_kvm)
- NPCB_KVM(local, type, list, kvm, nl);
+ NPCB_KVM(local, type, list, kvm, nl, flags);
else
/* Use sysctl (or something else). */
- NPCB_SCT(local, type, list);
+ NPCB_SCT(local, type, list, flags);
break;
/* All PF_LOCAL */
case 0:
if (use_kvm) {
- NPCB_KVM(local, SOCK_STREAM, list, kvm, nl);
- NPCB_KVM(local, SOCK_DGRAM, list, kvm, nl);
+ NPCB_KVM(local, SOCK_STREAM, list, kvm, nl,
+ flags);
+ NPCB_KVM(local, SOCK_DGRAM, list, kvm, nl,
+ flags);
} else {
- NPCB_SCT(local, SOCK_STREAM, list);
- NPCB_SCT(local, SOCK_DGRAM, list);
+ NPCB_SCT(local, SOCK_STREAM, list, flags);
+ NPCB_SCT(local, SOCK_DGRAM, list, flags);
}
break;
default:
@@ -317,18 +333,20 @@
case IPPROTO_TCP:
case IPPROTO_UDP:
if (use_kvm)
- NPCB_KVM(inet, protocol, list, kvm, nl);
+ NPCB_KVM(inet, protocol, list, kvm, nl, flags);
else
- NPCB_SCT(inet, protocol, list);
+ NPCB_SCT(inet, protocol, list, flags);
break;
/* All PF_INET */
case 0:
if (use_kvm) {
- NPCB_KVM(inet, IPPROTO_TCP, list, kvm, nl);
- NPCB_KVM(inet, IPPROTO_UDP, list, kvm, nl);
+ NPCB_KVM(inet, IPPROTO_TCP, list, kvm, nl,
+ flags);
+ NPCB_KVM(inet, IPPROTO_UDP, list, kvm, nl,
+ flags);
} else {
- NPCB_SCT(inet, IPPROTO_TCP, list);
- NPCB_SCT(inet, IPPROTO_UDP, list);
+ NPCB_SCT(inet, IPPROTO_TCP, list, flags);
+ NPCB_SCT(inet, IPPROTO_UDP, list, flags);
}
break;
default:
@@ -382,7 +400,6 @@
} else {
stp->st_address[0] = '\0';
}
- stp->st_listening = 0;
stp->st_tcpstate[0] = '\0';
}
@@ -423,7 +440,6 @@
stp->XXX_xsocket = *so;
/* XXX: address is missing. */
stp->st_address[0] = '\0';
- stp->st_listening = (tp->t_state == TCPS_LISTEN);
if (tp->t_state < 0 || tp->t_state >= TCP_NSTATES)
sprintf(stp->st_tcpstate, "%d", tp->t_state);
else {
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#14 (text+ko) ====
@@ -19,7 +19,8 @@
#define NETSTAT_ERROR_UNSUPPORTED 6
/* Flags for netstat_socket(): */
-#define NETSTAT_SOCKET_KVM 1 /* Use KVM. */
+#define NETSTAT_SOCKET_KVM 0x01 /* Use KVM. */
+#define NETSTAT_SOCKET_ALL 0x02 /* Return all connections. */
struct socket_type;
struct socket_type_list;
@@ -81,7 +82,6 @@
u_long netstat_st_get_refs(const struct socket_type *stp);
u_long netstat_st_get_reflink(const struct socket_type *stp);
const char *netstat_st_get_address(const struct socket_type *stp);
-int netstat_st_get_listening(const struct socket_type *stp);
const char *netstat_st_get_tcpstate(const struct socket_type *stp);
/* XXX: Remove this hacks. */
struct tcpcb XXX_netstat_st_get_tcpcb(const struct socket_type *stp);
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#11 (text+ko) ====
@@ -62,7 +62,6 @@
u_long st_reflink; /* link in references list */
char st_address[SOCKTYPE_MAXADDR];
char st_tcpstate[16];
- int st_listening;
/* XXX: Removables. */
struct tcpcb XXX_tcpcb;
==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#13 (text+ko) ====
@@ -396,12 +396,6 @@
return (stp->st_address);
}
-int
-netstat_st_get_listening(const struct socket_type *stp)
-{
- return (stp->st_listening);
-}
-
const char *
netstat_st_get_tcpstate(const struct socket_type *stp)
{
==== //depot/projects/soc2009/pgj_libstat/src/usr.bin/netstat/inet.c#8 (text+ko) ====
@@ -581,6 +581,8 @@
st_flags = 0;
if (!live)
st_flags |= NETSTAT_SOCKET_KVM;
+ if (aflag)
+ st_flags |= NETSTAT_SOCKET_ALL;
if (netstat_socket(PF_INET, 0, proto, stlp, st_flags, kvm) < 0) {
error = netstat_stl_geterror(stlp);
@@ -623,26 +625,6 @@
tp = XXX_netstat_st_get_tcpcb(stp);
istcp = 1;
}
- if (!aflag &&
- (
- (istcp && netstat_st_get_listening(stp))
- || (netstat_st_get_family(stp) == AF_INET &&
- inet_lnaof(inp.inp_laddr) == INADDR_ANY)
-#ifdef INET6
- || (netstat_st_get_family(stp) == AF_INET6 &&
- IN6_IS_ADDR_UNSPECIFIED(&inp.in6p_laddr))
-#endif /* INET6 */
- || (netstat_st_get_family(stp) == AF_UNSPEC &&
- (((inp.inp_vflag & INP_IPV4) != 0 &&
- inet_lnaof(inp.inp_laddr) == INADDR_ANY)
-#ifdef INET6
- || ((inp.inp_vflag & INP_IPV6) != 0 &&
- IN6_IS_ADDR_UNSPECIFIED(&inp.in6p_laddr))
-#endif
- ))
- ))
- return;
-
if (first) {
if (!Lflag) {
printf("Active Internet connections");
More information about the p4-projects
mailing list