Cisco Catalyst 12.2(46)SE May Break SNMP ifIndexes

More Cisco Catalyst 2960sThis week I tried upgrading a Cisco Catalyst 2960 to the newest software release — 12.2(46)SE. The upgrade went just fine, but I noticed that the monitoring software was throwing <acronym title="Simple Network Management Protocol">SNMP</acronym> errors.

In case you don't know much about SNMP, an ifIndex identifies a specific interface on a device. The ifIndex is then used in other <acronym title="Object Identifiers">OIDs</acronym> to provide information about that interface. The standard SNMP <acronym title="Management Information Base">MIB</acronym>s define all sorts of interesting interface related OIDs that you can track in most monitoring software.
<!--more-->
Since some devices can change interfaces frequently, Cisco IOS has a command to make sure the ifIndexes are persistent across reboots. This is important since some monitoring software doesn't have a way to look for wayward ifIndexes if they change. The command to force IOS to maintain persistent ifIndexes is snmp-server ifindex persist. Although the Cisco Catalyst 2960 is a fixed configuration device, the ifIndex persistence command is part of the standard SNMP related commands I run on most Cisco devices during initial configuration.

After the switch rebooted from the upgrade, the ifIndexes had all increased. Interestingly, they had all increased by the number of ports on the switch. In other words, on a 24 port switch, the ifIndex for Fa0/1 went from 10001 to 10025. When I verified this with the show snmp mib ifmib ifindex command, I got crazy output like the following:

^A^AFastEthernet0/2: Ifindex = 10002
FastEthernet0/24: Ifindex = 10048
FastEthernet0/17: Ifindex = 10041
^A^AFastEthernet0/18: Ifindex = 10018
FastEthernet0/9: Ifindex = 10033
FastEthernet0/15: Ifindex = 10039
GigabitEthernet0/1: Ifindex = 10103

As you can see, some of the interface names are prefixed with 2 Control-A characters.

Come to find out, snmp-server ifindex persist is no longer supported as of 12.2(46)SE. Removing that line from the configuration and rebooting caused the ifIndexes to go back to what they originally were.

It seems that although the command is unsupported, this version of IOS still recognizes the command, and even loads the ifIndex-table file from <acronym title="Non-Volatile Random Access Memory">NVRAM</acronym>. Unfortunately, since it doesn't think it should be able to use the file, it breaks things and starts numbering the interfaces over again.

My Bookshelf

Reading Now

Other Stuff