PERFORCE change 166623 for review

Gabor Pali pgj at FreeBSD.org
Mon Jul 27 14:47:51 UTC 2009


http://perforce.freebsd.org/chv.cgi?CH=166623

Change 166623 by pgj at petymeg-current on 2009/07/27 14:47:10

	Add support for UDP statistics.

Affected files ...

.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#34 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#32 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_stat.c#2 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#38 edit

Differences ...

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#34 (text+ko) ====

@@ -116,6 +116,7 @@
 
 enum stat {
     stat_TCP = 0,
+    stat_UDP,
     stat_MAX,
     stat_Invalid,
 };
@@ -142,6 +143,7 @@
 
 struct stat_type;
 struct tcp_stat;
+struct udp_stat;
 
 __BEGIN_DECLS
 const char		    *netstat_strerror(int);
@@ -425,4 +427,22 @@
 u_int64_t   netstat_tcps_get_ecn_ect1(const struct tcp_stat *);
 u_int64_t   netstat_tcps_get_ecn_shs(const struct tcp_stat *);
 u_int64_t   netstat_tcps_get_ecn_rcwnd(const struct tcp_stat *);
+
+const struct udp_stat	*netstat_get_udpstats(const struct stat_type *);
+
+u_int64_t   netstat_udps_get_ipackets(const struct udp_stat *);
+u_int64_t   netstat_udps_get_hdrops(const struct udp_stat *);
+u_int64_t   netstat_udps_get_badsum(const struct udp_stat *);
+u_int64_t   netstat_udps_get_nosum(const struct udp_stat *);
+u_int64_t   netstat_udps_get_badlen(const struct udp_stat *);
+u_int64_t   netstat_udps_get_noport(const struct udp_stat *);
+u_int64_t   netstat_udps_get_noportbcast(const struct udp_stat *);
+u_int64_t   netstat_udps_get_fullsock(const struct udp_stat *);
+u_int64_t   netstat_udps_get_pcbcachemiss(const struct udp_stat *);
+u_int64_t   netstat_udps_get_pcbhashmiss(const struct udp_stat *);
+u_int64_t   netstat_udps_get_delivered(const struct udp_stat *);
+u_int64_t   netstat_udps_get_opackets(const struct udp_stat *);
+u_int64_t   netstat_udps_get_fastout(const struct udp_stat *);
+u_int64_t   netstat_udps_get_noportmcast(const struct udp_stat *);
+u_int64_t   netstat_udps_get_filtermcast(const struct udp_stat *);
 #endif /* !_NETSTAT_H_ */

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#32 (text+ko) ====

@@ -38,8 +38,12 @@
 #include <kvm.h>
 #include <net/if.h>
 #include <netinet/in.h>
+#include <netinet/ip.h>
+#include <netinet/ip_var.h>
 #include <netinet/in_pcb.h>
 #include <netinet/tcp_var.h>
+#include <netinet/udp.h>
+#include <netinet/udp_var.h>
 
 #include "netstat.h"
 
@@ -281,6 +285,10 @@
 	struct tcpstat	s;
 };
 
+struct udp_stat {
+	struct udpstat	s;
+};
+
 int kread_data(kvm_t *kvm, u_long kvm_pointer, void *address, size_t size);
 int kread_string(kvm_t *kvm, u_long kvm_pointer, char *buffer, int buflen);
 

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_stat.c#2 (text+ko) ====

@@ -29,7 +29,12 @@
 #include <sys/types.h>
 #include <sys/sysctl.h>
 
+#include <netinet/in.h>
+#include <netinet/ip.h>
+#include <netinet/ip_var.h>
 #include <netinet/tcp_var.h>
+#include <netinet/udp.h>
+#include <netinet/udp_var.h>
 
 #include <err.h>
 #include <kvm.h>
@@ -50,6 +55,7 @@
 	const char  *kvm;
 } stat_info [] = {
 	{ TCPSTAT_VERSION, "net.inet.tcp.stats", "_tcpstat" },
+	{ UDPSTAT_VERSION, "net.inet.udp.stats", "_udpstat" },
 };
 
 int
@@ -60,6 +66,7 @@
 	char	symbuf[64];
 
 	struct stat_header  head;
+	struct udpstat *u;
 	int res;
 
 	if (type >= stat_MAX) {
@@ -109,6 +116,15 @@
 	}
 
 	memcpy(sttp->stt_data, buffer, head.sth_len);
+
+	if (sttp->stt_type == stat_UDP) {
+		u = (struct udpstat *)sttp->stt_data;
+		u->udps_delivered =
+		    u->udps_ipackets - u->udps_hdrops - u->udps_badlen -
+		    u->udps_badsum - u->udps_noport - u->udps_noportbcast -
+		    u->udps_fullsock;
+	}
+
 	return (0);
 }
 

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#38 (text+ko) ====

@@ -1794,6 +1794,105 @@
 	return (tsp->s.tcps_ecn_rcwnd);
 }
 
+const struct udp_stat *
+netstat_get_udpstats(const struct stat_type *sttp)
+{
+	if (sttp->stt_type == stat_UDP) {
+		return ((const struct udp_stat *) sttp->stt_data);
+	}
+	return (NULL);
+}
+
+u_int64_t
+netstat_udps_get_ipackets(const struct udp_stat *usp)
+{
+	return (usp->s.udps_ipackets);
+}
+
+u_int64_t
+netstat_udps_get_hdrops(const struct udp_stat *usp)
+{
+	return (usp->s.udps_hdrops);
+}
+
+u_int64_t
+netstat_udps_get_badsum(const struct udp_stat *usp)
+{
+	return (usp->s.udps_badsum);
+}
+
+u_int64_t
+netstat_udps_get_nosum(const struct udp_stat *usp)
+{
+	return (usp->s.udps_nosum);
+}
+
+u_int64_t
+netstat_udps_get_badlen(const struct udp_stat *usp)
+{
+	return (usp->s.udps_badlen);
+}
+
+u_int64_t
+netstat_udps_get_noport(const struct udp_stat *usp)
+{
+	return (usp->s.udps_noport);
+}
+
+u_int64_t
+netstat_udps_get_noportbcast(const struct udp_stat *usp)
+{
+	return (usp->s.udps_noportbcast);
+}
+
+u_int64_t
+netstat_udps_get_fullsock(const struct udp_stat *usp)
+{
+	return (usp->s.udps_fullsock);
+}
+
+u_int64_t
+netstat_udps_get_pcbcachemiss(const struct udp_stat *usp)
+{
+	return (usp->s.udpps_pcbcachemiss);
+}
+
+u_int64_t
+netstat_udps_get_pcbhashmiss(const struct udp_stat *usp)
+{
+	return (usp->s.udpps_pcbhashmiss);
+}
+
+u_int64_t
+netstat_udps_get_delivered(const struct udp_stat *usp)
+{
+	return (usp->s.udps_delivered);
+}
+
+u_int64_t
+netstat_udps_get_opackets(const struct udp_stat *usp)
+{
+	return (usp->s.udps_opackets);
+}
+
+u_int64_t
+netstat_udps_get_fastout(const struct udp_stat *usp)
+{
+	return (usp->s.udps_fastout);
+}
+
+u_int64_t
+netstat_udps_get_noportmcast(const struct udp_stat *usp)
+{
+	return (usp->s.udps_noportmcast);
+}
+
+u_int64_t
+netstat_udps_get_filtermcast(const struct udp_stat *usp)
+{
+	return (usp->s.udps_filtermcast);
+}
+
 
 const char *
 routename(in_addr_t in, int numeric)


More information about the p4-projects mailing list