Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Mar 2010 14:43:35 +0200
From:      Vasyl Samoilov <vas@mts.com.ua>
To:        freebsd-net@freebsd.org
Subject:   Poor situation with snmp support in FreeBSD
Message-ID:  <4BAB5A77.7050505@mts.com.ua>

next in thread | raw e-mail | index | archive | help
Hello.
Lately I was desperatly trying to build a networking element based on 
freebsd to fit into overall networking infrastructure. It's not a secret 
that virtually anything now can do more or less snmp, thus I was trying 
to monitor and query my boxes with snmp - it didn't end well. Any help 
would be appreciated.

So far I found two options for snmp daemon - bsnmp and net-snmp. 
net-snmo giving back invalid data, bsnmp lacks some data at all.

What do I expect to get from snmp? As for L3 device, I want to:
1) Get interfaces list with their properties (name, type, speed, mac, 
subnets assigned)
2) Get ARP info (ipNetToPhysicalTable or ipNetToMedia)
3) Get routing table
4) Get neighboor data - LLDP is common protocol for devices now.
extra bonuses like mac address table or vlan info is out of the scope 
for now.

setup:
re0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         
options=389b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
         ether 00:02:b3:c9:75:ef
         inet 192.168.2.2 netmask 0xffffff00 broadcast 192.168.2.255
         media: Ethernet autoselect (10baseT/UTP <full-duplex>)
         status: active
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=8<VLAN_MTU>
         ether 00:02:b3:c9:75:df
         inet 10.101.45.10 netmask 0xffffff80 broadcast 10.101.45.127
         media: Ethernet autoselect (100baseTX <full-duplex>)
         status: active
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
         options=9b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM>
         ether 00:07:e9:0b:2d:96
         inet 192.168.1.2 netmask 0xffffff00 broadcast 192.168.1.255
         media: Ethernet autoselect (1000baseT <full-duplex>)
         status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
         options=3<RXCSUM,TXCSUM>
         inet 127.0.0.1 netmask 0xff000000
tun5: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> metric 0 mtu 1500
         inet 192.168.150.5 --> 192.168.150.6 netmask 0xffffffff
         Opened by PID 1508
vboxnet0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 1500
         ether 0a:00:27:00:00:00
(vboxnet0 was up during snmp session)

IF-MIB::ifName.1 = STRING: re0
IF-MIB::ifName.2 = STRING: rl0
IF-MIB::ifName.3 = STRING: em0
IF-MIB::ifName.4 = STRING: lo0
IF-MIB::ifName.5 = STRING: vboxnet0
IF-MIB::ifName.6 = STRING: tun5

Results:
* net-snmp got ipRoute table, which is outdated. The information is 
relatively correct, but all the types considered to be "local". bsnmp, 
on the other hand, got ipCidrRoute group, but it prints out only routes 
ipCidrRouteType=remote, and ipCidrRouteProto=netmgmt, which makes it 
unuseable (not all routes are printed, only few that are non-local 
destination).
* net-snmp can give out ipNetToMedia to get arp table (yes, it's old and 
should not be used in 2010), bnsmp got no means to get arp table at all.
* out of link-layer advertisements daemons, ladvd seems to be most 
bsd-compatible-feature-rich, but there is no way to export any kind on 
link-layer info via snmp under freebsd at all. neither net-snmp or bsnmp 
support this.

In all other cases, bsnmp was found superior to net-snmp under freebsd:

net-snmp don't handle connector information properly:
net-snmp:
IF-MIB::ifConnectorPresent.1 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.2 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.3 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.4 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.5 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.6 = INTEGER: true(1)
bnsmp:
IF-MIB::ifConnectorPresent.1 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.2 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.3 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.4 = INTEGER: false(2)
IF-MIB::ifConnectorPresent.5 = INTEGER: true(1)
IF-MIB::ifConnectorPresent.6 = INTEGER: false(2)

net-snmp doesn't handle interface ifHighSpeed and ifSpeed properly (An 
estimate of the interface's current bandwidth):
net-snmp:
IF-MIB::ifHighSpeed.1 = Gauge32: 1000
IF-MIB::ifHighSpeed.2 = Gauge32: 100
IF-MIB::ifHighSpeed.3 = Gauge32: 1000
IF-MIB::ifHighSpeed.4 = Gauge32: 0
IF-MIB::ifHighSpeed.5 = Gauge32: 0
IF-MIB::ifHighSpeed.6 = Gauge32: 0
IF-MIB::ifSpeed.1 = Gauge32: 1000000000
IF-MIB::ifSpeed.2 = Gauge32: 100000000
IF-MIB::ifSpeed.3 = Gauge32: 1000000000
IF-MIB::ifSpeed.4 = Gauge32: 0
IF-MIB::ifSpeed.5 = Gauge32: 0
IF-MIB::ifSpeed.6 = Gauge32: 0
bsnmp:
IF-MIB::ifHighSpeed.1 = Gauge32: 10
IF-MIB::ifHighSpeed.2 = Gauge32: 100
IF-MIB::ifHighSpeed.3 = Gauge32: 1000
IF-MIB::ifHighSpeed.4 = Gauge32: 0
IF-MIB::ifHighSpeed.5 = Gauge32: 0
IF-MIB::ifHighSpeed.6 = Gauge32: 0
IF-MIB::ifSpeed.1 = Gauge32: 10000000
IF-MIB::ifSpeed.2 = Gauge32: 100000000
IF-MIB::ifSpeed.3 = Gauge32: 1000000000
IF-MIB::ifSpeed.4 = Gauge32: 0
IF-MIB::ifSpeed.5 = Gauge32: 0
IF-MIB::ifSpeed.6 = Gauge32: 0

net-snmp shows incorrect interface mac (a:0:27:0:0:0 is correct):
net-snmp:
IF-MIB::ifPhysAddress.1 = STRING: 0:2:b3:c9:75:ef
IF-MIB::ifPhysAddress.2 = STRING: 0:2:b3:c9:75:df
IF-MIB::ifPhysAddress.3 = STRING: 0:7:e9:b:2d:96
IF-MIB::ifPhysAddress.4 = STRING:
IF-MIB::ifPhysAddress.5 = STRING: 0:0:27:0:0:0
IF-MIB::ifPhysAddress.6 = STRING:
bsnmp:
IF-MIB::ifPhysAddress.1 = STRING: 0:2:b3:c9:75:ef
IF-MIB::ifPhysAddress.2 = STRING: 0:2:b3:c9:75:df
IF-MIB::ifPhysAddress.3 = STRING: 0:7:e9:b:2d:96
IF-MIB::ifPhysAddress.4 = STRING:
IF-MIB::ifPhysAddress.5 = STRING: a:0:27:0:0:0
IF-MIB::ifPhysAddress.6 = STRING:





Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4BAB5A77.7050505>