This 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
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.
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.