[freebsd 11.2] net-snmpd incomplete mac addresses

Yuri Pankov yuripv at yuripv.net
Fri Oct 5 13:15:43 UTC 2018


Patrick Lamaiziere wrote:
> Hello,
> 
> freebsd 11.2/amd64 release
> net-snmp-5.7.3_18
> 
> net-snmpd returns incomplete MAC addresses in IF-MIB::ifPhysAddress,
> the first octet is always "0".
> 
> $ snmpwalk -v 2c -c "xxx" localhost 1.3.6.1.2.1.2.2.1.6
> IF-MIB::ifPhysAddress.1 = STRING: 0:36:9f:93:7d:f8
> IF-MIB::ifPhysAddress.2 = STRING: 0:36:9f:93:7d:fa
> IF-MIB::ifPhysAddress.3 = STRING: 0:f4:bb:ef:c8:e4
> ...
> 
> $ ifconfig | grep ether
> 	ether a0:36:9f:93:7d:f8
> 	ether a0:36:9f:93:7d:fa
> 	ether ec:f4:bb:ef:c8:e4
> 
> tcpdump confirms that the problem is in net-snmpd (and not the client).
> 
> Also when using the MIB IP-MIB::ipNetToMediaPhysAddress the MAC
> addresses are correct.
> 
> $ snmpwalk -v2c -c '***r***' localhost IP-MIB::ipNetToMediaPhysAddress | grep a0:36:9f:93:7d:f8
> IP-MIB::ipNetToMediaPhysAddress.13.10.10.1.118 = STRING: a0:36:9f:93:7d:f8
> 
> I've checked net-snmpd 5.7.3 under linux and the mac addresses are
> correct. (So it's specific to FreeBSD.)
> 
> Any clue ?

It looks like net-snmp being stupid, try the attached patch (put to files/).
-------------- next part --------------
--- agent/mibgroup/if-mib/data_access/interface_sysctl.c.orig	2018-10-05 13:11:25 UTC
+++ agent/mibgroup/if-mib/data_access/interface_sysctl.c
@@ -397,7 +397,8 @@ netsnmp_arch_interface_container_load(netsnmp_containe
                 }
             }
             adl = (struct sockaddr_dl *) a;
-            if_name = (char *) adl->sdl_data;
+            if_name = malloc(adl->sdl_nlen + 1);
+            memcpy(if_name, adl->sdl_data, adl->sdl_nlen);
             if_name[adl->sdl_nlen] = '\0';
         }
         if (!(ifp->ifm_addrs & RTA_IFP) || if_name == NULL) {
@@ -411,6 +412,7 @@ netsnmp_arch_interface_container_load(netsnmp_containe
             netsnmp_access_interface_container_free(container,
                                                     NETSNMP_ACCESS_INTERFACE_FREE_NOFLAGS);
             free(if_list);
+            free(if_name);
             return -3;
         }
 
@@ -429,6 +431,7 @@ netsnmp_arch_interface_container_load(netsnmp_containe
             entry->paddr_len = 6;
             memset(entry->paddr, 0, 6);
         }
+	free(if_name);
 
         entry->mtu = ifp->ifm_data.ifi_mtu;
         entry->type = ifp->ifm_data.ifi_type;


More information about the freebsd-net mailing list