Index: projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6.c =================================================================== --- projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6.c (revision 311501) +++ projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6.c (revision 311502) @@ -1,139 +1,138 @@ /* * Copyright (c) 2017 Dell EMC Isilon * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include __FBSDID("$FreeBSD$"); #include #include #include #include "ipv6.h" #include "ipv6MIB_oid.h" static struct lmodule *module; static const struct asn_oid oid_ipv6MIB = OIDX_ipv6MIB; static u_int ipv6_reg; int -op_ipv6MIBObjects(struct snmp_context *ctx, struct snmp_value *value, - u_int sub, u_int iidx, enum snmp_op op) +op_ipv6MIBObjects(struct snmp_context *ctx __unused, struct snmp_value *value, + u_int sub, u_int iidx __unused, enum snmp_op op) { const char *namestr = NULL; int name[] = { CTL_NET, PF_INET6, IPPROTO_IPV6, 0 }; int result = 0; size_t resultsiz = sizeof(result); switch (op) { case SNMP_OP_GETNEXT: case SNMP_OP_GET: break; case SNMP_OP_SET: - /* XXX (ngie): this is a lie. It's not implemented. */ return (SNMP_ERR_NOT_WRITEABLE); case SNMP_OP_ROLLBACK: case SNMP_OP_COMMIT: return (SNMP_ERR_NOERROR); } switch (value->var.subs[sub - 1]) { case LEAF_ipv6Forwarding: name[3] = IPV6CTL_FORWARDING; namestr = "IPV6CTL_FORWARDING"; if (sysctl(name, nitems(name), &result, &resultsiz, NULL, 0) < 0) return (SNMP_ERR_GENERR); /* XXX (ngie): hardcoded value. */ value->v.integer = (result) ? 1 : 2; break; case LEAF_ipv6DefaultHopLimit: name[3] = IPV6CTL_DEFHLIM; namestr = "IPV6CTL_DEFHLIM"; if (sysctl(name, nitems(name), &result, &resultsiz, NULL, 0) < 0) return (SNMP_ERR_GENERR); value->v.integer = result; break; case LEAF_ipv6IfTableLastChange: { /* XXX (ngie): this needs to be implemented */ value->v.uint32 = 0; break; } case LEAF_ipv6Interfaces: /* * XXX (ngie): this incorrectly assumes that all interfaces * are IPv6 enabled. */ /*value->v.integer = if_countifindex()*/; break; default: return (SNMP_ERR_NOSUCHNAME); } return (SNMP_ERR_NOERROR); } static void ipv6MIB_start(void) { ipv6_reg = or_register(&oid_ipv6MIB, "The (incomplete) MIB module for RFC 2465.", module); } static int ipv6MIB_init(struct lmodule *mod, int argc __unused, char *argv[] __unused) { module = mod; return (0); } static int ipv6MIB_fini(void) { or_unregister(ipv6_reg); return (0); } const struct snmp_module config = { "This module implements RFC 2465.", ipv6MIB_init, ipv6MIB_fini, NULL, NULL, NULL, ipv6MIB_start, NULL, ipv6MIB_ctree, ipv6MIB_CTREE_SIZE, NULL }; Index: projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_addrPrefixTable.c =================================================================== --- projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_addrPrefixTable.c (revision 311501) +++ projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_addrPrefixTable.c (revision 311502) @@ -1,43 +1,68 @@ /* * Copyright (c) 2017 Dell EMC Isilon * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include __FBSDID("$FreeBSD$"); #include #include #include #include "ipv6_addrPrefixTable.h" int -op_ipv6AddrPrefixTable(struct snmp_context *ctx, struct snmp_value *value, - u_int sub, u_int iidx, enum snmp_op op) +op_ipv6AddrPrefixTable(struct snmp_context *ctx __unused, + struct snmp_value *value, u_int sub, u_int iidx __unused, enum snmp_op op) { + asn_subid_t which; - return (SNMP_ERR_NOSUCHNAME); + switch (op) { + case SNMP_OP_GETNEXT: + case SNMP_OP_GET: + break; + case SNMP_OP_SET: + return (SNMP_ERR_NOT_WRITEABLE); + case SNMP_OP_ROLLBACK: + case SNMP_OP_COMMIT: + return (SNMP_ERR_NOERROR); + } + + which = value->var.subs[sub - 1]; + + switch (which) { + case LEAF_ipv6AddrPrefix: + case LEAF_ipv6AddrPrefixLength: + case LEAF_ipv6AddrPrefixOnLinkFlag: + case LEAF_ipv6AddrPrefixAutonomousFlag: + case LEAF_ipv6AddrPrefixAdvPreferredLifetime: + case LEAF_ipv6AddrPrefixPrefixAdvValidLifetime: + default: + return (SNMP_ERR_RES_UNAVAIL); + } + + return (SNMP_ERR_NOERROR); } Index: projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_addrTable.c =================================================================== --- projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_addrTable.c (revision 311501) +++ projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_addrTable.c (revision 311502) @@ -1,42 +1,66 @@ /* * Copyright (c) 2017 Dell EMC Isilon * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include __FBSDID("$FreeBSD$"); #include #include #include "ipv6_addrTable.h" int -op_ipv6AddrTable(struct snmp_context *ctx, struct snmp_value *value, - u_int sub, u_int iidx, enum snmp_op op) +op_ipv6AddrTable(struct snmp_context *ctx __unused, struct snmp_value *value, + u_int sub, u_int iidx __unused, enum snmp_op op) { + asn_subid_t which; - return (SNMP_ERR_NOSUCHNAME); + switch (op) { + case SNMP_OP_GETNEXT: + case SNMP_OP_GET: + break; + case SNMP_OP_SET: + return (SNMP_ERR_NOT_WRITEABLE); + case SNMP_OP_ROLLBACK: + case SNMP_OP_COMMIT: + return (SNMP_ERR_NOERROR); + } + + which = value->var.subs[sub - 1]; + + switch (which) { + case LEAF_ipv6AddrAddress: + case LEAF_ipv6AddrPfxLength: + case LEAF_ipv6AddrType: + case LEAF_ipv6AddrAnycastFlag: + case LEAF_ipv6AddrStatus: + default: + return (SNMP_ERR_RES_UNAVAIL); + } + + return (SNMP_ERR_NOERROR); } Index: projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_ifStatsTable.c =================================================================== --- projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_ifStatsTable.c (revision 311501) +++ projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_ifStatsTable.c (revision 311502) @@ -1,43 +1,81 @@ /* * Copyright (c) 2017 Dell EMC Isilon * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include __FBSDID("$FreeBSD$"); #include #include #include "ipv6.h" int -op_ipv6IfStatsTable(struct snmp_context *ctx, struct snmp_value *value, - u_int sub, u_int iidx, enum snmp_op op) +op_ipv6IfStatsTable(struct snmp_context *ctx __unused, struct snmp_value *value, + u_int sub, u_int iidx __unused, enum snmp_op op) { + asn_subid_t which; - /* Not yet implemented */ - return (SNMP_ERR_NOSUCHNAME); + switch (op) { + case SNMP_OP_GETNEXT: + case SNMP_OP_GET: + break; + case SNMP_OP_SET: + return (SNMP_ERR_NOT_WRITEABLE); + case SNMP_OP_ROLLBACK: + case SNMP_OP_COMMIT: + return (SNMP_ERR_NOERROR); + } + + which = value->var.subs[sub - 1]; + + switch (which) { + case LEAF_ipv6IfStatsInReceives: + case LEAF_ipv6IfStatsInHdrErrors: + case LEAF_ipv6IfStatsInTooBigErrors: + case LEAF_ipv6IfStatsInNoRoutes: + case LEAF_ipv6IfStatsInAddrErrors: + case LEAF_ipv6IfStatsInUnknownProtos: + case LEAF_ipv6IfStatsInTruncatedPkts: + case LEAF_ipv6IfStatsInDiscards: + case LEAF_ipv6IfStatsInDelievers: + case LEAF_ipv6IfStatsOutForwDatagrams: + case LEAF_ipv6IfStatsOutRequests: + case LEAF_ipv6IfStatsOutDiscards: + case LEAF_ipv6IfStatsOutFragOKs: + case LEAF_ipv6IfStatsOutFragFails: + case LEAF_ipv6IfStatsOutFragCreates: + case LEAF_ipv6IfStatsReasmReqds: + case LEAF_ipv6IfStatsReasmOKs: + case LEAF_ipv6IfStatsReasmFails: + case LEAF_ipv6IfStatsInMcastPkts: + case LEAF_ipv6IfStatsOutMcastPkts: + default: + return (SNMP_ERR_RES_UNAVAIL); + } + + return (SNMP_ERR_NOERROR); } Index: projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_ifTable.c =================================================================== --- projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_ifTable.c (revision 311501) +++ projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_ifTable.c (revision 311502) @@ -1,205 +1,205 @@ /*- * Copyright (c) 2017 Dell EMC Isilon * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include __FBSDID("$FreeBSD$"); #include #include #include #include #include #include #include #include "ipv6.h" int -op_ipv6IfTable(struct snmp_context *ctx, struct snmp_value *value, - u_int sub, u_int iidx, enum snmp_op op) +op_ipv6IfTable(struct snmp_context *ctx __unused, struct snmp_value *value, + u_int sub, u_int iidx __unused, enum snmp_op op) { asn_subid_t which; switch (op) { case SNMP_OP_GETNEXT: #if 0 ip = NEXT_OBJECT_INT(&ipv6_interfaces, &value->var, sub); if (ip == NULL) return SNMP_ERR_NOSUCHNAME; value->var.len = sub + 1; value->var.subs[sub] = ip->index; #endif break; case SNMP_OP_GET: #if 0 ip = FIND_OBJECT_INT(&ipv6_interfaces, &value->var, sub); if (ip == NULL) return (SNMP_ERR_NOSUCHNAME); #endif break; case SNMP_OP_SET: case SNMP_OP_COMMIT: case SNMP_OP_ROLLBACK: return (SNMP_ERR_NOERROR); default: return (SNMP_ERR_RES_UNAVAIL); } which = value->var.subs[sub - 1]; switch (which) { case LEAF_ipv6IfDescr: #if 0 string_get(value, ip->name, strlen(ip->name)); #endif break; case LEAF_ipv6IfLowerLayer: /* * TODO: return nullOID until the proper way is figured out. * For now, use `oid_zeroDotZero`. */ oid_get(value, &oid_zeroDotZero); break; case LEAF_ipv6IfReasmMaxSize: value->v.uint32 = IPV6_MAXPACKET; break; case LEAF_ipv6IfEffectiveMtu: { #if 0 struct ifreq ifr; int s; memset(&ifr, 0, sizeof(ifr)); ifr.ifr_addr.sa_family = AF_INET6; strncpy(ifr.ifr_name, ip->name, sizeof(ifr.ifr_name)); if ((s = socket(ifr.ifr_addr.sa_family, SOCK_DGRAM, 0)) < 0) return (SNMP_ERR_RES_UNAVAIL); if (ioctl(s, SIOCGIFMTU, (caddr_t) &ifr) != -1) value->v.uint32 = ifr.ifr_mtu; close(s); #endif break; } case LEAF_ipv6IfIdentifier: string_get(value, "", 0); break; case LEAF_ipv6IfIdentifierLength: /* XXX (ngie): get the length of LEAF_ipv6IfIdentifier */ value->v.integer = 0; break; case LEAF_ipv6IfPhysicalAddress: { #if 0 get_physaddr(); if (tmp == NULL) string_get(value, "", 0); else string_get(value, tmp, strlen(tmp)); #endif break; } case LEAF_ipv6IfAdminStatus: { #if 0 struct ifaddrs *ifap, *ifa; if (getifaddrs(&ifap) == -1) { value->v.integer = 4; /* Unknown */ break; } value->v.integer = 2; for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { if (strcmp(ifa->ifa_name, ip->name) != 0) continue; if (ifa->ifa_addr->sa_family != AF_INET6) continue; value->v.integer = (ifa->ifa_flags & IFF_RUNNING) ? 1 : 2; break; } freeifaddrs(ifap); #endif break; } case LEAF_ipv6IfOperStatus: { #if 0 struct ifaddrs *ifap, *ifa; if (getifaddrs(&ifap) == -1) { value->v.integer = 4; /* Unknown */ break; } value->v.integer = 2; for (ifa = ifap; ifa != NULL; ifa = ifa->ifa_next) { if (strcmp(ifa->ifa_name, ip->name) != 0) continue; if (ifa->ifa_addr->sa_family != AF_INET6) continue; value->v.integer = (ifa->ifa_flags & IFF_UP) ? 1 : 2; break; } freeifaddrs(ifap); #endif break; } case LEAF_ipv6IfLastChange: { #if 0 /* * XXX (ngie): not checking for error code from * gettimeofday(2). */ struct timeval lastchange, now; struct ifmibdata ifmd; if (if_getifmibdata(ip->index, &ifmd) != 0) { value->v.uint32 = 0; break; } lastchange = ifmd.ifmd_data.ifi_lastchange; gettimeofday(&now, (struct timezone*)NULL); value->v.uint32 = (uint32_t)((now.tv_sec - lastchange.tv_sec) * 100); value->v.uint32 += (uint32_t)((now.tv_usec - lastchange.tv_usec) / 10000); #endif break; } default: return (SNMP_ERR_RES_UNAVAIL); } return (SNMP_ERR_NOERROR); } Index: projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_netToMediaTable.c =================================================================== --- projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_netToMediaTable.c (revision 311501) +++ projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_netToMediaTable.c (revision 311502) @@ -1,42 +1,67 @@ /* * Copyright (c) 2017 Dell EMC Isilon * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include __FBSDID("$FreeBSD$"); #include #include #include "ipv6.h" int -op_ipv6NetToMediaTable(struct snmp_context *ctx, struct snmp_value *value, - u_int sub, u_int iidx, enum snmp_op op) +op_ipv6NetToMediaTable(struct snmp_context *ctx __unused, + struct snmp_value *value, u_int sub, u_int iidx __unused, enum snmp_op op) { + asn_subid_t which; - return (SNMP_ERR_NOSUCHNAME); + switch (op) { + case SNMP_OP_GETNEXT: + case SNMP_OP_GET: + break; + case SNMP_OP_SET: + return (SNMP_ERR_NOT_WRITEABLE); + case SNMP_OP_ROLLBACK: + case SNMP_OP_COMMIT: + return (SNMP_ERR_NOERROR); + } + + which = value->var.subs[sub - 1]; + + switch (which) { + case LEAF_ipv6NetToMediaAddress: + case LEAF_ipv6NetToMediaPhysAddress: + case LEAF_ipv6NetToMediaType: + case LEAF_ipv6NetToMediaState: + case LEAF_ipv6NetToMediaLastUpdated: + case LEAF_ipv6NetToMediaValid: + default: + return (SNMP_ERR_RES_UNAVAIL); + } + + return (SNMP_ERR_NOERROR); } Index: projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_routeTable.c =================================================================== --- projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_routeTable.c (revision 311501) +++ projects/bsnmp-ipv6-mib/usr.sbin/bsnmpd/modules/snmp_ipv6/ipv6_routeTable.c (revision 311502) @@ -1,42 +1,75 @@ /* * Copyright (c) 2017 Dell EMC Isilon * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include __FBSDID("$FreeBSD$"); #include #include #include "ipv6_routeTable.h" int -op_ipv6RouteTable(struct snmp_context *ctx, struct snmp_value *value, - u_int sub, u_int iidx, enum snmp_op op) +op_ipv6RouteTable(struct snmp_context *ctx __unused, struct snmp_value *value, + u_int sub, u_int iidx __unused, enum snmp_op op) { + asn_subid_t which; - return (SNMP_ERR_NOSUCHNAME); + switch (op) { + case SNMP_OP_GETNEXT: + case SNMP_OP_GET: + break; + case SNMP_OP_SET: + return (SNMP_ERR_NOT_WRITEABLE); + case SNMP_OP_ROLLBACK: + case SNMP_OP_COMMIT: + return (SNMP_ERR_NOERROR); + } + + which = value->var.subs[sub - 1]; + + switch (which) { + case LEAF_ipv6RouteDest: + case LEAF_ipv6RoutePfxLength: + case LEAF_ipv6RouteIndex: + case LEAF_ipv6RouteIfIndex: + case LEAF_ipv6RouteNextHop: + case LEAF_ipv6RouteType: + case LEAF_ipv6RouteProtocol: + case LEAF_ipv6RoutePolicy: + case LEAF_ipv6RouteAge: + case LEAF_ipv6RouteNextHopRDI: + case LEAF_ipv6RouteMetric: + case LEAF_ipv6RouteWeight: + case LEAF_ipv6RouteInfo: + case LEAF_ipv6RouteValid: + default: + return (SNMP_ERR_RES_UNAVAIL); + } + + return (SNMP_ERR_NOERROR); }