PERFORCE change 167459 for review
Gabor Pali
pgj at FreeBSD.org
Tue Aug 18 02:55:56 UTC 2009
http://perforce.freebsd.org/chv.cgi?CH=167459
Change 167459 by pgj at petymeg-current on 2009/08/18 02:55:38
Add support for exporting IPv6 multicast interface data in a
standardized format via sysctl(3) [net.inet6.ip6.smif6table].
Affected files ...
.. //depot/projects/soc2009/pgj_libstat/src/sys/netinet6/ip6_mroute.c#4 edit
.. //depot/projects/soc2009/pgj_libstat/src/sys/netinet6/ip6_mroute.h#3 edit
Differences ...
==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet6/ip6_mroute.c#4 (text+ko) ====
@@ -95,6 +95,7 @@
#include <sys/module.h>
#include <sys/domain.h>
#include <sys/protosw.h>
+#include <sys/sbuf.h>
#include <sys/signalvar.h>
#include <sys/socket.h>
#include <sys/socketvar.h>
@@ -541,6 +542,65 @@
}
static int
+export_mif6table(SYSCTL_HANDLER_ARGS)
+{
+ struct mif6_stream ms;
+ struct mif6_data md;
+ struct sbuf sbuf;
+ int error, buflen;
+ char *buffer;
+ struct mif6* m;
+ mifi_t mifi;
+
+ error = 0;
+ bzero(&ms, sizeof(ms));
+ ms.ms_version = MIF6_STREAM_VERSION;
+
+ MIF6_LOCK();
+
+ ms.ms_count = nummifs;
+ buflen = sizeof(ms) + ms.ms_count * sizeof(md) + 1;
+ buffer = malloc(buflen, M_TEMP, M_WAITOK | M_ZERO);
+ sbuf_new(&sbuf, buffer, buflen, SBUF_FIXEDLEN);
+
+ if (sbuf_bcat(&sbuf, &ms, sizeof(ms)) < 0) {
+ error = ENOMEM;
+ goto out;
+ }
+
+ for (mifi = 0; mifi < nummifs; mifi++) {
+ m = &mif6table[mifi];
+
+ bzero(&md, sizeof(md));
+ md.md_flags = m->m6_flags;
+ md.md_rate_limit = m->m6_rate_limit;
+ bcopy(&m->m6_lcl_addr, md.md_lcl_addr, sizeof(md.md_lcl_addr));
+ md.md_if_index = m->m6_ifp->if_index;
+ md.md_pkt_in = m->m6_pkt_in;
+ md.md_pkt_out = m->m6_pkt_out;
+ md.md_bytes_in = m->m6_bytes_in;
+ md.md_bytes_out = m->m6_bytes_out;
+
+ if (sbuf_bcat(&sbuf, &md, sizeof(md)) < 0) {
+ error = ENOMEM;
+ goto out;
+ }
+ }
+
+ MIF6_UNLOCK();
+
+ sbuf_finish(&sbuf);
+ error = SYSCTL_OUT(req, sbuf_data(&sbuf), sbuf_len(&sbuf));
+out:
+ free(buffer, M_TEMP);
+ return (error);
+}
+
+SYSCTL_PROC(_net_inet6_ip6, OID_AUTO, smif6table, CTLFLAG_RD|CTLTYPE_STRUCT,
+ 0, 0, export_mif6table, "s,struct mif6_data",
+ "IPv6 Multicast Interfaces (streamed)");
+
+static int
set_pim6(int *i)
{
INIT_VNET_INET6(curvnet);
==== //depot/projects/soc2009/pgj_libstat/src/sys/netinet6/ip6_mroute.h#3 (text+ko) ====
@@ -201,6 +201,25 @@
u_quad_t obytes; /* Output byte count on mif */
};
+#define MIF6_STREAM_VERSION 0x00000001
+
+struct mif6_stream {
+ u_int32_t ms_version;
+ u_int32_t ms_count;
+};
+
+struct mif6_data {
+ u_int8_t md_flags;
+ u_int16_t md_rate_limit;
+ u_int8_t md_lcl_addr[16]; /* 128-bit IP6 address */
+ u_int32_t md_if_index;
+ u_int64_t md_pkt_in;
+ u_int64_t md_pkt_out;
+ u_int64_t md_bytes_in;
+ u_int64_t md_bytes_out;
+ u_int8_t _md_pad[9];
+};
+
#if defined(_KERNEL) || defined(KERNEL)
/*
* The kernel's multicast-interface structure.
More information about the p4-projects
mailing list