summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorjperkin <jperkin>2015-08-20 13:51:03 +0000
committerjperkin <jperkin>2015-08-20 13:51:03 +0000
commite37578a7087c34e1f7dd50374917851324b2e3cc (patch)
tree153963a048a5ac3663f4b5ac0669a9d49e29346f /net
parent81dc631f12d2459a706a740d25ad91a4dd3be9c0 (diff)
downloadpkgsrc-e37578a7087c34e1f7dd50374917851324b2e3cc.tar.gz
Support Crossbow VNICs. Patch by Ben Rockwood, previously of Joyent.
Bump PKGREVISION.
Diffstat (limited to 'net')
-rw-r--r--net/net-snmp/Makefile4
-rw-r--r--net/net-snmp/distinfo4
-rw-r--r--net/net-snmp/patches/patch-agent_mibgroup_kernel__sunos5.c169
-rw-r--r--net/net-snmp/patches/patch-agent_mibgroup_kernel__sunos5.h28
4 files changed, 202 insertions, 3 deletions
diff --git a/net/net-snmp/Makefile b/net/net-snmp/Makefile
index e8d20bd875b..9b0a003cebf 100644
--- a/net/net-snmp/Makefile
+++ b/net/net-snmp/Makefile
@@ -1,8 +1,8 @@
-# $NetBSD: Makefile,v 1.111 2015/06/12 10:50:43 wiz Exp $
+# $NetBSD: Makefile,v 1.112 2015/08/20 13:51:03 jperkin Exp $
.include "Makefile.common"
CATEGORIES= net
-PKGREVISION= 1
+PKGREVISION= 2
MAINTAINER= adam@NetBSD.org
COMMENT= Extensible SNMP implementation
diff --git a/net/net-snmp/distinfo b/net/net-snmp/distinfo
index b769fe61e9c..8a0816f1b4e 100644
--- a/net/net-snmp/distinfo
+++ b/net/net-snmp/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.85 2015/06/08 20:08:57 spz Exp $
+$NetBSD: distinfo,v 1.86 2015/08/20 13:51:03 jperkin Exp $
SHA1 (net-snmp-5.7.3.tar.gz) = 97dc25077257680815de44e34128d365c76bd839
RMD160 (net-snmp-5.7.3.tar.gz) = c5cf54d5723ee417e07f1f9fa3936aef505104a2
@@ -12,6 +12,8 @@ SHA1 (patch-agent_mibgroup_hardware_cpu_cpu__sysctl.c) = 5f1cd89f938b60e57ae87c0
SHA1 (patch-agent_mibgroup_hardware_fsys_fsys_getfsstats.c) = cee9722d9a3f956726a8760b900ed3a375afde3f
SHA1 (patch-agent_mibgroup_hardware_memory_memory__netbsd.c) = 928a5aa99e7893ee91dea3110db8098212e328fa
SHA1 (patch-agent_mibgroup_host_data__access_swrun__kinfo.c) = f983ae0d99d85ab1ac6dc7cf2d2c0415b6935258
+SHA1 (patch-agent_mibgroup_kernel__sunos5.c) = 3e345f92f42a47959716b0176096c6b0d91aa65a
+SHA1 (patch-agent_mibgroup_kernel__sunos5.h) = eb80eb5e55020014b1e5524fd572839aefdce5a5
SHA1 (patch-agent_mibgroup_mibII_ipAddr.c) = cd3345a4b30fe2280d0555ee38feb5f957a55b1e
SHA1 (patch-agent_mibgroup_mibII_ipv6.c) = d6a271145e6ba774cbc1e93caa14e3d22dc43075
SHA1 (patch-agent_mibgroup_mibII_tcpTable.c) = f547f3fd08848803cbf7ce08a41ba463c4d02992
diff --git a/net/net-snmp/patches/patch-agent_mibgroup_kernel__sunos5.c b/net/net-snmp/patches/patch-agent_mibgroup_kernel__sunos5.c
new file mode 100644
index 00000000000..3cbe2d06cbc
--- /dev/null
+++ b/net/net-snmp/patches/patch-agent_mibgroup_kernel__sunos5.c
@@ -0,0 +1,169 @@
+$NetBSD: patch-agent_mibgroup_kernel__sunos5.c,v 1.1 2015/08/20 13:51:03 jperkin Exp $
+
+Support Crossbow.
+
+--- agent/mibgroup/kernel_sunos5.c.orig 2014-12-08 20:23:22.000000000 +0000
++++ agent/mibgroup/kernel_sunos5.c
+@@ -291,8 +291,8 @@ init_kernel_sunos5(void)
+
+
+ int
+-getKstatInt(const char *classname, const char *statname,
+- const char *varname, int *value)
++getKstatInt(char *classname, char *statname,
++ char *varname, int *value)
+ {
+ kstat_ctl_t *ksc;
+ kstat_t *ks;
+@@ -373,7 +373,7 @@ getKstatInt(const char *classname, const
+ }
+
+ int
+-getKstat(const char *statname, const char *varname, void *value)
++getKstat(char *statname, char *varname, void *value)
+ {
+ kstat_ctl_t *ksc;
+ kstat_t *ks, *kstat_data;
+@@ -537,7 +537,7 @@ getKstat(const char *statname, const cha
+ }
+
+ int
+-getKstatString(const char *statname, const char *varname,
++getKstatString(char *statname, char *varname,
+ char *value, size_t value_len)
+ {
+ kstat_ctl_t *ksc;
+@@ -1642,9 +1642,9 @@ set_if_info(mib2_ifEntry_t *ifp, unsigne
+ ifp->ifSpeed = 0;
+
+ /*
+- * Get link speed
++ * Get link speed, try the "link" module first, then fallback to NULL (ie: unix)
+ */
+- if ((getKstatInt(NULL, name, "ifspeed", &ifp->ifSpeed) == 0)) {
++ if ((getKstatInt("link", name, "ifspeed", &ifp->ifSpeed) == 0)) {
+ /*
+ * check for SunOS patch with half implemented ifSpeed
+ */
+@@ -1652,7 +1652,10 @@ set_if_info(mib2_ifEntry_t *ifp, unsigne
+ ifp->ifSpeed *= 1000000;
+ }
+ havespeed = B_TRUE;
+- } else if (getKstatInt(NULL, name, "ifSpeed", &ifp->ifSpeed) == 0) {
++ /* WORKAROUND: If this is a link and DLPI doesn't know, its probly a VNIC */
++ if (ifp->ifType == 1 || ifp->ifType == 0)
++ ifp->ifType = 6;
++ } else if (getKstatInt(NULL, name, "ifspeed", &ifp->ifSpeed) == 0) {
+ /*
+ * this is good
+ */
+@@ -1683,6 +1686,9 @@ set_if_info(mib2_ifEntry_t *ifp, unsigne
+
+ /*
+ * Set link Type and Speed (if it could not be determined from kstat)
++ *
++ * NOTE: This whole method makes no sense in a world of Vanity Names,
++ * and should be completely revised. - benr
+ */
+ if (ifp->ifType == 24) {
+ ifp->ifSpeed = 127000000;
+@@ -1765,15 +1771,31 @@ get_if_stats(mib2_ifEntry_t *ifp)
+ {
+ Counter l_tmp;
+ char *name = ifp->ifDescr.o_bytes;
++ char classname[32];
+
+ if (strchr(name, ':'))
+ return (0);
+
+ /*
++ Added by <benr@joyent.com> on 6/24/11
++ getKstat() calls replaced by getKstatInt with proper class
++ if not present, unix class is used which are 0 values in
++ a Crossbow (VNIC) world.
++
++ FIXME: Should revert to NULL classname if we're on an old release.
++
++ */
++ if (strncmp(name, "lo", 2) == 0) {
++ strcpy(classname, "lo");
++ } else {
++ strcpy(classname, "link");
++ }
++
++ /*
+ * First try to grab 64-bit counters; if they are not available,
+ * fall back to 32-bit.
+ */
+- if (getKstat(name, "ipackets64", &ifp->ifHCInUcastPkts) != 0) {
++ if (getKstatInt(classname, name, "ipackets64", &ifp->ifHCInUcastPkts) != 0) {
+ if (getKstatInt(NULL, name, "ipackets", &ifp->ifInUcastPkts) != 0) {
+ return (-1);
+ }
+@@ -1781,7 +1803,7 @@ get_if_stats(mib2_ifEntry_t *ifp)
+ ifp->ifInUcastPkts = (uint32_t)(ifp->ifHCInUcastPkts & 0xffffffff);
+ }
+
+- if (getKstat(name, "rbytes64", &ifp->ifHCInOctets) != 0) {
++ if (getKstatInt(classname, name, "rbytes64", &ifp->ifHCInOctets) != 0) {
+ if (getKstatInt(NULL, name, "rbytes", &ifp->ifInOctets) != 0) {
+ ifp->ifInOctets = ifp->ifInUcastPkts * 308;
+ }
+@@ -1789,7 +1811,7 @@ get_if_stats(mib2_ifEntry_t *ifp)
+ ifp->ifInOctets = (uint32_t)(ifp->ifHCInOctets & 0xffffffff);
+ }
+
+- if (getKstat(name, "opackets64", &ifp->ifHCOutUcastPkts) != 0) {
++ if (getKstatInt(classname, name, "opackets64", &ifp->ifHCOutUcastPkts) != 0) {
+ if (getKstatInt(NULL, name, "opackets", &ifp->ifOutUcastPkts) != 0) {
+ return (-1);
+ }
+@@ -1797,7 +1819,7 @@ get_if_stats(mib2_ifEntry_t *ifp)
+ ifp->ifOutUcastPkts = (uint32_t)(ifp->ifHCOutUcastPkts & 0xffffffff);
+ }
+
+- if (getKstat(name, "obytes64", &ifp->ifHCOutOctets) != 0) {
++ if (getKstatInt(classname, name, "obytes64", &ifp->ifHCOutOctets) != 0) {
+ if (getKstatInt(NULL, name, "obytes", &ifp->ifOutOctets) != 0) {
+ ifp->ifOutOctets = ifp->ifOutUcastPkts * 308; /* XXX */
+ }
+@@ -1809,31 +1831,31 @@ get_if_stats(mib2_ifEntry_t *ifp)
+ return (0);
+
+ /* some? VLAN interfaces don't have error counters, so ignore failure */
+- getKstatInt(NULL, name, "ierrors", &ifp->ifInErrors);
+- getKstatInt(NULL, name, "oerrors", &ifp->ifOutErrors);
++ getKstatInt(classname, name, "ierrors", &ifp->ifInErrors);
++ getKstatInt(classname, name, "oerrors", &ifp->ifOutErrors);
+
+ /* Try to grab some additional information */
+- getKstatInt(NULL, name, "collisions", &ifp->ifCollisions);
+- getKstatInt(NULL, name, "unknowns", &ifp->ifInUnknownProtos);
++ getKstatInt(classname, name, "collisions", &ifp->ifCollisions);
++ getKstatInt(classname, name, "unknowns", &ifp->ifInUnknownProtos);
+
+
+ /*
+ * TODO some NICs maintain 64-bit counters for multi/broadcast
+ * packets; should try to get that information.
+ */
+- if (getKstatInt(NULL, name, "brdcstrcv", &l_tmp) == 0)
++ if (getKstatInt(classname, name, "brdcstrcv", &l_tmp) == 0)
+ ifp->ifHCInBroadcastPkts = l_tmp;
+
+- if (getKstatInt(NULL, name, "multircv", &l_tmp) == 0)
++ if (getKstatInt(classname, name, "multircv", &l_tmp) == 0)
+ ifp->ifHCInMulticastPkts = l_tmp;
+
+ ifp->ifInNUcastPkts = (uint32_t)(ifp->ifHCInBroadcastPkts +
+ ifp->ifHCInMulticastPkts);
+
+- if (getKstatInt(NULL, name, "brdcstxmt", &l_tmp) == 0)
++ if (getKstatInt(classname, name, "brdcstxmt", &l_tmp) == 0)
+ ifp->ifHCOutBroadcastPkts = l_tmp;
+
+- if (getKstatInt(NULL, name, "multixmt", &l_tmp) == 0)
++ if (getKstatInt(classname, name, "multixmt", &l_tmp) == 0)
+ ifp->ifHCOutMulticastPkts = l_tmp;
+
+ ifp->ifOutNUcastPkts = (uint32_t)(ifp->ifHCOutBroadcastPkts +
diff --git a/net/net-snmp/patches/patch-agent_mibgroup_kernel__sunos5.h b/net/net-snmp/patches/patch-agent_mibgroup_kernel__sunos5.h
new file mode 100644
index 00000000000..cca62189fea
--- /dev/null
+++ b/net/net-snmp/patches/patch-agent_mibgroup_kernel__sunos5.h
@@ -0,0 +1,28 @@
+$NetBSD: patch-agent_mibgroup_kernel__sunos5.h,v 1.1 2015/08/20 13:51:03 jperkin Exp $
+
+Support Crossbow.
+
+--- agent/mibgroup/kernel_sunos5.h.orig 2007-11-08 23:17:16.000000000 +0000
++++ agent/mibgroup/kernel_sunos5.h
+@@ -176,17 +176,17 @@ extern "C" {
+ #endif
+ void init_kernel_sunos5(void);
+
+- int getKstat(const char *statname, const char *varname,
++ int getKstat(char *statname, char *varname,
+ void *value);
+ int getMibstat(mibgroup_e grid, void *resp,
+ size_t entrysize, req_e req_type,
+ int (*comp) (void *, void *), void *arg);
+ int Get_everything(void *, void *);
+- int getKstatInt(const char *classname,
+- const char *statname, const char *varname,
++ int getKstatInt(char *classname,
++ char *statname, char *varname,
+ int *value);
+
+- int getKstatString(const char *statname, const char *varname,
++ int getKstatString(char *statname, char *varname,
+ char *value, size_t value_len);
+
+ int solaris2_if_nametoindex(const char *, int);