snmp-info icon indicating copy to clipboard operation
snmp-info copied to clipboard

Improve Support for Lenovo Switches

Open fz883 opened this issue 7 years ago • 21 comments

As described here https://github.com/netdisco/netdisco-mibs/issues/64 already. Newer Lenovo Switches are detected yes, but some items are missing. SNMP::Info::Layer3 is used, so a lot is there, and e.g. FW Version, Model, Fans, etc. is not detected.

Expected Behavior

I expect Netdisco to do its magic and detect everything. :)

Current Behavior

netdisco_ne1032 The blackened parts are detected correctly, also, LDDP does work, so neighbors are indeed detected.

Possible Solution

Add a Lenovo Sub-class? Maybe? I'm never done perl modules, so I can only help by testing, sorry.

Your Device

  • Vendor: Lenovo
  • Device Model: Lenovo ThinkSystem NE1032 RackSwitch
  • Operating System Version: 10.9.3.0
  • Snmpwalk output of .1.3.6.1.2.1.1:
.1.3.6.1.2.1.1.1.0 = STRING: Lenovo ThinkSystem NE1032 RackSwitch
.1.3.6.1.2.1.1.2.0 = OID: .1.3.6.1.4.1.19046.1.7.32
.1.3.6.1.2.1.1.3.0 = 393538200
.1.3.6.1.2.1.1.4.0 = STRING: systemContact
.1.3.6.1.2.1.1.5.0 = STRING: ne1032
.1.3.6.1.2.1.1.6.0 = STRING: systemLocation
.1.3.6.1.2.1.1.7.0 = INTEGER: 14

Your Environment

~ $ ~/bin/netdisco-do show -d de.vi.ce.ip -e specify -DI
[1707] 2019-01-31 23:56:51  info App::Netdisco version 2.040003 loaded.
[1707] 2019-01-31 23:56:51  info show: [de.vi.ce.ip]/specify started at Thu Jan 31 23:56:51 2019
[1707] 2019-01-31 23:56:51 debug show: running with timeout 600s
[1707] 2019-01-31 23:56:51 debug => running workers for phase: check
[1707] 2019-01-31 23:56:51 debug -> run worker check/_base_/0
[1707] 2019-01-31 23:56:51 debug Show is able to run
[1707] 2019-01-31 23:56:51 debug => running workers for phase: main
[1707] 2019-01-31 23:56:51 debug -> run worker main/_base_/100
[1707] 2019-01-31 23:56:51 debug snmp reader cache warm: [de.vi.ce.ip]
[1707] 2019-01-31 23:56:51 debug [de.vi.ce.ip:161] try_connect with ver: 2, class: SNMP::Info::Layer3, comm: <hidden>
SNMP::Info::_global uptime : DISMAN-EVENT-MIB::sysUpTimeInstance : .1.3.6.1.2.1.1.3.0
SNMP::Info::_global layers : SNMPv2-MIB::sysServices.0 : .1.3.6.1.2.1.1.7.0
SNMP::Info::_global description : SNMPv2-MIB::sysDescr.0 : .1.3.6.1.2.1.1.1.0
SNMP::Info::_global id : SNMPv2-MIB::sysObjectID.0 : .1.3.6.1.2.1.1.2.0
SNMP::Info 3.64
SNMP::Info::device_type() layers:00001110 id:19046 sysDescr:"Lenovo ThinkSystem NE1032 RackSwitch"
SNMP::Info 3.64
SNMP::Info::device_type() layers:00001110 id:19046 sysDescr:"Lenovo ThinkSystem NE1032 RackSwitch"
SNMP::Info::specify() - Changed Class to SNMP::Info::Layer3.
SNMP::Info::_validate_autoload_method(_data_printer) Unable to resolve method.
SNMP::Info::Layer3  {
    Parents       SNMP::Info::PowerEthernet, SNMP::Info::IPv6, SNMP::Info::Entity, SNMP::Info::EtherLike, SNMP::Info::Bridge, SNMP::Info::AdslLine, SNMP::Info::LLDP, SNMP::Info, Exporter
    Linear @ISA   SNMP::Info::Layer3, SNMP::Info::PowerEthernet, SNMP::Info, Exporter, SNMP::Info::IPv6, SNMP::Info::Entity, SNMP::Info::EtherLike, SNMP::Info::Bridge, SNMP::Info::AdslLine, SNMP::Info::LLDP
    public methods (10) : at_index, at_netaddr, at_paddr, i_duplex, i_name, interfaces, model, root_ip, serial, vendor
    private methods (0)
    internals: {
        args                {
            AutoSpecify         0,
            BulkRepeaters       20,
            BulkWalk            1,
            Community           "public",
            Debug               1,
            DebugSNMP           0,
            DestHost            "de.vi.ce.ip",
            IgnoreNetSNMPConf   1,
            MibDirs             [
                [0]  "/home/netdisco/netdisco-mibs/3com",
                [1]  "/home/netdisco/netdisco-mibs/adtran",
                [2]  "/home/netdisco/netdisco-mibs/aerohive",
                [3]  "/home/netdisco/netdisco-mibs/alcatel",
                [4]  "/home/netdisco/netdisco-mibs/allied",
                [5]  "/home/netdisco/netdisco-mibs/apc",
                [6]  "/home/netdisco/netdisco-mibs/arista",
                [7]  "/home/netdisco/netdisco-mibs/aruba",
                [8]  "/home/netdisco/netdisco-mibs/asante",
                [9]  "/home/netdisco/netdisco-mibs/avaya",
                [10] "/home/netdisco/netdisco-mibs/bluecoat",
                [11] "/home/netdisco/netdisco-mibs/bluesocket",
                [12] "/home/netdisco/netdisco-mibs/brother",
                [13] "/home/netdisco/netdisco-mibs/cabletron",
                [14] "/home/netdisco/netdisco-mibs/ceragon",
                [15] "/home/netdisco/netdisco-mibs/checkpoint",
                [16] "/home/netdisco/netdisco-mibs/cisco",
                [17] "/home/netdisco/netdisco-mibs/ciscosb",
                [18] "/home/netdisco/netdisco-mibs/citrix",
                [19] "/home/netdisco/netdisco-mibs/colubris",
                [20] "/home/netdisco/netdisco-mibs/cyclades",
                [21] "/home/netdisco/netdisco-mibs/d-link",
                [22] "/home/netdisco/netdisco-mibs/dell",
                [23] "/home/netdisco/netdisco-mibs/enterasys",
                [24] "/home/netdisco/netdisco-mibs/exinda",
                [25] "/home/netdisco/netdisco-mibs/EXTRAS",
                [26] "/home/netdisco/netdisco-mibs/extreme",
                [27] "/home/netdisco/netdisco-mibs/extricom",
                [28] "/home/netdisco/netdisco-mibs/f5",
                [29] "/home/netdisco/netdisco-mibs/force10",
                [30] "/home/netdisco/netdisco-mibs/fortinet",
                [31] "/home/netdisco/netdisco-mibs/foundry",
                [32] "/home/netdisco/netdisco-mibs/gigamon",
                [33] "/home/netdisco/netdisco-mibs/h3c",
                [34] "/home/netdisco/netdisco-mibs/hp",
                [35] "/home/netdisco/netdisco-mibs/huawei",
                [36] "/home/netdisco/netdisco-mibs/ibm",
                [37] "/home/netdisco/netdisco-mibs/juniper",
                [38] "/home/netdisco/netdisco-mibs/lancom",
                [39] "/home/netdisco/netdisco-mibs/lantronix",
                [40] "/home/netdisco/netdisco-mibs/liebert",
                [41] "/home/netdisco/netdisco-mibs/mediant",
                [42] "/home/netdisco/netdisco-mibs/meraki",
                [43] "/home/netdisco/netdisco-mibs/meru",
                [44] "/home/netdisco/netdisco-mibs/mikrotik",
                [45] "/home/netdisco/netdisco-mibs/moser-baer",
                [46] "/home/netdisco/netdisco-mibs/motorola",
                [47] "/home/netdisco/netdisco-mibs/nateks",
                [48] "/home/netdisco/netdisco-mibs/net-snmp",
                [49] "/home/netdisco/netdisco-mibs/netapp",
                [50] "/home/netdisco/netdisco-mibs/netgear",
                [51] "/home/netdisco/netdisco-mibs/netscreen",
                [52] "/home/netdisco/netdisco-mibs/nexans",
                [53] "/home/netdisco/netdisco-mibs/nortel",
                [54] "/home/netdisco/netdisco-mibs/northerndesign",
                [55] "/home/netdisco/netdisco-mibs/opengear",
                [56] "/home/netdisco/netdisco-mibs/packetfront",
                [57] "/home/netdisco/netdisco-mibs/paloalto",
                [58] "/home/netdisco/netdisco-mibs/pica8",
                [59] "/home/netdisco/netdisco-mibs/rad",
                [60] "/home/netdisco/netdisco-mibs/rfc",
                [61] "/home/netdisco/netdisco-mibs/riverbed",
                [62] "/home/netdisco/netdisco-mibs/ruckus",
                [63] "/home/netdisco/netdisco-mibs/schleifenbauer",
                [64] "/home/netdisco/netdisco-mibs/sentry",
                [65] "/home/netdisco/netdisco-mibs/sixnet",
                [66] "/home/netdisco/netdisco-mibs/sonicwall",
                [67] "/home/netdisco/netdisco-mibs/tplink",
                [68] "/home/netdisco/netdisco-mibs/trapeze",
                [69] "/home/netdisco/netdisco-mibs/vmware",
                [70] "/home/netdisco/netdisco-mibs/xirrus"
            ],
            NonIncreasing       0,
            RemotePort          161,
            Retries             0,
            Session             SNMP::Session,
            Timeout             3000000,
            Version             2
        },
        BulkRepeaters       20,
        BulkWalk            1,
        class               "SNMP::Info::Layer3",
        debug               1,
        funcs               {
            adsl_atuc_crc_block_len      "adslAtucChanCrcBlockLength",
            adsl_atuc_curr_tx_rate       "adslAtucChanCurrTxRate",
            adsl_atuc_interleave_delay   "adslAtucChanInterleaveDelay",
            adsl_atuc_prev_tx_rate       "adslAtucChanPrevTxRate",
            adsl_atur_crc_block_len      "adslAturChanCrcBlockLength",
            adsl_atur_curr_tx_rate       "adslAturChanCurrTxRate",
            adsl_atur_interleave_delay   "adslAturChanInterleaveDelay",
            adsl_atur_prev_tx_rate       "adslAturChanPrevTxRate",
            at_index                     "ipNetToMediaIfIndex",
            at_netaddr                   "ipNetToMediaNetAddress",
            at_paddr                     "ipNetToMediaPhysAddress",
            bgp_peer_addr                "bgpPeerRemoteAddr",
            bgp_peer_as                  "bgpPeerRemoteAs",
            bgp_peer_fsm_est_trans       "bgpPeerFsmEstablishedTransitions",
            bgp_peer_id                  "bgpPeerIdentifier",
            bgp_peer_in_tot_msgs         "bgpPeerInTotalMessages",
            bgp_peer_in_upd              "bgpPeerInUpdates",
            bgp_peer_in_upd_el_time      "bgpPeerInUpdateElapsedTime",
            bgp_peer_out_tot_msgs        "bgpPeerOutTotalMessages",
            bgp_peer_out_upd             "bgpPeerOutUpdates",
            bgp_peer_state               "bgpPeerState",
            bgp_peers                    "bgpPeerLocalAddr",
            bp_index                     "dot1dBasePortIfIndex",
            bp_port                      "dot1dBasePortCircuit",
            bs_mac                       "dot1dStaticAddress",
            bs_port                      "dot1dStaticReceivePort",
            bs_status                    "dot1dStaticStatus",
            bs_to                        "dot1dStaticAllowedToGoTo",
            c_addr6_index                "cIpAddressIfIndex",
            c_addr6_pfx                  "cIpAddressPrefix",
            c_addr6_type                 "cIpAddressType",
            c_inet_phys_addr             "cInetNetToMediaPhysAddress",
            c_inet_phys_state            "cInetNetToMediaState",
            c_inet_phys_type             "cInetNetToMediaType",
            c_pfx_origin                 "cIpAddressPfxOrigin",
            e_alias                      "entPhysicalAlias",
            e_class                      "entPhysicalClass",
            e_descr                      "entPhysicalDescr",
            e_fru                        "entPhysicalIsFRU",
            e_fwver                      "entPhysicalFirmwareRev",
            e_hwver                      "entPhysicalHardwareRev",
            e_id                         "entPhysicalAssetID",
            e_map                        "entAliasMappingIdentifier",
            e_model                      "entPhysicalModelName",
            e_name                       "entPhysicalName",
            e_parent                     "entPhysicalContainedIn",
            e_pos                        "entPhysicalParentRelPos",
            e_serial                     "entPhysicalSerialNum",
            e_swver                      "entPhysicalSoftwareRev",
            e_type                       "entPhysicalVendorType",
            e_vendor                     "entPhysicalMfgName",
            el_chipset                   "dot3StatsEtherChipSet",
            el_coll_excess               "dot3StatsExcessiveCollisions",
            el_coll_freq                 "dot3CollFrequencies",
            el_coll_late                 "dot3StatsLateCollisions",
            el_coll_mult                 "dot3StatsMultipleCollisionFrames",
            el_coll_single               "dot3StatsSingleCollisionFrames",
            el_duplex                    "dot3StatsDuplexStatus",
            el_error_alignment           "dot3StatsAlignmentErrors",
            el_error_cs                  "dot3StatsCarrierSenseErrors",
            el_error_fcs                 "dot3StatsFCSErrors",
            el_error_frame               "dot3StatsFrameTooLongs",
            el_error_mac_rec             "dot3StatsInternalMacReceiveErrors",
            el_error_mac_xmit            "dot3StatsInternalMacTransmitErrors",
            el_error_sqe                 "dot3StatsSQETestErrors",
            el_error_symbol              "dot3StatsSymbolErrors",
            el_index                     "dot3StatsIndex",
            el_xmit_defer                "dot3StatsDeferredTransmissions",
            fw_mac                       "dot1dTpFdbAddress",
            fw_port                      "dot1dTpFdbPort",
            fw_status                    "dot1dTpFdbStatus",
            i_alias                      "ifAlias",
            i_bad_proto_in               "ifInUnknownProtos",
            i_description                "ifDescr",
            i_discards_in                "ifInDiscards",
            i_discards_out               "ifOutDiscards",
            i_errors_in                  "ifInErrors",
            i_errors_out                 "ifOutErrors",
            i_index                      "ifIndex",
            i_lastchange                 "ifLastChange",
            i_mac                        "ifPhysAddress",
            i_mtu                        "ifMtu",
            i_name                       "ifName",
            i_octet_in                   "ifInOctets",
            i_octet_in64                 "ifHCInOctets",
            i_octet_out                  "ifOutOctets",
            i_octet_out64                "ifHCOutOctets",
            i_pkts_bcast_in              "ifInBroadcastPkts",
            i_pkts_bcast_in64            "ifHCInBroadcastPkts",
            i_pkts_bcast_out             "ifOutBroadcastPkts",
            i_pkts_bcast_out64           "ifHCOutBroadcastPkts",
            i_pkts_multi_in              "ifInMulticastPkts",
            i_pkts_multi_in64            "ifHCInMulticastPkts",
            i_pkts_multi_out             "ifOutMulticastPkts",
            i_pkts_multi_out64           "ifHCOutMulticastPkts",
            i_pkts_nucast_in             "ifInNUcastPkts",
            i_pkts_nucast_out            "ifOutNUcastPkts",
            i_pkts_ucast_in              "ifInUcastPkts",
            i_pkts_ucast_in64            "ifHCInUcastPkts",
            i_pkts_ucast_out             "ifOutUcastPkts",
            i_pkts_ucast_out64           "ifHCOutUcastPkts",
            i_qlen_out                   "ifOutQLen",
            i_specific                   "ifSpecific",
            i_speed                      "ifSpeed",
            i_speed_high                 "ifHighSpeed",
            i_stack_status               "ifStackStatus",
            i_type                       "ifType",
            i_up                         "ifOperStatus",
            i_up_admin                   "ifAdminStatus",
            interfaces                   "ifIndex",
            ip_addr6_index               "ipAddressIfIndex",
            ip_addr6_pfx                 "ipAddressPrefix",
            ip_addr6_type                "ipAddressType",
            ip_broadcast                 "ipAdEntBcastAddr",
            ip_n2p_phys_addr             "ipNetToPhysicalPhysAddress",
            ip_n2p_phys_state            "ipNetToPhysicalState",
            ip_n2p_phys_type             "ipNetToPhysicalType",
            ip_pfx_origin                "ipAddressPrefixOrigin",
            ipr_age                      "ipRouteAge",
            ipr_dest                     "ipRouteNextHop",
            ipr_if                       "ipRouteIfIndex",
            ipr_info                     "ipRouteInfo",
            ipr_mask                     "ipRouteMask",
            ipr_proto                    "ipRouteProto",
            ipr_route                    "ipRouteDest",
            ipr_type                     "ipRouteType",
            ipr_1                        "ipRouteMetric1",
            ipr_2                        "ipRouteMetric2",
            ipr_3                        "ipRouteMetric3",
            ipr_4                        "ipRouteMetric4",
            ipr_5                        "ipRouteMetric5",
            is_edgeport_admin            "dot1dStpPortAdminEdgePort",
            is_edgeport_oper             "dot1dStpPortOperEdgePort",
            i6_addr_pfxlen               "ipv6AddrPfxLength",
            i6_n2p_phys_addr             "ipv6NetToMediaPhysAddress",
            i6_n2p_phys_state            "ipv6IfNetToMediaState",
            i6_n2p_phys_type             "ipv6NetToMediaType",
            lldp_lman_addr               "lldpLocManAddrIfId",
            lldp_rem_asset               "lldpXMedRemAssetID",
            lldp_rem_cap_spt             "lldpRemSysCapSupported",
            lldp_rem_desc                "lldpRemPortDesc",
            lldp_rem_fw_rev              "lldpXMedRemFirmwareRev",
            lldp_rem_hw_rev              "lldpXMedRemHardwareRev",
            lldp_rem_id                  "lldpRemChassisId",
            lldp_rem_id_type             "lldpRemChassisIdSubtype",
            lldp_rem_media_cap           "lldpXMedRemCapCurrent",
            lldp_rem_media_cap_spt       "lldpXMedRemCapSupported",
            lldp_rem_model               "lldpXMedRemModelName",
            lldp_rem_pid                 "lldpRemPortId",
            lldp_rem_pid_type            "lldpRemPortIdSubtype",
            lldp_rem_serial              "lldpXMedRemSerialNum",
            lldp_rem_sw_rev              "lldpXMedRemSoftwareRev",
            lldp_rem_sys_cap             "lldpRemSysCapEnabled",
            lldp_rem_sysdesc             "lldpRemSysDesc",
            lldp_rem_sysname             "lldpRemSysName",
            lldp_rem_vendor              "lldpXMedRemMfgName",
            lldp_rman_addr               "lldpRemManAddrIfSubtype",
            new_ip_index                 "ipAddressIfIndex",
            new_ip_prefix                "ipAddressPrefix",
            new_ip_type                  "ipAddressType",
            n2p_lastupdate               "ipNetToPhysicalLastUpdated",
            n2p_paddr                    "ipNetToPhysicalPhysAddress",
            n2p_pstate                   "ipNetToPhysicalState",
            n2p_pstatus                  "ipNetToPhysicalRowStatus",
            n2p_ptype                    "ipNetToPhysicalType",
            old_at_index                 "atIfIndex",
            old_at_netaddr               "atNetAddress",
            old_at_paddr                 "atPhysAddress",
            old_ip_index                 "ipAdEntIfIndex",
            old_ip_netmask               "ipAdEntNetMask",
            old_ip_table                 "ipAdEntAddr",
            ospf_if_admin                "ospfIfAdminStat",
            ospf_if_area                 "ospfIfAreaId",
            ospf_if_dead                 "ospfIfRtrDeadInterval",
            ospf_if_hello                "ospfIfHelloInterval",
            ospf_if_ip                   "ospfIfIpAddress",
            ospf_if_state                "ospfIfState",
            ospf_if_type                 "ospfIfType",
            ospf_ip                      "ospfHostIpAddress",
            ospf_peer_id                 "ospfNbrRtrId",
            ospf_peer_state              "ospfNbrState",
            ospf_peers                   "ospfNbrIpAddr",
            peth_port_admin              "pethPsePortAdminEnable",
            peth_port_class              "pethPsePortPowerClassifications",
            peth_port_status             "pethPsePortDetectionStatus",
            peth_power_consumption       "pethMainPseConsumptionPower",
            peth_power_status            "pethMainPseOperStatus",
            peth_power_threshold         "pethMainPseUsageThreshold",
            peth_power_watts             "pethMainPsePower",
            qb_cv_egress                 "dot1qVlanCurrentEgressPorts",
            qb_cv_stat                   "dot1qVlanStatus",
            qb_cv_untagged               "dot1qVlanCurrentUntaggedPorts",
            qb_fw_port                   "dot1qTpFdbPort",
            qb_fw_status                 "dot1qTpFdbStatus",
            qb_i_vlan                    "dot1qPvid",
            qb_i_vlan_in_flt             "dot1qPortIngressFiltering",
            qb_i_vlan_type               "dot1qPortAcceptableFrameTypes",
            qb_v_egress                  "dot1qVlanStaticEgressPorts",
            qb_v_fbdn_egress             "dot1qVlanForbiddenEgressPorts",
            qb_v_name                    "dot1qVlanStaticName",
            qb_v_stat                    "dot1qVlanStaticRowStatus",
            qb_v_untagged                "dot1qVlanStaticUntaggedPorts",
            stp_i_mac                    "dot1dBaseBridgeAddress",
            stp_i_ntop                   "dot1dStpTopChanges",
            stp_i_priority               "dot1dStpPriority",
            stp_i_root                   "dot1dStpDesignatedRoot",
            stp_i_root_port              "dot1dStpRootPort",
            stp_i_time                   "dot1dStpTimeSinceTopologyChange",
            stp_p_bridge                 "dot1dStpPortDesignatedBridge",
            stp_p_cost                   "dot1dStpPortPathCost",
            stp_p_id                     "dot1dStpPort",
            stp_p_port                   "dot1dStpPortDesignatedPort",
            stp_p_priority               "dot1dStpPortPriority",
            stp_p_root                   "dot1dStpPortDesignatedRoot",
            stp_p_state                  "dot1dStpPortState",
            v_name                       "dot1qVlanStaticName"
        },
        globals             {
            b_mac                "dot1dBaseBridgeAddress",
            b_ports              "dot1dBaseNumPorts",
            b_type               "dot1dBaseType",
            bgp_id               "bgpIdentifier.0",
            bgp_local_as         "bgpLocalAs.0",
            contact              "sysContact",
            description          "sysDescr",
            id                   "sysObjectID",
            ipforwarding         "ipForwarding",
            layers               "sysServices",
            lldp_sys_cap         "lldpLocSysCapEnabled",
            lldp_sysdesc         "lldpLocSysDesc",
            lldp_sysname         "lldpLocSysName",
            location             "sysLocation",
            mac                  "ifPhysAddress.1",
            name                 "sysName",
            ports                "ifNumber",
            qb_next_vlan_index   "dot1qNextFreeLocalVlanIndex",
            qb_vlans             "dot1qNumVlans",
            qb_vlans_max         "dot1qMaxSupportedVlans",
            router_ip            "ospfRouterId.0",
            serial1              ".1.3.6.1.4.1.9.3.6.3.0",
            stp_priority         "dot1dStpPriority",
            stp_root             "dot1dStpDesignatedRoot",
            stp_root_port        "dot1dStpRootPort",
            stp_time             "dot1dStpTimeSinceTopologyChange",
            stp_ver              "dot1dStpProtocolSpecification",
            uptime               "sysUpTime"
        },
        IgnoreNetSNMPConf   1,
        init                \ 1,
        mibdirs             var{args}{MibDirs},
        mibs                {
            ADSL-LINE-MIB        "adslLineType",
            BGP4-MIB             "bgpIdentifier",
            BRIDGE-MIB           "dot1dBaseBridgeAddress",
            CISCO-IETF-IP-MIB    "cInetNetToMediaNetAddress",
            ENTITY-MIB           "entPhysicalSerialNum",
            EtherLike-MIB        "etherMIB",
            IF-MIB               "ifIndex",
            IP-MIB               "ipNetToMediaIfIndex",
            IPV6-MIB             "ipv6IfTableLastChange",
            LLDP-EXT-DOT1-MIB    "lldpXdot1MIB",
            LLDP-EXT-DOT3-MIB    "lldpXdot3MIB",
            LLDP-EXT-MED-MIB     "lldpXMedMIB",
            LLDP-MIB             "lldpLocSysCapEnabled",
            OSPF-MIB             "ospfRouterId",
            POWER-ETHERNET-MIB   "pethPsePortDetectionStatus",
            Q-BRIDGE-MIB         "dot1qPvid",
            RFC1213-MIB          "ipRouteIfIndex",
            RSTP-MIB             "dot1dStpPortOperEdgePort",
            SNMPv2-MIB           "sysObjectID"
        },
        munge               {
            at_paddr                 sub { ... },
            b_mac                    var{munge}{at_paddr},
            bs_mac                   var{munge}{at_paddr},
            c_inet_phys_addr         sub { ... },
            e_type                   sub { ... },
            el_duplex                sub { ... },
            fw_mac                   var{munge}{at_paddr},
            i_mac                    var{munge}{at_paddr},
            i_octet_in64             sub { ... },
            i_octet_out64            var{munge}{i_octet_in64},
            i_pkts_bcast_in64        var{munge}{i_octet_in64},
            i_pkts_bcast_out64       var{munge}{i_octet_in64},
            i_pkts_multi_out64       var{munge}{i_octet_in64},
            i_pkts_mutli_in64        var{munge}{i_octet_in64},
            i_pkts_ucast_in64        var{munge}{i_octet_in64},
            i_pkts_ucast_out64       var{munge}{i_octet_in64},
            i_speed                  sub { ... },
            i_speed_high             sub { ... },
            i_up                     sub { ... },
            ip                       sub { ... },
            ip_n2p_phys_addr         var{munge}{at_paddr},
            i6_n2p_phys_addr         var{munge}{at_paddr},
            layers                   sub { ... },
            lldp_rem_asset           sub { ... },
            lldp_rem_cap_spt         sub { ... },
            lldp_rem_fw_rev          var{munge}{lldp_rem_asset},
            lldp_rem_hw_rev          var{munge}{lldp_rem_asset},
            lldp_rem_media_cap       var{munge}{lldp_rem_cap_spt},
            lldp_rem_media_cap_spt   var{munge}{lldp_rem_cap_spt},
            lldp_rem_model           var{munge}{lldp_rem_asset},
            lldp_rem_port_desc       var{munge}{lldp_rem_asset},
            lldp_rem_serial          var{munge}{lldp_rem_asset},
            lldp_rem_sw_rev          var{munge}{lldp_rem_asset},
            lldp_rem_sys_cap         var{munge}{lldp_rem_cap_spt},
            lldp_rem_sysdesc         var{munge}{lldp_rem_asset},
            lldp_rem_sysname         var{munge}{lldp_rem_asset},
            lldp_rem_vendor          var{munge}{lldp_rem_asset},
            lldp_sys_cap             var{munge}{lldp_rem_cap_spt},
            lldp_sysdesc             var{munge}{lldp_rem_asset},
            lldp_sysname             var{munge}{lldp_rem_asset},
            mac                      var{munge}{at_paddr},
            n2p_paddr                var{munge}{at_paddr},
            old_at_paddr             var{munge}{at_paddr},
            qb_cv_egress             sub { ... },
            qb_cv_untagged           var{munge}{qb_cv_egress},
            qb_v_egress              var{munge}{qb_cv_egress},
            qb_v_fbdn_egress         var{munge}{qb_cv_egress},
            qb_v_untagged            var{munge}{qb_cv_egress},
            stp_i_mac                var{munge}{at_paddr},
            stp_i_root               sub { ... },
            stp_p_bridge             var{munge}{stp_i_root},
            stp_p_port               sub { ... },
            stp_p_root               var{munge}{stp_i_root},
            stp_root                 var{munge}{stp_i_root}
        },
        nosuch              1,
        sess                var{args}{Session},
        snmp_comm           "public",
        snmp_user           "initial",
        snmp_ver            2,
        store               {}
    }
}
[1707] 2019-01-31 23:56:52  info show: finished at Thu Jan 31 23:56:52 2019
[1707] 2019-01-31 23:56:52  info show: status done: Showed specify response from de.vi.ce.ip

fz883 avatar Jan 31 '19 23:01 fz883

vendor, os, model & version sometimes are detected by default as well, but not in this case it seems.

first step will be to merge the mibs https://github.com/netdisco/netdisco-mibs/pull/66

a basic module for lenovo devices which detects vendor, os, model & version should be pretty straightforward. if you use those, does it detect power over ethernet status, vlans & interfaces?

inphobia avatar Feb 01 '19 00:02 inphobia

vlans, interfaces, modules, that's there, yes.

fz883 avatar Feb 01 '19 00:02 fz883

that makes things easy. could you also provide an snmpwalk like you did for the g8052 ones?

i'll have a quick look at both, but will be till middle next week that i have some decent spare time if things aren't straightforward.

inphobia avatar Feb 01 '19 01:02 inphobia

I've added several dumps to the repo. Please get them from there. Thanks for all your help!

fz883 avatar Feb 01 '19 10:02 fz883

at first sight lenovo shouldn't be to hard i think, the support the standard rfc mibs all over the place. haven't looked into detail yet if the output format matches what's expected (yes citrix netscaler, i'm looking at you).

the lenovo mibs by themselves will not really add that much since they don't really have a lot in them. are there per device mibs too like with the ibm ones, or is this it?

inphobia avatar Feb 01 '19 15:02 inphobia

so i'm seeing some strange issues and i'm trying to figure out if that's just snmpsim doing funny things or real behaviour:

while the management interface says it's at 1.0gbps, port channel & ethernet interfaces report speed "1410065408", l3ipvlan "8000"

also interface & vlan names are strangly quoted: image

i suspect both are snmpsim issues or how i prepped the snmpwalk output, but would like to doublecheck first.

inphobia avatar Feb 01 '19 17:02 inphobia

while i was impressed with the standard compliance at first, the lenovo mibs feel more like a required checklist item: "custom information base: ✔️ " :)

those strange interface speeds were present in the output you provided, but IF-MIB::ifHighSpeed can be used instead. but work is in progress.

inphobia avatar Feb 01 '19 19:02 inphobia

so i'm seeing some strange issues and i'm trying to figure out if that's just snmpsim doing funny things or real behaviour:

while the management interface says it's at 1.0gbps, port channel & ethernet interfaces report speed "1410065408", l3ipvlan "8000"

also interface & vlan names are strangly quoted: image

i suspect both are snmpsim issues or how i prepped the snmpwalk output, but would like to doublecheck first.

Well, the quotes are necessary if names contain spaces, so we quote them even if there are none. The switch config however does not show escaped quotes.

fz883 avatar Feb 01 '19 20:02 fz883

got started, still a big todo list of things i found that don't quite work.

what it does now is basicly detect it's a lenovo device in fill in the device details page. if you want to test you will need to git checkout netdisco-mibs for the lenovo mibs.

(code is here, will pull it to main repo when it's closer to being complete https://github.com/inphobia/snmp-info/tree/nn_lenovo )

inphobia avatar Feb 01 '19 22:02 inphobia

@fz883 i'm struggeling with the snmp data since the steps here https://github.com/netdisco/snmp-info/wiki/Simulating-Agents didn't quite give me the output i hoped for.

is there a chance that you could generate an output file with snmpsim itself? i'm no python expert but as far as i can tell it seems to be self contained in a directory with the install procedure mentioned in the link.

on my opensuse leap 15 i installed python3, python3-pip & python3-virtualenv via zypper so i could keep my system clean.

might just as welll write out the steps.

  • since i don't know how pip works i installed it via my package manager, so i can be sure i can clean it later.
    • for opensuse you need python3-pip & python3-virtualenv
    • for debian i think you need the same packages. when checking it seems i'm still on python 2.7 there but out of time now to test.
    • bottom line: python3's virtualenv & pip
  • then it's most of the steps from the link above:
  • mkdir python-env && cd python-env
  • virtualenv snmpsim
  • source snmpsim/bin/activate
  • pip install snmpsim

now snmpsim should be installed and virtualenv active (your prompt will be prefixed with (snmpsim) while virtualenv is active). then use snmprec to create a dump:

snmprec.py --agent-udpv4-endpoint=__ip__address__ --output-file=ne1032.snmprec --protocol-version=2c --community=__comm__

you'll need to change ip__address & comm ofcourse. also the output file name needs to be unique per device.

the output of this tool is a lot more arcane, so if there is sensitive data in it that might be hard to remove. on the other hand it also seems to reproduce the output more accurate. for most of my todo list for lenovo support now i'm not sure if it's my code, the way lenovo does snmp or the data i'm feeding it is just wrong...

(perhaps you can also active the issue tracker on your private repo so we discuss stuff there without making this issue log huge :) )

inphobia avatar Feb 02 '19 02:02 inphobia

side note for those who find this message in the future: half of the issues i had were due to snmpwalk -> snmprec conversions.

getting the data directly via snmprec.py was an easy solution for this. update the faq to also include this option at a later time.

inphobia avatar Feb 04 '19 11:02 inphobia

basic support was added in snmp::info 3.67, could you provide some feedback on how it's working out? not everything is supported yet (lag needs work) but i'd like to see if this now works on real devices.

inphobia avatar May 28 '19 16:05 inphobia

I can verify this next week. Thanks!

fz883 avatar Jun 14 '19 11:06 fz883

coolness, of the basic support checks we have a solid base to address the todo's:

https://github.com/netdisco/snmp-info/blob/02c8ed0764dc2230ea1cd31028f63de655085cc5/lib/SNMP/Info/Layer3/Lenovo.pm#L30-L35

(need a few more snmprec files for the ibm issue)

inphobia avatar Jun 14 '19 16:06 inphobia

I can't confirm improvement.

Environment image

upon rediscovery: image

fz883 avatar Jun 24 '19 09:06 fz883

strange, did you update the netdisco-mibs when running netdisco-deploy?

inphobia avatar Jun 24 '19 20:06 inphobia

Good question.

I'm running netdisco in a docker container. I did pull all the relevant images:

root@hostname:~# docker images netdisco/*
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
netdisco/netdisco   latest-backend      8ed6d681cb41        3 weeks ago         411MB
netdisco/netdisco   latest-web          73f0a5374e6c        3 weeks ago         114MB
netdisco/netdisco   latest-postgresql   7f707dfa4d32        3 weeks ago         40.9MB

But the mibs inside the container do not seem to have Lenovo referenced.

~/netdisco-mibs $ pwd
/home/netdisco/netdisco-mibs
~/netdisco-mibs $ ls
3com            apc             cabletron       d-link          fortinet        lancom          motorola        northerndesign  robots.txt      vmware
CONTRIBUTING    arista          ceragon         dell            foundry         lantronix       nateks          opengear        ruckus          xirrus
EXTRAS          aruba           checkpoint      enterasys       gigamon         liebert         net-snmp        packetfront     schleifenbauer
README          asante          cisco           exinda          h3c             mediant         netapp          paloalto        sentry
adtran          avaya           ciscosb         extreme         hp              meraki          netgear         pica8           sixnet
aerohive        bluecoat        citrix          extricom        huawei          meru            netscreen       rad             sonicwall
alcatel         bluesocket      colubris        f5              ibm             mikrotik        nexans          rfc             tplink
allied          brother         cyclades        force10         juniper         moser-baer      nortel          riverbed        trapeze
~/netdisco-mibs $ grep -ri lenovo *
~/netdisco-mibs $
~/netdisco-mibs $ grep Version README
    Version 4.013

Manually injecting the newer mibs V4.016 (pulled from github) helped: image image

Thanks for the hint. ;)

fz883 avatar Jun 24 '19 21:06 fz883

seems netdisco-mibs release 4.13 is missing a 0 (should be 4.013) and thus is causing the docker builds not to update.

curl -sL https://api.github.com/repos/netdisco/netdisco-mibs/tags | jq '.[]|.tarball_url|select(test("tarball/\\d+\\.\\d+$"))' | sort -rg is causing 4.13 to be the top option.

i'll see if there's an option to rename the tag.

inphobia avatar Jun 24 '19 23:06 inphobia

renaming the netdisc-mibs 4.13 tag to 4.013 seems to have fixed this.

inphobia avatar Jun 25 '19 22:06 inphobia

btw, basic support was added in #323 (snmp::info 3.67), but it's not yet feature complete. i'll change the title of this issue to reflect that.

inphobia avatar Aug 26 '19 20:08 inphobia

@fz883 it's been a while since this has been worked on. care to comment if you're still using netdisco & how your devices are acting now?

i still have access to your snmp dumps, if you are still using these devices a fresh dump would be helpful.

inphobia avatar Feb 11 '24 00:02 inphobia