Date: Mon, 10 May 2010 18:33:43 GMT From: Aman Jassal <aman@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 178051 for review Message-ID: <201005101833.o4AIXhjQ040700@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/@@178051?ac=10 Change 178051 by aman@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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201005101833.o4AIXhjQ040700>