SNMP ifDescr is not matching with ifName. Caused a problem with Akvorado

Hi. I’m trying to configure Akvorado to captures and visualize NetFlow data. I’m having a problem with the SNMP data collected by it from a VyOS router. My router is currently running in VMware as a VM. I noticed that some interfaces ifDescr from VyOS sends the exact interface name e.g. eth2.331 and some don’t e.g. VMware VMXNET3 Ethernet Controller.

Akvorado maintainer said that how it determine value for InIfDescription/OutIfDescription field which I needed to do the interface classifiers is “It depends on the value of ifName. If ifName matches ifDescr, it uses ifAlias.”

Currently, the problem is that VyOS sends SNMP ifDescr that is matching the ifName for some interface e.g. eth2.331 and some just send it as VMware VMXNET3 Ethernet Controller.

Here is the Akvorado issue on GitHub: SNMP OID used to determine interface description · akvorado/akvorado · Discussion #1724 · GitHub

Oh ya I’m still running VyOS version 1.3.X

Thank you.

Can you clarify which version of 1.3? There was quite a few of them.
Can you also provide some config snippets?
What does your snmp config look like, and your Netflow config?

If you SNMPWalk your VyOS box do you see the same mixed results?

@tjh our router is running VyOS 1.3.3.

I noticed that only the physical parent interface returns the vendor name, in my case VMware, as the ifDescr. Sub-interfaces returns the ifName as ifDescr.

This is the snmpwalk from my Akvorado host to VyOS router.

[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.31.1.1.1.1.2
IF-MIB::ifName.2 = STRING: eth3
[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.2.2.1.2.2
IF-MIB::ifDescr.2 = STRING: VMware VMXNET3 Ethernet Controller
[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.31.1.1.1.18.2
IF-MIB::ifAlias.2 = STRING: REDACTED - IPT to REDACTED

[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.31.1.1.1.1.4
IF-MIB::ifName.4 = STRING: eth4
[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.2.2.1.2.4
IF-MIB::ifDescr.4 = STRING: VMware VMXNET3 Ethernet Controller
[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.31.1.1.1.18.4
IF-MIB::ifAlias.4 = STRING: REDACTED - IPT to REDACTED

[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.31.1.1.1.1.25
IF-MIB::ifName.25 = STRING: eth2.325
[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.2.2.1.2.25
IF-MIB::ifDescr.25 = STRING: eth2.325
[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.31.1.1.1.18.25
IF-MIB::ifAlias.25 = STRING: REDACTED-V325

[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.31.1.1.1.1.26
IF-MIB::ifName.26 = STRING: eth2.327
[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.2.2.1.2.26
IF-MIB::ifDescr.26 = STRING: eth2.327
[root@REDACTED ~]# snmpwalk -v2c -c akvorado REDACTED 1.3.6.1.2.1.31.1.1.1.18.26
IF-MIB::ifAlias.26 = STRING: REDACTED-V327

I’ve include here the response from their maintainer:

Currently, this is not configurable. We are sure that ifName is correct and some vendors are using ifDescr for description, some ifAlias. The reason, is that historically, only ifDescr exists, so it often matches ifName. Akvorado checks for a perfect match. I don’t understand why VyOS sometimes put a vendor name, sometimes not.

Check this behaviour in the clean Debian install with VLANs.
I do not think we handle this somehow. You can find snmpd template here and generated config in your router.

I’ve created a fresh Debian 12 VM with Virtualbox running kernel Linux 6.1.0-33-amd64.

Installed snmpd and run the snmpwalk. This is the output:

snmpwalk -v2c -c public 10.11.8.185 1.3.6.1.2.1.31.1.1.1.1
IF-MIB::ifName.1 = STRING: lo
IF-MIB::ifName.2 = STRING: enp0s3
IF-MIB::ifName.3 = STRING: enp0s3.1000
IF-MIB::ifName.4 = STRING: enp0s3.3000

snmpwalk -v2c -c public 10.11.8.185 1.3.6.1.2.1.2.2.1.2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: enp0s3
IF-MIB::ifDescr.3 = STRING: enp0s3.1000
IF-MIB::ifDescr.4 = STRING: enp0s3.3000

snmpwalk -v2c -c public 10.11.8.185 1.3.6.1.2.1.31.1.1.1.18
IF-MIB::ifAlias.1 = STRING:
IF-MIB::ifAlias.2 = STRING:
IF-MIB::ifAlias.3 = STRING:
IF-MIB::ifAlias.4 = STRING:

@Viacheslav for the Debian fresh install, I don’t really do anything except configure the snmpd service. Looks like it returns matching value for ifName and ifAlias for both physical and VLAN interface.

@tjh @Viacheslav I’ve done my tests with 2 versions of VyOS which are VyOS 1.3.3 and VyOS 1.5-rolling-20241210007. Looks like the output from both versions are different. VyOS 1.3.3 does show the vendor name for ifDescr meanwhile VyOS 1.5-rolling-20241210007 shows ifDescr same as ifName.

I guess this is because the Debian version that was used for these releases. For VyOS 1.3.3, I forgot what Debian version it uses and VyOS 1.5 I believe uses Debian 12.

# VyOS 1.3.3
snmpwalk -v2c -c public 10.11.8.202 1.3.6.1.2.1.31.1.1.1.1
IF-MIB::ifName.1 = STRING: lo
IF-MIB::ifName.2 = STRING: eth0
IF-MIB::ifName.3 = STRING: eth1
IF-MIB::ifName.4 = STRING: eth2
IF-MIB::ifName.5 = STRING: eth1.100
IF-MIB::ifName.6 = STRING: eth0.100
IF-MIB::ifName.7 = STRING: eth2.100

snmpwalk -v2c -c public 10.11.8.202 1.3.6.1.2.1.2.2.1.2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: Red Hat, Inc Device 0001
IF-MIB::ifDescr.3 = STRING: Intel Corporation 82540EM Gigabit Ethernet Controller
IF-MIB::ifDescr.4 = STRING: Intel Corporation 82545EM Gigabit Ethernet Controller (Copper)
IF-MIB::ifDescr.5 = STRING: eth1.100
IF-MIB::ifDescr.6 = STRING: eth0.100
IF-MIB::ifDescr.7 = STRING: eth2.100

snmpwalk -v2c -c public 10.11.8.202 1.3.6.1.2.1.31.1.1.1.18
IF-MIB::ifAlias.1 = STRING: lo
IF-MIB::ifAlias.2 = STRING: This is eth0
IF-MIB::ifAlias.3 = STRING: This is eth1
IF-MIB::ifAlias.4 = STRING: This is eth2
IF-MIB::ifAlias.5 = STRING: This is eth1.100
IF-MIB::ifAlias.6 = STRING: This is eth0.100
IF-MIB::ifAlias.7 = STRING: This is eth2.100

# VyOS 1.5-rolling-20241210007
snmpwalk -v2c -c public 10.11.8.154 1.3.6.1.2.1.31.1.1.1.1
IF-MIB::ifName.1 = STRING: lo
IF-MIB::ifName.2 = STRING: eth0
IF-MIB::ifName.3 = STRING: eth1
IF-MIB::ifName.4 = STRING: eth2
IF-MIB::ifName.5 = STRING: pim6reg
IF-MIB::ifName.6 = STRING: eth1.100
IF-MIB::ifName.7 = STRING: eth0.100
IF-MIB::ifName.8 = STRING: eth2.100

snmpwalk -v2c -c public 10.11.8.154 1.3.6.1.2.1.2.2.1.2
IF-MIB::ifDescr.1 = STRING: lo
IF-MIB::ifDescr.2 = STRING: eth0
IF-MIB::ifDescr.3 = STRING: eth1
IF-MIB::ifDescr.4 = STRING: eth2
IF-MIB::ifDescr.5 = STRING: pim6reg
IF-MIB::ifDescr.6 = STRING: eth1.100
IF-MIB::ifDescr.7 = STRING: eth0.100
IF-MIB::ifDescr.8 = STRING: eth2.100

snmpwalk -v2c -c public 10.11.8.154 1.3.6.1.2.1.31.1.1.1.18
IF-MIB::ifAlias.1 = STRING: lo
IF-MIB::ifAlias.2 = STRING: This is eth0
IF-MIB::ifAlias.3 = STRING: This is eth1
IF-MIB::ifAlias.4 = STRING: This is eth2
IF-MIB::ifAlias.5 = STRING: pim6reg@NONE
IF-MIB::ifAlias.6 = STRING: This is eth1.100
IF-MIB::ifAlias.7 = STRING: This is eth0.100
IF-MIB::ifAlias.8 = STRING: This is eth2.100

Quite an interesting finding.

2 Likes

This topic was automatically closed 2 days after the last reply. New replies are no longer allowed.