Uploaded image for project: 'Observium'
  1. Observium
  2. OBS-1268

Alcatel 7750SR LAG interfaces not parsing during discovery

Details

    • Bug
    • Resolution: Fixed
    • Minor
    • None
    • Professional Edition
    • Discovery
    • None

    Description

      Running SVN version 6363.

      Interface descriptions are not parsing for LAG interfaces during discovery. May be due to the way ALU format the output of the OID...

      Router Code Version:
      TiMOS-C-13.0.R1 cpm/hops64 ALCATEL SR 7750 Copyright (c) 2000-2015 Alcatel-Lucent.

      Router configuration sample:
      lag 100
      description "INTERNAL-AE: br01.sto01 || lag 100 || 60Gbps"
      port 4/2/7
      port 5/2/9
      lacp active administrative-key xxxxx
      no shutdown
      exit

      Sample debug: (will attach full discovery output):

      Module [ os ] time: 0.3558s
      Ports :
      CMD[[[0;33m/usr/bin/snmpbulkwalk -v2c -c *** -Pu -OQUs -m IF-MIB -M /opt/observium/mibs/rfc:/opt/observium/mibs/net-snmp 'udp':'pr01.sto01.riotdirect.net':'161' ifDescr[[0m]
      EXITCODE[[[0;32m0[[0m]
      RUNTIME[[[0;32m1.0717s[[0m]^[[0m
      STDOUT[
      ifDescr.2 = INTERNAL-AE_br01.sto01, IP interface
      ifDescr.1342177380 = lag-100, LAG Group, \"INTERNAL-AE: br01.sto01 || lag 100 || xxGbps\"

      CMD[[[0;33m/usr/bin/snmpbulkwalk -v2c -c *** -Pu -OQUs -m IF-MIB -M /opt/observium/mibs/rfc:/opt/observium/mibs/net-snmp 'udp':'pr01.sto01.riotdirect.net':'161' ifType[[0m]
      EXITCODE[[[0;32m0[[0m]
      RUNTIME[[[0;32m1.1016s[[0m]^[[0m
      STDOUT[

      [2] => Array
      (
      [ifDescr] => INTERNAL-AE_br01.sto01, IP interface
      [ifAlias] => IP interface
      [ifName] => INTERNAL-AE_br01.sto01
      [ifType] => ipForward
      )

      [1342177380] => Array
      (
      [ifDescr] => lag-100, LAG Group, \INTERNAL-AE: br01.sto01 || lag 100 || 60Gbps\
      [ifAlias] => INTERNAL-AE: br01.sto01 || lag 100 || xxGbps
      [ifName] => lag-100
      [ifType] => ieee8023adLag
      )

      Attachments

        Activity

          [OBS-1268] Alcatel 7750SR LAG interfaces not parsing during discovery

          We now use ifName for this OS type, which fixes much of this.

          Typical idiot vendor doing their own thing and ignoring industry standards.

          adama Adam Armstrong added a comment - We now use ifName for this OS type, which fixes much of this. Typical idiot vendor doing their own thing and ignoring industry standards.

          Hi Adam,

          I received this from our ALU rep earlier today. I can send you through the MIBs if you want them.

          For port_descr you will need to load our MIBs. I have attached them. The specific MIB is TIMETRA-PORT-MIB. The same most likely goes for JNPR, i.e. you are polling the OID from a JNPR specific MIB and we are not responding

          For ifDescr, we return:

          1) For Port: Port/Port-Type/Description

          2) For Routed Interface: Interface-Name/Interface-Type/Interface-Description

          ifDescr OBJECT-TYPE
          SYNTAX DisplayString (SIZE (0..255))
          MAX-ACCESS read-only
          STATUS current
          DESCRIPTION
          "A textual string containing information about the
          interface. This string should include the name of the
          manufacturer, the product name and the version of the
          interface hardware/software."
          ::=

          { ifEntry 2 }

          If you just want the port pull ifName

          ifName OBJECT-TYPE
          SYNTAX DisplayString
          MAX-ACCESS read-only
          STATUS current
          DESCRIPTION
          "The textual name of the interface. The value of this
          object should be the name of the interface as assigned by
          the local device and should be suitable for use in commands
          entered at the device's `console'. This might be a text
          name, such as `le0' or a simple port number, such as `1',
          depending on the interface naming syntax of the device. If
          several entries in the ifTable together represent a single
          interface as named by the device, then each will have the
          same value of ifName. Note that for an agent which responds
          to SNMP queries concerning an interface on some other
          (proxied) device, then the value of ifName for such an
          interface is the proxied device's local name for it.

          If there is no local name, or this object is otherwise not
          applicable, then this object contains a zero-length string."
          ::=

          { ifXEntry 1 }
          korensky@gmail.com McDonald Richards added a comment - Hi Adam, I received this from our ALU rep earlier today. I can send you through the MIBs if you want them. For port_descr you will need to load our MIBs. I have attached them. The specific MIB is TIMETRA-PORT-MIB. The same most likely goes for JNPR, i.e. you are polling the OID from a JNPR specific MIB and we are not responding For ifDescr, we return: 1) For Port: Port/Port-Type/Description 2) For Routed Interface: Interface-Name/Interface-Type/Interface-Description ifDescr OBJECT-TYPE SYNTAX DisplayString (SIZE (0..255)) MAX-ACCESS read-only STATUS current DESCRIPTION "A textual string containing information about the interface. This string should include the name of the manufacturer, the product name and the version of the interface hardware/software." ::= { ifEntry 2 } If you just want the port pull ifName ifName OBJECT-TYPE SYNTAX DisplayString MAX-ACCESS read-only STATUS current DESCRIPTION "The textual name of the interface. The value of this object should be the name of the interface as assigned by the local device and should be suitable for use in commands entered at the device's `console'. This might be a text name, such as `le0' or a simple port number, such as `1', depending on the interface naming syntax of the device. If several entries in the ifTable together represent a single interface as named by the device, then each will have the same value of ifName. Note that for an agent which responds to SNMP queries concerning an interface on some other (proxied) device, then the value of ifName for such an interface is the proxied device's local name for it. If there is no local name, or this object is otherwise not applicable, then this object contains a zero-length string." ::= { ifXEntry 1 }

          ifName could probably work. These are similar to the Ericcsson SmartEdge boxes in that you make the "ip interface" and bind it to a physical port. I will probably delete/hide/disable the logical ports and monitor physical ones only to keep it clean.

          ifName.1 = system
          ifName.2 = INTERNAL-AE_br01.sto01
          ifName.3 = IP TRANSIT: Carrier1
          ifName.4 = IP TRANSIT: Carrier2
          ifName.136347648 = 4/1/1
          ifName.136380416 = 4/1/2
          ifName.136413184 = 4/1/3
          ifName.136445952 = 4/1/4
          ifName.136478720 = 4/1/5
          ifName.136511488 = 4/1/6
          ifName.136544256 = 4/1/7
          ifName.138510336 = 4/2/3
          ifName.138543104 = 4/2/4
          ifName.138575872 = 4/2/5
          ifName.138608640 = 4/2/6
          ifName.138641408 = 4/2/7
          ifName.138674176 = 4/2/8
          ifName.138706944 = 4/2/9

          Let me know if you'd like me to pinhole the ACL so you can run any direct tests on this box if it helps.

          korensky@gmail.com McDonald Richards added a comment - ifName could probably work. These are similar to the Ericcsson SmartEdge boxes in that you make the "ip interface" and bind it to a physical port. I will probably delete/hide/disable the logical ports and monitor physical ones only to keep it clean. ifName.1 = system ifName.2 = INTERNAL-AE_br01.sto01 ifName.3 = IP TRANSIT: Carrier1 ifName.4 = IP TRANSIT: Carrier2 ifName.136347648 = 4/1/1 ifName.136380416 = 4/1/2 ifName.136413184 = 4/1/3 ifName.136445952 = 4/1/4 ifName.136478720 = 4/1/5 ifName.136511488 = 4/1/6 ifName.136544256 = 4/1/7 ifName.138510336 = 4/2/3 ifName.138543104 = 4/2/4 ifName.138575872 = 4/2/5 ifName.138608640 = 4/2/6 ifName.138641408 = 4/2/7 ifName.138674176 = 4/2/8 ifName.138706944 = 4/2/9 Let me know if you'd like me to pinhole the ACL so you can run any direct tests on this box if it helps.

          What are these devices reporting for ifName? We might have to hardcode this OS to use ifName instead of ifDescr (lots of vendors put useless shit into ifDescr, windows puts the NIC's manufacturer and model in there!)

          adama Adam Armstrong added a comment - What are these devices reporting for ifName? We might have to hardcode this OS to use ifName instead of ifDescr (lots of vendors put useless shit into ifDescr, windows puts the NIC's manufacturer and model in there!)

          Frustrating. They seem to stick any description into the ifDescr. Quotation marks are required for anything with a space in it and they are escaping them in the SNMP description.

          Are there any config knobs I can use to over-ride this inside Observium?

          *A:pr01.sto01>config>port# info 
          ----------------------------------------------
                  description "INTERNAL: br01.sto01 || XE-4/1/1 || lag0"
                  ethernet
                  exit
                  no shutdown
          ----------------------------------------------
          *A:pr01.sto01>config>port# 
           
          ifDescr.138510336 = 4/2/3, 10-Gig Ethernet
          ifDescr.138543104 = 4/2/4, 10-Gig Ethernet
          ifDescr.138575872 = 4/2/5, 10-Gig Ethernet
          ifDescr.138608640 = 4/2/6, 10-Gig Ethernet
          ifDescr.138641408 = 4/2/7, 10-Gig Ethernet, \"INTERNAL: br01.sto01 || XE-4/1/1 || lag0\"
          ifDescr.138674176 = 4/2/8, 10-Gig Ethernet, \"INTERNAL: br01.sto01 || XE-4/1/2 || lag0\"
          ifDescr.138706944 = 4/2/9, 10-Gig Ethernet, \"INTERNAL: br01.sto01 || XE-4/1/3 || lag0\"
           
          ifAlias.138510336 = 10-Gig Ethernet
          ifAlias.138543104 = 10-Gig Ethernet
          ifAlias.138575872 = 10-Gig Ethernet
          ifAlias.138608640 = 10-Gig Ethernet
          ifAlias.138641408 = INTERNAL: br01.sto01 || XE-4/1/1 || lag0
          ifAlias.138674176 = INTERNAL: br01.sto01 || XE-4/1/2 || lag0
          ifAlias.138706944 = INTERNAL: br01.sto01 || XE-4/1/3 || lag0
          

          korensky@gmail.com McDonald Richards added a comment - Frustrating. They seem to stick any description into the ifDescr. Quotation marks are required for anything with a space in it and they are escaping them in the SNMP description. Are there any config knobs I can use to over-ride this inside Observium? *A:pr01.sto01>config>port# info ---------------------------------------------- description "INTERNAL: br01.sto01 || XE-4/1/1 || lag0" ethernet exit no shutdown ---------------------------------------------- *A:pr01.sto01>config>port#   ifDescr.138510336 = 4/2/3, 10-Gig Ethernet ifDescr.138543104 = 4/2/4, 10-Gig Ethernet ifDescr.138575872 = 4/2/5, 10-Gig Ethernet ifDescr.138608640 = 4/2/6, 10-Gig Ethernet ifDescr.138641408 = 4/2/7, 10-Gig Ethernet, \"INTERNAL: br01.sto01 || XE-4/1/1 || lag0\" ifDescr.138674176 = 4/2/8, 10-Gig Ethernet, \"INTERNAL: br01.sto01 || XE-4/1/2 || lag0\" ifDescr.138706944 = 4/2/9, 10-Gig Ethernet, \"INTERNAL: br01.sto01 || XE-4/1/3 || lag0\"   ifAlias.138510336 = 10-Gig Ethernet ifAlias.138543104 = 10-Gig Ethernet ifAlias.138575872 = 10-Gig Ethernet ifAlias.138608640 = 10-Gig Ethernet ifAlias.138641408 = INTERNAL: br01.sto01 || XE-4/1/1 || lag0 ifAlias.138674176 = INTERNAL: br01.sto01 || XE-4/1/2 || lag0 ifAlias.138706944 = INTERNAL: br01.sto01 || XE-4/1/3 || lag0

          You can close this. Just saw the config on the box and they have used the description as the interface name instead of calling it something sensible and using the "description" for the description.

          Sigh...

          Thanks

          korensky@gmail.com McDonald Richards added a comment - You can close this. Just saw the config on the box and they have used the description as the interface name instead of calling it something sensible and using the "description" for the description. Sigh... Thanks

          Ah sorry – we use "INTERNAL-AE" instead of "INTERNAL" to prevent the double count of LAGs in the aggregated graphs.

          The pipes in the descriptions are used by some other internal tools here. We have a Juniper environment as well that we use the same syntax on.

          The parsing of the description for the transit/peering/core interfaces works fine. I have included a couple of screenshots that may make what I am trying to report a little clearer.

          korensky@gmail.com McDonald Richards added a comment - Ah sorry – we use "INTERNAL-AE" instead of "INTERNAL" to prevent the double count of LAGs in the aggregated graphs. The pipes in the descriptions are used by some other internal tools here. We have a Juniper environment as well that we use the same syntax on. The parsing of the description for the transit/peering/core interfaces works fine. I have included a couple of screenshots that may make what I am trying to report a little clearer.
          adama Adam Armstrong added a comment - - edited

          You probably can't have a dash in the port-type in the description.

          Descriptions are in ifAlias, because back when the MIBs were written, people were stupid. ifDescr is actually the name of the interface, and ifName is usually the "shortest unique name the device understands for the interface".

          In the output above :

          [ifAlias] => INTERNAL-AE: br01.sto01 || lag 100 || xxGbps

          Seems to be fine except for the - (and that our parsing format doesn't use ||, I assume you have some custom code to do that?)

          adama Adam Armstrong added a comment - - edited You probably can't have a dash in the port-type in the description. Descriptions are in ifAlias, because back when the MIBs were written, people were stupid. ifDescr is actually the name of the interface, and ifName is usually the "shortest unique name the device understands for the interface". In the output above : [ifAlias] => INTERNAL-AE: br01.sto01 || lag 100 || xxGbps Seems to be fine except for the - (and that our parsing format doesn't use ||, I assume you have some custom code to do that?)

          Also if desired I can provide access to a pre-production device to a whitelisted IP address for testing.

          korensky@gmail.com McDonald Richards added a comment - Also if desired I can provide access to a pre-production device to a whitelisted IP address for testing.

          Discovery debug attached. Some details obfuscated (names).

          korensky@gmail.com McDonald Richards added a comment - Discovery debug attached. Some details obfuscated (names).

          People

            landy Mike Stupalov
            korensky@gmail.com McDonald Richards
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: