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

EnLinkD IS-IS Link discovery fails on Cisco routers

    XMLWordPrintable

    Details

      Description

      Hi,

      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 .1.3.6.1.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 1.3.6.1.2.1.138.1.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 /93.176.90.7: java.lang.NullPointerException

      It happens in the following code block:

      opennms-services/src/main/java/org/opennms/netmgt/enlinkd/snmp/IsisCircTableTracker.java
      //Line 95
              public IsIsLink getIsisLink() {
                  LOG.info( "getIsisLink: row count: {}", getColumnCount());
                  IsIsLink link = new IsIsLink();
                  link.setIsisCircIndex(getIsisCircIndex());
                  LOG.info( "getIsisLink: IS-IS Circ Index: {}",  link.getIsisCircIndex());
                  link.setIsisCircIfIndex(getIsisCircIfIndex());
                  LOG.info( "getIsisLink: IS-IS Circ If Index: {}",  link.getIsisCircIfIndex());
                  link.setIsisCircAdminState(IsisAdminState.get(getIsisCircAdminState()));
                  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...)

        Attachments

          Activity

            People

            • Assignee:
              rssntn67 Antonio Russo
              Reporter:
              allan.eising@gmail.com Allan Eising
            • Votes:
              1 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: