Improve Support for Lenovo Switches
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
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
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?
vlans, interfaces, modules, that's there, yes.
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.
I've added several dumps to the repo. Please get them from there. Thanks for all your help!
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?
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:

i suspect both are snmpsim issues or how i prepped the snmpwalk output, but would like to doublecheck first.
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.
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:
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.
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 )
@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
- for opensuse you need
- 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 :) )
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.
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.
I can verify this next week. Thanks!
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)
I can't confirm improvement.
Environment

upon rediscovery:

strange, did you update the netdisco-mibs when running netdisco-deploy?
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:

Thanks for the hint. ;)
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.
renaming the netdisc-mibs 4.13 tag to 4.013 seems to have fixed this.
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.
@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.