Add IS-IS support (#316)

* Add ISIS support
* some doc fixups
mention isis-mib, use level so to not be confused with layer.
This commit is contained in:
pyro3d
2019-03-18 22:55:38 -07:00
committed by Jeroen van Ingen Schenau
parent bfd71b5add
commit d93e3ab1b6

View File

@@ -66,6 +66,7 @@ $VERSION = '3.65';
%SNMP::Info::LLDP::MIBS,
'IP-MIB' => 'ipNetToMediaIfIndex',
'OSPF-MIB' => 'ospfRouterId',
'ISIS-MIB' => 'isisSysID',
'BGP4-MIB' => 'bgpIdentifier',
);
@@ -123,6 +124,20 @@ $VERSION = '3.65';
'ospf_peer_id' => 'ospfNbrRtrId',
'ospf_peer_state' => 'ospfNbrState',
# ISIS-MIB::isisCircTable
'isis_circ_if_idx' => 'isisCircIfIndex' ,
'isis_circ_admin' => 'isisCircAdminState',
'isis_circ_type' => 'isisCircType',
'isis_circ_level_type' => 'isisCircLevelType',
# ISIS-MIB::isisISAdjTable
'isis_adj_state' => 'isisISAdjState',
'isis_adj_type' => 'isisISAdjNeighSysType',
'isis_adj_usage' => 'isisISAdjUsage',
'isis_adj_id' => 'isisISAdjNeighSysID',
'isis_adj_ip_type' => 'isisISAdjIPAddrType',
'isis_adj' => 'isisISAdjIPAddrAddress',
# BGP4-MIB::bgpPeerTable
'bgp_peers' => 'bgpPeerLocalAddr',
'bgp_peer_id' => 'bgpPeerIdentifier',
@@ -161,6 +176,32 @@ $VERSION = '3.65';
'n2p_paddr' => \&SNMP::Info::munge_mac,
);
sub isis_peers {
my $l3 = shift;
my $isis_peers = {};
# Returns hexstrings. Need to convert to IPv4 dotted or IPv6 hex notation
my $adjacencies = $l3->isis_adj();
foreach my $key (keys %$adjacencies) {
my $hexstr = $adjacencies->{$key};
my $l = length $hexstr;
my $ip;
# 4 bytes = IPv4
if ($l == 4) {
$ip = join(".", unpack("C*", $hexstr));
$isis_peers->{$key} = $ip;
}
# 16 bytes = IPv6
elsif ($l == 16) {
$ip = unpack("H*", $hexstr);
$ip =~ s/....(?=.)\K/:/sg ;
$isis_peers->{$key} = $ip;
}
}
return $isis_peers;
}
# Method OverRides
sub root_ip {
@@ -415,6 +456,8 @@ after determining a more specific class using the method above.
=item F<IP-MIB>
=item F<ISIS-MIB>
=item F<OSPF-MIB>
=item F<BGP4-MIB>
@@ -766,6 +809,82 @@ routers
=back
=head2 IS-IS Circuit Table
=over
=item $l3->isis_circ_if_idx()
Returns reference to hash of the interface index associated with the IS-IS
circuit
(C<isisCircIfIndex>)
=item $l3->isis_circ_admin()
Returns reference to hash of the IS-IS circuit's admin status
(C<isisCircAdminState>)
=item $l3->isis_circ_type()
Returns reference to hash of the IS-IS circuit's type
(C<isisCircType>)
=item $l3->isis_circ_level_type()
Returns reference to hash of the IS-IS circuit's level
(C<isisCircLevelType>)
=back
=head2 IS-IS Adjacency Table
=over
=item $l3->isis_adj_id()
Returns reference to hash of the peer id of adjacencies.
(C<isisISAdjNeighSysID>)
=item $l3->isis_adj_type()
Returns reference to hash of the type of adjacencies (Level 1
Intermediate System, Level 2 Intermediate System, Level 1+2
Intermediate System, unknown)
(C<isisISAdjNeighSysType>)
=item $l3->isis_adj_usage()
Returns reference to hash of the type of adjacencies in use
(undefined, Level 1, Level 2, Level1+2)
(C<isisISAdjNeighUsage>)
=item $l3->isis_adj_ip_type()
Returns reference to hash of type of address (IPv4, IPv6, etc) on adjacencies.
(C<isisISAdjIPAddrType>)
=item $l3->isis_adj()
Returns reference to hash of addresses (IPv4, IPv6, etc) on adjacencies.
Note this returns hash-strings, for IPs, use $l3->isis_peers()
(C<isisISAdjIPAddrAddress>)
=item $l3->isis_peers()
Returns reference to hash of addresses (IPv4, IPv6) on adjacencies.
Convers hash strings from isis_adj to proper
IP (v4 and v6) formatting.
=back
=head2 Table Methods imported from SNMP::Info
See L<SNMP::Info/"TABLE METHODS"> for details.