Uploaded image for project: 'OpenNMS'
  1. OpenNMS
  2. NMS-6802

EnLinkD IS-IS Link discovery fails on Cisco routers





      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 ., 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 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 / java.lang.NullPointerException

      It happens in the following code block:

      //Line 95
              public IsIsLink getIsisLink() {
                  LOG.info( "getIsisLink: row count: {}", getColumnCount());
                  IsIsLink link = new IsIsLink();
                  LOG.info( "getIsisLink: IS-IS Circ Index: {}",  link.getIsisCircIndex());
                  LOG.info( "getIsisLink: IS-IS Circ If Index: {}",  link.getIsisCircIfIndex());
                  LOG.info( "getIsisLink: IS-IS Circ Admin State: {}",  IsisAdminState.getTypeString(getIsisCircAdminState()));
                  return link;

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




            rssntn67 Antonio Russo
            allan.eising@gmail.com Allan Eising (Inactive)
            1 Vote for this issue
            3 Start watching this issue