Sophie

Sophie

distrib > Scientific%20Linux > 5x > x86_64 > by-pkgid > 20db51d70e6b59a061db97ce9b89c771 > files > 26

net-snmp-5.3.2.2-14.el5.src.rpm

Add support of ipv6InterfaceTable.ipv6InterfaceIdentifier

Source: http://sourceforge.net/tracker/index.php?func=detail&aid=1669048&group_id=12694&atid=312694

./configure --with-mib-modules="ip-mib/ipv4InterfaceTable ip-mib/ipv6InterfaceTable tunnel"
test: snmpwalk 1.3.6.1.2.1.4.30 shows some entries


Index: ./agent/mibgroup/if-mib/data_access/interface_linux.c
===================================================================
RCS file: /cvsroot/net-snmp/net-snmp/agent/mibgroup/if-mib/data_access/interface_linux.c,v
retrieving revision 1.40
diff -u -p -r1.40 interface_linux.c
--- ./agent/mibgroup/if-mib/data_access/interface_linux.c	30 Jan 2007 13:39:42 -0000	1.40
+++ ./agent/mibgroup/if-mib/data_access/interface_linux.c	26 Feb 2007 13:02:25 -0000
@@ -36,6 +36,7 @@ typedef __u8 u8;           /* ditto */
 #include <unistd.h>
 
 #include <linux/sockios.h>
+#include <linux/if_ether.h>
 
 unsigned int
 netsnmp_linux_interface_get_if_speed(int fd, const char *name);
@@ -619,6 +620,31 @@ netsnmp_arch_interface_container_load(ne
                 entry->type = IANAIFTYPE_OTHER;
         }
 
+        /*
+         * interface identifier is specified based on physaddr and type
+         */
+        switch (entry->type) {
+        case IANAIFTYPE_ETHERNETCSMACD:
+        case IANAIFTYPE_ETHERNET3MBIT:
+        case IANAIFTYPE_FASTETHER:
+        case IANAIFTYPE_FASTETHERFX:
+        case IANAIFTYPE_GIGABITETHERNET:
+        case IANAIFTYPE_FDDI:
+        case IANAIFTYPE_ISO88025TOKENRING:
+            if (NULL != entry->paddr && ETH_ALEN != entry->paddr_len)
+                break;
+
+            entry->v6_if_id_len = entry->paddr_len + 2;
+            memcpy(entry->v6_if_id, entry->paddr, 3);
+            memcpy(entry->v6_if_id + 5, entry->paddr + 3, 3);
+            entry->v6_if_id[0] ^= 2;
+            entry->v6_if_id[3] = 0xFF;
+            entry->v6_if_id[4] = 0xFE;
+
+            entry->ns_flags |= NETSNMP_INTERFACE_FLAGS_HAS_V6_IFID;
+            break;
+        }
+
         if (IANAIFTYPE_ETHERNETCSMACD == entry->type)
             entry->speed =
                 netsnmp_linux_interface_get_if_speed(fd, entry->name);