PERFORCE change 163542 for review

Gabor Pali pgj at FreeBSD.org
Fri Jun 5 08:06:02 UTC 2009


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

Change 163542 by pgj at petymeg-current on 2009/06/05 08:05:35

	Create a type for the "socket" (connection) abstraction, remove
	previous code snippets about tcp and udp statistics.  Hopefully,
	this abstraction will cover them too :)

Affected files ...

.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/Makefile#3 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat.h#3 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_all.c#2 delete
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_internal.h#3 edit
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_tcp.c#2 delete
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_udp.c#2 delete
.. //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/netstat_util.c#3 edit

Differences ...

==== //depot/projects/soc2009/pgj_libstat/src/lib/libnetstat/Makefile#3 (text+ko) ====

@@ -2,8 +2,7 @@
 .include <bsd.own.mk>
 
 LIB=	netstat
-SRCS=	netstat_tcp.c netstat_udp.c \
-	netstat_all.c netstat_util.c
+SRCS=	netstat.c netstat_util.c
 
 INCS=	netstat.h
 

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

@@ -2,15 +2,9 @@
 #ifndef _NETSTAT_H_
 #define _NETSTAT_H_
 
-#define NETSTAT_MAXCPU		    32
 #define NETSTAT_MAXCALLER	    16
 
-#define NETSTAT_TYPE_UNKNOWN	    0
-#define NETSTAT_TYPE_TCP	    1
-#define NETSTAT_TYPE_UDP	    2
-#define NETSTAT_TYPE_ANY	    255
-
-#define NETSTAT_MAXNAME		    32
+#define SOCKTYPE_MAXNAME	    32
 
 #define NETSTAT_ERROR_UNDEFINED	    0
 #define NETSTAT_ERROR_NOMEMORY	    1
@@ -19,28 +13,23 @@
 #define NETSTAT_ERROR_KVM_NOSYMBOL  4
 #define NETSTAT_ERROR_KVM_SHORTREAD 5
 
-struct netstat;
-struct netstat_list;
+struct socket_type;
+struct socket_type_list;
 
 __BEGIN_DECLS
-const char	  *netstat_strerror(int);
+const char	    *netstat_strerror(int);
 
-struct netstat_list *netstat_nsl_alloc(void);
-struct netstat	    *netstat_nsl_first(struct netstat_list *);
-struct netstat	    *netstat_nsl_next(struct netstat *);
-struct netstat	    *netstat_nsl_find(struct netstat_list *,
-			int, const char *);
+struct socket_type_list	    *netstat_stl_alloc(void);
+struct socket_type	    *netstat_stl_first(struct socket_type_list *);
+struct socket_type	    *netstat_stl_next(struct socket_type *);
+struct socket_type	    *netstat_stl_find(struct socket_type_list *,
+				int, const char *);
 
-void	netstat_nsl_free(struct netstat_list *);
-int	netstat_nsl_geterror(struct netstat_list *);
+void	netstat_stl_free(struct socket_type_list *);
+int	netstat_stl_geterror(struct socket_type_list *);
 
-int	netstat_sysctl_all(struct netstat_list *, int);
-int	netstat_sysctl_tcp(struct netstat_list *, int);
-int	netstat_sysctl_udp(struct netstat_list *, int);
-
-int	netstat_kvm_all(struct netstat_list *, void *);
-int	netstat_kvm_tcp(struct netstat_list *, void *);
-int	netstat_kvm_udp(struct netstat_list *, void *);
+int	netstat_sysctl_socket(struct socket_type_list *, int);
+int	netstat_kvm_socket(struct socket_type_list *, void *);
 __END_DECLS
 
 #endif /* !_NETSTAT_H_ */

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

@@ -3,26 +3,41 @@
 #define _NETSTAT_INTERNAL_H_
 
 #include <sys/queue.h>
+#include <sys/socket.h>
 #include <kvm.h>
 
-struct netstat {
-	int   ns_type;
-	char  ns_name[NETSTAT_MAXNAME];
+struct socket_type {
+	/* static properties */
+	unsigned short	st_family;
+	unsigned short	st_protocol;
+	int		st_type;
+	int		st_flags;
+	char		st_name[SOCKTYPE_MAXNAME];
+
+	struct sockaddr_storage	    *st_local_address;
+	/* local address count, XXX: SCTP */
+	int			    st_la_cnt;
+	struct sockaddr_storage	    *st_remote_address;
+	/* remote address count */
+	int			    st_ra_cnt;
+
+	struct sockcred		    st_credentials;
 
-	LIST_ENTRY(netstat) ns_list;
+	/* list of types */
+	LIST_ENTRY(socket_type) st_list;
 };
 
-struct netstat_list {
-	LIST_HEAD(, netstat)  nsl_list;
-	int		      nsl_error;
+struct socket_type_list {
+	LIST_HEAD(, socket_type)    stl_list;
+	int			    stl_error;
 };
 
 int kread(kvm_t *, void *, void *, size_t, size_t);
 int kread_string(kvm_t *, void *, char *, int);
 
-void		    _netstat_nsl_empty(struct netstat_list *);
-struct netstat	    *_netstat_ns_allocate(struct netstat_list *,
+void		    _netstat_stl_empty(struct socket_type_list *);
+struct socket_type  *_netstat_st_allocate(struct socket_type_list *,
 		      int, const char *);
-void		    _netstat_ns_reset_stats(struct netstat *);
+void		    _netstat_ns_reset_stats(struct socket_type *);
 
 #endif /* !_NETSTAT_INTERNAL_H_ */

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

@@ -63,103 +63,103 @@
 	}
 }
 
-struct netstat_list *
-netstat_nsl_alloc(void)
+struct socket_type_list *
+netstat_stl_alloc(void)
 {
-	struct netstat_list *nslp;
+	struct socket_type_list *stlp;
 
-	nslp = malloc(sizeof(*nslp));
-	if (nslp == NULL)
+	stlp = malloc(sizeof(*stlp));
+	if (stlp == NULL)
 		return NULL;
 
-	LIST_INIT(&nslp->nsl_list);
-	nslp->nsl_error = NETSTAT_ERROR_UNDEFINED;
-	return (nslp);
+	LIST_INIT(&stlp->stl_list);
+	stlp->stl_error = NETSTAT_ERROR_UNDEFINED;
+	return (stlp);
 }
 
-struct netstat *
-netstat_nsl_first(struct netstat_list *list)
+struct socket_type *
+netstat_stl_first(struct socket_type_list *list)
 {
-	return (LIST_FIRST(&list->nsl_list));
+	return (LIST_FIRST(&list->stl_list));
 }
 
-struct netstat *
-netstat_nsl_next(struct netstat * nsp)
+struct socket_type *
+netstat_stl_next(struct socket_type *stp)
 {
-	return (LIST_NEXT(nsp, ns_list));
+	return (LIST_NEXT(stp, st_list));
 }
 
 void
-_netstat_nsl_empty(struct netstat_list *list)
+_netstat_stl_empty(struct socket_type_list *list)
 {
-	struct netstat *nsp;
+	struct socket_type *stp;
 
-	while ((nsp = LIST_FIRST(&list->nsl_list))) {
-		LIST_REMOVE(nsp, ns_list);
-		free(nsp);
+	while ((stp = LIST_FIRST(&list->stl_list))) {
+		LIST_REMOVE(stp, st_list);
+		free(stp);
 	}
 }
 
 void
-_netstat_nsl_free(struct netstat_list *list)
+_netstat_stl_free(struct socket_type_list *list)
 {
-	_netstat_nsl_empty(list);
+	_netstat_stl_empty(list);
 	free(list);
 }
 
 int
-netstat_nsl_geterror(struct netstat_list *list)
+netstat_stl_geterror(struct socket_type_list *list)
 {
-	return (list->nsl_error);
+	return (list->stl_error);
 }
 
-struct netstat *
-netstat_nsl_find(struct netstat_list *list, int ns_type,
+struct socket_type *
+netstat_stl_find(struct socket_type_list *list, int st_type,
     const char *name)
 {
-	struct netstat *nsp;
+	struct socket_type *stp;
 
-	LIST_FOREACH(nsp, &list->nsl_list, ns_list) {
-		if ((nsp->ns_type == ns_type ||
-		    ns_type == NETSTAT_TYPE_ANY) &&
-		    strcmp(nsp->ns_name, name) == 0)
-			return (nsp);
+	/* XXX: no "any" */
+	LIST_FOREACH(stp, &list->stl_list, st_list) {
+		if ((stp->st_type == st_type) &&
+		    strcmp(stp->st_name, name) == 0)
+			return (stp);
 	}
 	return (NULL);
 }
 
-struct netstat *
-_netstat_ns_allocate(struct netstat_list *list, int ns_type,
+struct socket_type *
+_netstat_st_allocate(struct socket_type_list *list, int st_type,
     const char *name)
 {
-	struct netstat *nsp;
+	struct socket_type *stp;
 
-	nsp = malloc(sizeof(*nsp));
-	if (nsp == NULL)
+	stp = malloc(sizeof(*stp));
+	if (stp == NULL)
 		return (NULL);
 
-	bzero(nsp, sizeof(*nsp));
+	bzero(stp, sizeof(*stp));
 
-	nsp->ns_type = ns_type;
-	strlcpy(nsp->ns_name, name, NETSTAT_MAXNAME);
-	LIST_INSERT_HEAD(&list->nsl_list, nsp, ns_list);
-	return (nsp);
+	stp->st_type = st_type;
+	strlcpy(stp->st_name, name, SOCKTYPE_MAXNAME);
+	LIST_INSERT_HEAD(&list->stl_list, stp, st_list);
+	return (stp);
 }
 
 void
-_netstat_ns_reset_stats(struct netstat *nsp)
+_netstat_st_reset_stats(struct socket_type *stp)
 {
 }
 
 const char *
-netstat_get_name(const struct netstat *nsp)
+netstat_st_get_name(const struct socket_type *stp)
 {
-	return (nsp->ns_name);
+	return (stp->st_name);
 }
 
 int
-netstat_get_type(const struct netstat *nsp)
+netstat_st_get_type(const struct socket_type *stp)
 {
-	return (nsp->ns_type);
+	return (stp->st_type);
 }
 


More information about the p4-projects mailing list