Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 5 Oct 2018 16:15:21 +0300
From:      Yuri Pankov <yuripv@yuripv.net>
To:        Patrick Lamaiziere <patfbsd@davenulle.org>, freebsd-ports@freebsd.org
Cc:        freebsd-net@freebsd.org
Subject:   Re: [freebsd 11.2] net-snmpd incomplete mac addresses
Message-ID:  <930810ba-b659-d571-de84-995c1c97f1e5@yuripv.net>
In-Reply-To: <20181005133302.5f518dc6@mr185033.univ-rennes1.fr>

index | next in thread | previous in thread | raw e-mail

[-- Attachment #1 --]
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/).

[-- Attachment #2 --]
--- 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;
home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?930810ba-b659-d571-de84-995c1c97f1e5>