diff options
author | jperkin <jperkin> | 2015-08-20 13:51:03 +0000 |
---|---|---|
committer | jperkin <jperkin> | 2015-08-20 13:51:03 +0000 |
commit | e37578a7087c34e1f7dd50374917851324b2e3cc (patch) | |
tree | 153963a048a5ac3663f4b5ac0669a9d49e29346f /net | |
parent | 81dc631f12d2459a706a740d25ad91a4dd3be9c0 (diff) | |
download | pkgsrc-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/Makefile | 4 | ||||
-rw-r--r-- | net/net-snmp/distinfo | 4 | ||||
-rw-r--r-- | net/net-snmp/patches/patch-agent_mibgroup_kernel__sunos5.c | 169 | ||||
-rw-r--r-- | net/net-snmp/patches/patch-agent_mibgroup_kernel__sunos5.h | 28 |
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); |