Status: Closed (View Workflow)
Affects Version/s: 1.13.4
Security Level: Default (Default Security Scheme)
Environment:Cisco IOS-XR any version. Cisco IOS any version.
This issue covers two issues regarding the new Enhanced Linkd and IS-IS link discovery. In short, it doesn't work with any cisco router I've been able to test. This is due to two different issues:
Cisco IOS does not support the IS-IS MIB (under .220.127.116.11.2.1.138), and in fact returns something unrelated here if you walk this. In fact, IOS claims to support the much different CISCO-IETF-ISIS-MIB, although support for this seems a bit lacking in some areas.
The Cisco IOS-XR problem is much more interesting:
Apparently Cisco IOS-XR (as tested on several ASR9000-routers), do respond to the OID, so Enlinkd tries to get the links, however one behaviour is bugged. When you send a SNMP GetBulk request with OID 18.104.22.168.22.214.171.124.3.1 to the router, it repeats the results until the configured max repetition is reached. This causes the following exception:
2014-08-27 08:58:16,744 INFO [Scheduler-Thread-3-of-5] o.o.n.e.NodeDiscoveryIsis: run:Aborting Is-Is Linkd node scan : Agent failed while scanning the isisCircTable table: Unexpected error occurred processing isisCircTable for /126.96.36.199: java.lang.NullPointerException
It happens in the following code block:
Now the part of the code that seems to generate the nullpointer exception is link.setIsisCircIfIndex(getIsisCircIfIndex()); and my theory is that it is because of the misbehaving GetBulk where only one row should be returned, yet since the grandfather class has a default setMaxRepetitions value of 2, it will fail.
However, I have tried to manually set it with setMaxRepetitions(1); in the constructors in the code, but that didn't fix the problem. I'm no java coder, so it might just be because of this.
I have also been in contact with Cisco TAC to hear their opinion about this, and they claim that the ISISMIB OID is unsupported in IOS-XR, so the correct way of using IS-IS to detect link adjacencies on a cisco platform may be to use different MIBs entirely (Juniper JUNOS supports this MIB fine though...)