PERFORCE change 178051 for review

Aman Jassal aman at FreeBSD.org
Mon May 10 18:33:44 UTC 2010


http://p4web.freebsd.org/@@178051?ac=10

Change 178051 by aman at src on 2010/05/10 18:33:15

	Fix MIF sysctl procedures for IPv4 and IPv6, that generated WARNING messages. In some files, the #include <net/stat.h> was added if needed.
	
	Reviewed by:	pgj	

Affected files ...

.. //depot/projects/soc2009/pgj_libstat/src/sys/netinet/igmp.c#6 edit
.. //depot/projects/soc2009/pgj_libstat/src/sys/netinet/ip_icmp.c#5 edit
.. //depot/projects/soc2009/pgj_libstat/src/sys/netinet/ip_mroute.c#8 edit
.. //depot/projects/soc2009/pgj_libstat/src/sys/netinet/udp_usrreq.c#8 edit
.. //depot/projects/soc2009/pgj_libstat/src/sys/netinet6/ip6_mroute.c#9 edit

Differences ...

==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet/igmp.c#6 (text+ko) ====

@@ -65,6 +65,7 @@
 #include <net/if.h>
 #include <net/netisr.h>
 #include <net/vnet.h>
+#include <net/stat.h>
 
 #include <netinet/in.h>
 #include <netinet/in_var.h>
@@ -74,7 +75,6 @@
 #include <netinet/ip_options.h>
 #include <netinet/igmp.h>
 #include <netinet/igmp_var.h>
-#include <netinet/tcp_var.h>
 
 #include <machine/in_cksum.h>
 

==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet/ip_icmp.c#5 (text+ko) ====

@@ -47,6 +47,7 @@
 #include <net/if_types.h>
 #include <net/route.h>
 #include <net/vnet.h>
+#include <net/stat.h>
 
 #include <netinet/in.h>
 #include <netinet/in_pcb.h>

==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet/ip_mroute.c#8 (text+ko) ====

@@ -99,6 +99,7 @@
 #include <net/netisr.h>
 #include <net/route.h>
 #include <net/vnet.h>
+#include <net/stat.h>
 
 #include <netinet/in.h>
 #include <netinet/igmp.h>
@@ -112,7 +113,6 @@
 #include <netinet/pim.h>
 #include <netinet/pim_var.h>
 #include <netinet/udp.h>
-#include <netinet/tcp_var.h>
 
 #include <machine/in_cksum.h>
 
@@ -795,7 +795,7 @@
 }
 
 static int
-export_viftable(SYSCTL_HANDLER_ARGS)
+sysctl_export_viftable(SYSCTL_HANDLER_ARGS)
 {
 	struct vif_stream vs;
 	struct vif_data vd;
@@ -812,16 +812,23 @@
 	VIF_LOCK();
 
 	vs.vs_count = numvifs;
+
+	VIF_UNLOCK();
+
 	buflen = sizeof(vs) + vs.vs_count * sizeof(vd) + 1;
 	buffer = malloc(buflen, M_TEMP, M_WAITOK | M_ZERO);
+
+	VIF_LOCK();
+
 	sbuf_new(&sbuf, buffer, buflen, SBUF_FIXEDLEN);
 
 	if (sbuf_bcat(&sbuf, &vs, sizeof(vs)) < 0) {
+		VIF_UNLOCK();
 		error = ENOMEM;
 		goto out;
 	}
 
-	for (vifi = 0; vifi < numvifs; vifi++) {
+	for (vifi = 0; vifi < min(vs.vs_count, numvifs); vifi++) {
 		v = &viftable[vifi];
 
 		bzero(&vd, sizeof(vd));
@@ -836,6 +843,7 @@
 		vd.vd_bytes_out = v->v_bytes_out;
 
 		if (sbuf_bcat(&sbuf, &vd, sizeof(vd)) < 0) {
+			VIF_UNLOCK();
 			error = ENOMEM;
 			goto out;
 		}
@@ -851,11 +859,11 @@
 }
 
 SYSCTL_PROC(_net_inet_ip, OID_AUTO, sviftable, CTLFLAG_RD|CTLTYPE_STRUCT,
-    0, 0, export_viftable, "s,struct vif_data",
+    0, 0, sysctl_export_viftable, "s,struct vif_data",
     "IPv4 Multicast Interfaces (streamed)");
 
 static int
-export_mfctable(SYSCTL_HANDLER_ARGS)
+sysctl_export_mfctable(SYSCTL_HANDLER_ARGS)
 {
 	struct mfc_stream ms;
 	struct mfc_data md;
@@ -863,7 +871,7 @@
 	int error, buflen;
 	char *buffer;
 	struct mfc *m;
-	u_int32_t i;
+	u_int32_t i, j;
 
 	error = 0;
 	bzero(&ms, sizeof(ms));
@@ -880,15 +888,22 @@
 			ms.ms_count++;
 	}
 
+	MFC_UNLOCK();
+
 	buflen = sizeof(ms) + ms.ms_count * sizeof(md) + 1;
 	buffer = malloc(buflen, M_TEMP, M_WAITOK | M_ZERO);
+
+	MFC_LOCK();
+
 	sbuf_new(&sbuf, buffer, buflen, SBUF_FIXEDLEN);
 
 	if (sbuf_bcat(&sbuf, &ms, sizeof(ms)) < 0) {
+		MFC_UNLOCK();
 		error = ENOMEM;
 		goto out;
 	}
 
+	j = 0;
 	if (mfchashtbl != NULL)
 	for (i = 0; i < mfchashsize; i++) {
 		LIST_FOREACH(m, &mfchashtbl[i], mfc_hash) {
@@ -902,9 +917,15 @@
 			bcopy(m->mfc_ttls, md.md_ttls, sizeof(md.md_ttls));
 
 			if (sbuf_bcat(&sbuf, &md, sizeof(md)) < 0) {
+				MFC_UNLOCK();
 				error = ENOMEM;
 				goto out;
 			}
+
+			if (j < ms.ms_count)
+				j++;
+			else
+				break;
 		}
 	}
 
@@ -918,7 +939,7 @@
 }
 
 SYSCTL_PROC(_net_inet_ip, OID_AUTO, smfctable, CTLFLAG_RD|CTLTYPE_STRUCT,
-    0, 0, export_mfctable, "s,struct mfc_data",
+    0, 0, sysctl_export_mfctable, "s,struct mfc_data",
     "IPv4 Multicast Forwarding Table (streamed)");
 
 /*

==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet/udp_usrreq.c#8 (text+ko) ====

@@ -62,6 +62,7 @@
 
 #include <net/if.h>
 #include <net/route.h>
+#include <net/stat.h>
 
 #include <netinet/in.h>
 #include <netinet/in_pcb.h>
@@ -80,7 +81,6 @@
 #endif
 #include <netinet/udp.h>
 #include <netinet/udp_var.h>
-#include <netinet/tcp_var.h>
 #include <net/vnet.h>
 
 #ifdef IPSEC

==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet6/ip6_mroute.c#9 (text+ko) ====

@@ -520,7 +520,7 @@
 }
 
 static int
-export_mif6table(SYSCTL_HANDLER_ARGS)
+sysctl_export_mif6table(SYSCTL_HANDLER_ARGS)
 {
 	struct mif6_stream ms;
 	struct mif6_data md;
@@ -537,16 +537,23 @@
 	MIF6_LOCK();
 
 	ms.ms_count = nummifs;
+
+	MIF6_UNLOCK();
+
 	buflen = sizeof(ms) + ms.ms_count * sizeof(md) + 1;
 	buffer = malloc(buflen, M_TEMP, M_WAITOK | M_ZERO);
+
+	MIF6_LOCK();
+
 	sbuf_new(&sbuf, buffer, buflen, SBUF_FIXEDLEN);
 
 	if (sbuf_bcat(&sbuf, &ms, sizeof(ms)) < 0) {
+		MIF6_UNLOCK();
 		error = ENOMEM;
 		goto out;
 	}
 
-	for (mifi = 0; mifi < nummifs; mifi++) {
+	for (mifi = 0; mifi < min(ms.ms_count, nummifs); mifi++) {
 		m = &mif6table[mifi];
 
 		bzero(&md, sizeof(md));
@@ -560,6 +567,7 @@
 		md.md_bytes_out = m->m6_bytes_out;
 
 		if (sbuf_bcat(&sbuf, &md, sizeof(md)) < 0) {
+			MIF6_UNLOCK();
 			error = ENOMEM;
 			goto out;
 		}
@@ -575,11 +583,11 @@
 }
 
 SYSCTL_PROC(_net_inet6_ip6, OID_AUTO, smif6table, CTLFLAG_RD|CTLTYPE_STRUCT,
-    0, 0, export_mif6table, "s,struct mif6_data",
+    0, 0, sysctl_export_mif6table, "s,struct mif6_data",
     "IPv6 Multicast Interfaces (streamed)");
 
 static int
-export_mf6ctable(SYSCTL_HANDLER_ARGS)
+sysctl_export_mf6ctable(SYSCTL_HANDLER_ARGS)
 {
 	struct mf6c_stream ms;
 	struct mf6c_data md;
@@ -588,7 +596,7 @@
 	char *buffer;
 	struct mf6c *m;
 	struct rtdetq *r;
-	u_int32_t i;
+	u_int32_t i, j;
 
 	error = 0;
 	bzero(&ms, sizeof(ms));
@@ -603,15 +611,22 @@
 			ms.ms_count++;
 	}
 
+	MFC6_UNLOCK();
+
 	buflen = sizeof(ms) + ms.ms_count * sizeof(md) + 1;
 	buffer = malloc(buflen, M_TEMP, M_WAITOK | M_ZERO);
+
+	MFC6_LOCK();
+
 	sbuf_new(&sbuf, buffer, buflen, SBUF_FIXEDLEN);
 
 	if (sbuf_bcat(&sbuf, &ms, sizeof(ms)) < 0) {
+		MFC6_UNLOCK();
 		error = ENOMEM;
 		goto out;
 	}
 
+	j = 0;
 	for (i = 0; i < MF6CTBLSIZ; i++) {
 		for (m = mf6ctable[i]; m != NULL; m = m->mf6c_next) {
 			bzero(&md, sizeof(md));
@@ -631,9 +646,15 @@
 			    sizeof(md.md_ifs_bits));
 
 			if (sbuf_bcat(&sbuf, &md, sizeof(md)) < 0) {
+				MFC6_UNLOCK();
 				error = ENOMEM;
 				goto out;
 			}
+
+			if (j < ms.ms_count)
+				j++;
+			else
+				break;
 		}
 	}
 
@@ -647,7 +668,7 @@
 }
 
 SYSCTL_PROC(_net_inet6_ip6, OID_AUTO, smf6ctable, CTLFLAG_RD|CTLTYPE_STRUCT,
-    0, 0, export_mf6ctable, "s,struct mf6c_data",
+    0, 0, sysctl_export_mf6ctable, "s,struct mf6c_data",
     "IPv6 Multicast Forwarding Table (streamed)");
 
 static int


More information about the p4-projects mailing list