From owner-p4-projects@FreeBSD.ORG Mon May 10 18:33:44 2010 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id EA9471065678; Mon, 10 May 2010 18:33:43 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [69.147.83.52]) by hub.freebsd.org (Postfix) with ESMTP id AEE1D106567A for ; Mon, 10 May 2010 18:33:43 +0000 (UTC) (envelope-from aman@freebsd.org) Received: from repoman.freebsd.org (repoman.freebsd.org [69.147.83.41]) by mx1.freebsd.org (Postfix) with ESMTP id 98CD08FC12 for ; Mon, 10 May 2010 18:33:43 +0000 (UTC) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id o4AIXhVm040702 for ; Mon, 10 May 2010 18:33:43 GMT (envelope-from aman@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id o4AIXhjQ040700 for perforce@freebsd.org; Mon, 10 May 2010 18:33:43 GMT (envelope-from aman@freebsd.org) Date: Mon, 10 May 2010 18:33:43 GMT Message-Id: <201005101833.o4AIXhjQ040700@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to aman@freebsd.org using -f From: Aman Jassal To: Perforce Change Reviews Precedence: bulk Cc: Subject: PERFORCE change 178051 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 10 May 2010 18:33:44 -0000 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 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 #include #include +#include #include #include @@ -74,7 +75,6 @@ #include #include #include -#include #include ==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet/ip_icmp.c#5 (text+ko) ==== @@ -47,6 +47,7 @@ #include #include #include +#include #include #include ==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet/ip_mroute.c#8 (text+ko) ==== @@ -99,6 +99,7 @@ #include #include #include +#include #include #include @@ -112,7 +113,6 @@ #include #include #include -#include #include @@ -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 #include +#include #include #include @@ -80,7 +81,6 @@ #endif #include #include -#include #include #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