NAME
SNMP::Info::Layer3::Extreme - Perl5 Interface to Extreme Network Devices
AUTHOR
Eric Miller, Bill Fenner
SYNOPSIS
# Let SNMP::Info determine the correct subclass for you.
my $extreme = new SNMP::Info(
AutoSpecify => 1,
Debug => 1,
DestHost => 'myswitch',
Community => 'public',
Version => 2
)
or die "Can't connect to DestHost.\n";
my $class = $extreme->class();
print "SNMP::Info determined this device to fall under subclass : $class\n";
DESCRIPTION
Provides abstraction to the configuration information obtainable from an Extreme device through SNMP.
Inherited Classes
Required MIBs
- EXTREME-BASE-MIB
- EXTREME-SYSTEM-MIB
- EXTREME-FDB-MIB
- EXTREME-VLAN-MIB
- EXTREME-POE-MIB
- EXTREME-STP-EXTENSIONS-MIB
- RAPID-CITY
- EXTREME-PORT-MIB
- EXTREME-MLAG-MIB
- Inherited Classes' MIBs
-
See classes listed above for their required MIBs.
GLOBALS
These are methods that return scalar value from SNMP
- $extreme->model()
-
Returns model type. Checks $extreme->id() against the EXTREME-BASE-MIB.
- $extreme->vendor()
-
Returns
extreme - $extreme->os()
-
Returns
xos,voss(VOSS / Fabric Engine) orextremewaredepending on description() - $extreme->os_ver()
-
Parses device operating system version from description()
- $extreme->serial()
-
Returns serial number
(
extremeSystemID) - $extreme->temp()
-
Returns system temperature
(
extremeCurrentTemperature) - $extreme->ps1_status()
-
Returns status of power supply 1
(
extremePowerSupplyStatus.1) - $extreme->ps2_status()
-
Returns status of power supply 2
(
extremePowerSupplyStatus.2) - $extreme->fan()
-
Returns fan status
(
extremeFanOperational.1) - $extreme->mac()
-
Returns base mac
(
dot1dBaseBridgeAddress) - $extreme->hasMSTP()
-
Returns 1 when the device runs MSTP:
dot1dStpVersionis 3. - $extreme->hasRSTP()
-
Returns 1 when the device runs 802.1W:
dot1dStpVersionis 2. - $extreme->hasPVST()
-
Returns 1 when any domain's ports run in PVST+ mode (
extremeStpPortPortModepvstp). - $extreme->hasSTP()
-
Returns 1 when
dot1dStpVersionis 0 and a domain has no port in PVST+ mode. A device with one such domain and one PVST+ domain answers 1 to bothhasSTP()andhasPVST().
Globals imported from SNMP::Info::Layer3
See documentation in "GLOBALS" in SNMP::Info::Layer3 for details.
Globals imported from SNMP::Info::MAU
See documentation in "GLOBALS" in SNMP::Info::MAU for details.
Globals imported from SNMP::Info::EDP
See documentation in "GLOBALS" in SNMP::Info::EDP for details.
TABLE METHODS
These are methods that return tables of information in the form of a reference to a hash.
Overrides
- $extreme->interfaces()
-
Returns a mapping between the Interface Table Index (iid) and the physical port name.
- $extreme->i_duplex()
-
Parses mau_index and mau_link to return the duplex information for interfaces.
- $extreme->i_duplex_admin()
-
Parses
mac_index,mau_autostat,mau_type_adminin order to find the admin duplex setting for all the interfaces.Returns either (auto,full,half).
- $extreme->i_ignore()
-
Returns reference to hash. Increments value of IID if port is to be ignored.
Ignores VLAN meta interfaces and loopback
- $extreme->fw_mac()
-
(
extremeFdbMacFdbMacAddress) - $extreme->fw_port()
-
(
extremeFdbMacFdbPortIfIndex) - $extreme->fw_status()
-
(
extremeFdbMacFdbStatus) - $extreme->lldp_if()
-
Returns the mapping to the SNMP Interface Table. Extreme LLDP uses the bridge index rather than ifIndex.
- $extreme->i_stp_state()
-
Returns reference to hash. Key:
ifIndex, Value: the port state in the device's default spanning tree, fromdot1dStpPortStatemapped throughbp_index. Returns an empty hash when the device serves noBRIDGE-MIBSTP port table, as VOSS does under MSTP; the vendorextremeStpPortTableis not used, since it is keyed by STP domain. Under RSTP, VOSS serves forwarding for a port its CLI shows blocked.(
dot1dStpPortState) - $extreme->i_vlan()
-
Returns a mapping between
ifIndexand the VLAN. - $extreme->i_vlan_membership()
-
Returns reference to hash of arrays: key =
ifIndex, value = array of VLAN IDs. These are the VLANs which are members of the egress list for the port.Example: my $interfaces = $extreme->interfaces(); my $vlans = $extreme->i_vlan_membership(); foreach my $iid (sort keys %$interfaces) { my $port = $interfaces->{$iid}; my $vlan = join(',', sort(@{$vlans->{$iid}})); print "Port: $port VLAN: $vlan\n"; } - $extreme->i_vlan_membership_untagged()
-
Returns reference to hash of arrays: key =
ifIndex, value = array of VLAN IDs. These are the VLANs which are members of the untagged egress list for the port. - $extreme->v_index()
-
Returns VLAN IDs from
extremeVlanIfTable, or fromQ-BRIDGE-MIBwhen that table is empty. - $extreme->v_name()
-
Returns VLAN names from
extremeVlanIfDescr, ordot1qVlanStaticNamewhenextremeVlanIfTableis empty.(
extremeVlanIfDescr) - $extreme->bp_index()
-
Returns reference to hash of bridge port table entries map back to interface identifier (iid)
Returns (
ifIndex) for both key and value since we're using EXTREME-FDB-MIB rather than BRIDGE-MIB. - $extreme->vrf_instances_complete( [ \@names ] )
-
On ExtremeXOS, returns undef where SNMP::Info::VRF would return 1. EXOS serves
mplsL3VpnConfiguredVrfsas 0 even with virtual routers configured, since they answer only as SNMPv3 contexts. So the list is never known to be whole. A caller name still returns 0. - $extreme->context_kinds($feature)
-
Returns
['vrf']forvrfon ExtremeXOS, where each virtual router answers in its own SNMPv3 context, and on VOSS, where each VRF does. Returns nothing otherwise, and nothing on ExtremeWare. Seecontext_kinds()in SNMP::Info. - $extreme->snmp_context($kind, $id)
-
Returns nothing for kinds other than
vrf. Seesnmp_context()in SNMP::Info.On ExtremeXOS, for a virtual router name returns
{ kind => 'vrf', id => $name, v2c => undef, v3 => $name }. The default virtual router is the default context, sodefaultand an empty name get nothing.On VOSS, for a name
vrf_instances()lists returns{ kind => 'vrf', id => $name, v2c => '%s::$vrfid', v3 => $context }.$vrfidis the VRF'srcVrfConfigTableindex. For vrfid 1,publicbecomespublic::1.$contextis the VRF'srcVrfContextName, such asvrf1.default, which isGlobalRouter, and a name the device does not list get nothing.On ExtremeXOS
v2cis undef. The ExtremeXOS user guide documents an SNMPv2c read community of the formvr_name@community_namefor a user virtual router. That form is unverified, so it is not offered asv2c. If you can confirm it on a device, please open an issue with a walk. SNMPv3 with the virtual router name as the context is verified; use it.A VOSS SNMPv2c community with an
@suffix (public@vrf1) is served from the default context, so the VRF readers do not take the suffix as the session's context. A VOSS session on acommunity::vrfidcommunity reads as that VRF: a VRF context serves only its ownrcVrfConfigTablerow, and the VRF readers take the context from that row. The default context serves every row, so a session there reads as the default context. - $extreme->peth_port_power()
-
Power supplied by PoE ports, in milliwatts
(
extremePethPortMeasuredPower) - $extreme->peth_power_watts()
-
The configured maximum amount of in-line power available to the slot.
(
extremePethSlotPowerLimit)
VRF Instances
See "VRF Instances" in SNMP::Info::VRF for the readers. Both ExtremeXOS and VOSS use context mode.
ExtremeXOS
On ExtremeXOS 33.6 the virtual routers answer only as SNMPv3 contexts, and the device serves no list of them:
mplsL3VpnConfiguredVrfsis 0 andMPLS-L3VPN-STD-MIBhas no row. Pass the names withvrf_instances(\@names). Each reads in the context of its name.The address table is the same in every context. So the ports of a context are the interfaces of its
inetCidrRouteTableroutes, and its addresses, neighbors and subnets are those on them.EXOS puts a VLAN's IPv4 routes on its router interface, whose
ifNameis<vlan> rtif(<address>), and the VLAN's addresses on the interface named<vlan>. A router interface therefore also makes its VLAN's interface a port of the context.The default context works the same way, for the default virtual router.
A subnet two virtual routers share is read from each one's connected route.
A name the device lacks has no route, so it reads no port, address or neighbor.
VOSS: instances and ports
The device lists its VRFs in
rcVrfConfigTable, which the default context serves whole. vrfid 0,GlobalRouter, is the instancedefault(see "Completeness" in SNMP::Info::VRF). A device with onlyGlobalRouterandMgmtRouterreportsvrf_instances_complete()1 with one VRF,MgmtRouter.l3_isidis the I-SIDrcVrfIpVpnTablegives the VRF's IP VPN, and undef where it serves none.Each VRF reads in its own context, which serves only that VRF's rows.
In the default context,
i_vrf()maps each VRF VLAN's interface fromrcVlanTable, and each interfacercIpAddrTablegives a VRF. That context servesrcIpAddrTableonly forGlobalRouter, so a VRF interface with no VLAN, such as a loopback, is mapped only in its own context.In a VRF context, the ports are those its
rcVlanTableandrcIpAddrTablegive the VRF, and the interfaces of its connected routes. A route learned over the fabric sits on the fabric VLAN's interface, which is not a port of the VRF.
VOSS: addresses, routes and neighbors
A VRF context serves no IP-MIB address table. A VRF's IPv4 addresses are the
rcIpAddrTablerows whosercIpAdEntVrfIdis the VRF's, each with the prefix length ofrcIpAdEntNetMask. No route is an address source.In the default context, the addresses are those
ipAddrTableserves, with thercIpAddrTablerows of vrfid 0. ThereipAddrTablelists every VRF's addresses, and only those on the ports ofGlobalRouterare kept.Those ports include the interface of each
ipAddrTableaddress that a connected route names as its next hop. The management CLIP is one: its host route sits on the management VLAN's interface.A VRF's IPv6 addresses are those IPV6-MIB
ipv6AddrTableserves, and its IPv6 neighbors those ofipv6NetToMediaTable.VOSS indexes
inetCidrRouteTablewith no length octet before either address. The subnets of the connected routes are read from that index; a row in the standard index shape is read as the standard one.A context's ARP table holds the VRF's own addresses at the VLAN interface's MAC, and each subnet broadcast address at the broadcast MAC. Neither is a neighbor.
A subnet two VRFs share is read in each one's own context, on its own VLAN.
VOSS VRF Tables (RAPID-CITY)
- $extreme->vrf_rc_name()
-
Returns reference to hash of VRF names, keyed by vrfid.
(
rcVrfName) - $extreme->vrf_rc_context()
-
Returns reference to hash of the SNMP context name of each VRF, keyed by vrfid.
(
rcVrfContextName) - $extreme->vrf_rc_isid()
-
Returns reference to hash of the I-SID of each VRF's IP VPN, keyed by vrfid.
(
rcVrfIpVpnIsidNumber) - $extreme->vrf_rc_vlan_if()
-
Returns reference to hash of the ifIndex of each VLAN, keyed by VLAN id.
(
rcVlanIfIndex) - $extreme->vrf_rc_vlan_vrf()
-
Returns reference to hash of the vrfid of each VLAN, keyed by VLAN id.
(
rcVlanVrfId) - $extreme->vrf_rc_ip_vrf()
-
Returns reference to hash of the vrfid of each address, keyed by ifIndex then address.
(
rcIpAdEntVrfId) - $extreme->vrf_rc_ip_addr()
-
Returns reference to hash of addresses, keyed by ifIndex then address.
(
rcIpAdEntAddr) - $extreme->vrf_rc_ip_mask()
-
Returns reference to hash of address masks, keyed by ifIndex then address.
(
rcIpAdEntNetMask)
Spanning Tree Instance Globals
- $extreme->stp_i_mac()
-
Returns the MAC extracted from (
extremeStpDomainBridgeId). - $extreme->stp_i_id()
-
Returns the unique identifier of the STP domain.
(
extremeStpDomainStpdInstance) - $extreme->stp_i_time()
-
Returns time since last topology change detected. (100ths/second)
(
extremeStpDomainTimeSinceTopologyChange) - $extreme->stp_i_time()
-
Returns time since last topology change detected. (100ths/second)
(
extremeStpDomainTimeSinceTopologyChange) - $extreme->stp_i_time()
-
Returns the total number of topology changes detected.
(
extremeStpDomainTopChanges) - $extreme->stp_i_root()
-
Returns root of STP.
(
extremeStpDomainDesignatedRoot) - $extreme->stp_i_root_port()
-
Returns the port number of the port that offers the lowest cost path to the root bridge.
(
extremeStpDomainRootPortIfIndex) - $extreme->stp_i_priority()
-
Returns the port number of the port that offers the lowest cost path to the root bridge.
(
extremeStpDomainBridgePriority)
Spanning Tree Protocol Port Table
- $extreme->stp_p_id()
-
(
extremeStpPortPortIfIndex) - $extreme->stp_p_stg_id()
-
(
extremeStpDomainStpdInstance) - $extreme->stp_p_priority()
-
(
extremeStpPortPortPriority) - $extreme->stp_p_state()
-
(
extremeStpPortPortState) - $extreme->stp_p_enable()
-
(
extremeStpPortStpEnabled) - $extreme->stp_p_cost()
-
(
extremeStpPortPathCost) - $extreme->stp_p_root()
-
(
extremeStpPortDesignatedRoot) - $extreme->stp_p_bridge()
-
(
extremeStpPortDesignatedBridge) - $extreme->stp_p_port()
-
(
extremeStpPortDesignatedPort)
Spanning Tree Trees
EXOS runs one spanning tree per STP domain, served in the default context. These override "Spanning Tree Trees" in SNMP::Info::Bridge, where the records are described. VOSS, also handled by this class, serves none of these tables.
The tree records:
- Keys
-
domain.Nfor each domain, N itsextremeStpDomainStpdInstance. name-
The domain name,
extremeStpDomainStpdName. vlan-
The domain's carrier VLAN,
extremeStpDomainStpdTag, when it is not 0. protocol-
dot1dStpVersionis device-wide, so a domain's protocol is:pvstwhen a port of the domain runs in PVST+ mode (extremeStpPortPortModepvstp);else
stpwhendot1dStpVersionis 0;else the protocol
dot1dStpVersionnames, when the device has one domain;else undef.
measured-
1 on EXOS, 0 otherwise.
ports_complete-
1.
contexts-
The default context.
bridge,root-
extremeStpDomainBridgeIdandextremeStpDomainDesignatedRoot.
The port records come from extremeStpPortTable: state (extremeStpPortPortState), enabled (extremeStpPortStpEnabled), designated_bridge and designated_port. role and role_raw are undef: the MIB serves none.
- $extreme->stp_protocols()
-
Returns reference to an array of the protocols
hasSTP(),hasRSTP(),hasMSTP()andhasPVST()report, or nothing. - $extreme->stp_trees()
-
Returns reference to hash of domain records keyed
domain.<instance>. - $extreme->stp_tree_ports($tree_key)
-
Returns reference to hash of the domain's port records keyed by ifIndex, from (
extremeStpPortTable). - $extreme->stp_trees_complete()
-
Returns 1 or 0, as "Spanning Tree Trees" in SNMP::Info::Bridge describes. 0 when the device serves no domain, or the
extremeStpDomainStpdNamewalk was incomplete. - $extreme->stp_vlan_map()
-
Returns reference to hash mapping VLAN id to domain key, from the index of (
extremeStpVlanPortTable) and (extremeVlanIfVlanId). - $extreme->ex_stp_i_name()
-
(
extremeStpDomainStpdName) - $extreme->ex_stp_i_tag()
-
(
extremeStpDomainStpdTag) - $extreme->ex_stp_p_mode()
-
(
extremeStpPortPortMode) - $extreme->ex_stp_vlan_mask()
-
(
extremeStpVlanPortPortMask)
Link Aggregation
- $extreme->agg_ports()
-
Returns a reference to a hash mapping each member port ifIndex to the ifIndex of its load sharing master, from
extremePortLoadshare2Table. The table lists the master as a member of itself; that row is left out. Returns an empty hash when the device serves no load sharing rows. - $extreme->lag_groups()
-
As described in "METHODS" in SNMP::Info::IEEE802dot3ad, keyed by the load sharing master port, with:
The master port is a member of its own aggregate.
An aggregate whose master or member is an MLAG port (
extremeMlagPortTable) getsmc:kindmlag,groupthe MLAG port id (extremeMlagPortId),domainthe peer name (extremeMlagPortPeer), andstatethe local link status (extremeMlagPortLocalLinkStatus).An MLAG port whose load sharing group has only its master is an aggregate of its own, keyed by that master, with the port as its member.
An MLAG port with no load sharing row is an aggregate of its own, keyed by the port, with the port as its member.
- $extreme->mlag_domains()
-
As described in "METHODS" in SNMP::Info::IEEE802dot3ad, keyed by MLAG peer name (
extremeMlagPeerTable), withkindmlagand these fields:system_mac: the operational LACP MAC,extremeMlagPeerOperLacpMac.peer: the peer address,extremeMlagPeerIP, served as an address or as text.status: the checkpoint status,extremeMlagPeerCheckPointStatus.
-
(
extremePortLoadshare2Status) - $extreme->ex_mlag_peer_ip()
-
(
extremeMlagPeerIP) - $extreme->ex_mlag_peer_status()
-
(
extremeMlagPeerCheckPointStatus) - $extreme->ex_mlag_peer_lacp_mac()
-
(
extremeMlagPeerOperLacpMac) - $extreme->ex_mlag_port_id()
-
(
extremeMlagPortId) - $extreme->ex_mlag_port_peer()
-
(
extremeMlagPortPeer) - $extreme->ex_mlag_port_state()
-
(
extremeMlagPortLocalLinkStatus)
Table Methods imported from SNMP::Info::Layer3
See documentation in "TABLE METHODS" in SNMP::Info::Layer3 for details.
Table Methods imported from SNMP::Info::MAU
See documentation in "TABLE METHODS" in SNMP::Info::MAU for details.
Table Methods imported from SNMP::Info::EDP
See documentation in "TABLE METHODS" in SNMP::Info::EDP for details.
SET METHODS
These are methods that provide SNMP set functionality for overridden methods or provide a simpler interface to complex set operations. See "SETTING DATA VIA SNMP" in SNMP::Info for general information on set operations.
ExtremeWare is configured through ifStackTable and extremeVlanEncapsIfTable. ExtremeXOS has neither table, so when extremeVlanEncapsIfTable is empty these methods use dot1qPvid and dot1qVlanStaticEgressPorts from Q-BRIDGE-MIB instead.
- $extreme->set_i_vlan ( vlan, ifIndex )
-
Changes an access (untagged) port VLAN, must be supplied with the numeric VLAN ID and port
ifIndex. This method should only be used on end station (non-trunk) ports. ThroughQ-BRIDGE-MIB, a VLAN already tagged on the port is removed from its egress list first.Example: my %if_map = reverse %{$extreme->interfaces()}; $extreme->set_i_vlan('2', $if_map{'FastEthernet0/1'}) or die "Couldn't change port VLAN. ",$extreme->error(1); - $extreme->set_i_pvid ( pvid, ifIndex )
-
Sets port default VLAN, must be supplied with the numeric VLAN ID and port
ifIndex. This method should only be used on trunk ports. ThroughQ-BRIDGE-MIB, a VLAN tagged on the port is refused; useset_i_vlan.Example: my %if_map = reverse %{$extreme->interfaces()}; $extreme->set_i_pvid('2', $if_map{'FastEthernet0/1'}) or die "Couldn't change port default VLAN. ",$extreme->error(1); - $extreme->set_add_i_vlan_tagged ( vlan, ifIndex )
-
Adds the VLAN to the enabled VLANs list of the port, must be supplied with the numeric VLAN ID and port
ifIndex.Example: my %if_map = reverse %{$extreme->interfaces()}; $extreme->set_add_i_vlan_tagged('2', $if_map{'FastEthernet0/1'}) or die "Couldn't add port to egress list. ",$extreme->error(1); - $extreme->set_remove_i_vlan_tagged ( vlan, ifIndex )
-
Removes the VLAN from the enabled VLANs list of the port, must be supplied with the numeric VLAN ID and port
ifIndex.Example: my %if_map = reverse %{$extreme->interfaces()}; $extreme->set_remove_i_vlan_tagged('2', $if_map{'FastEthernet0/1'}) or die "Couldn't add port to egress list. ",$extreme->error(1);