diff --git a/agent_based/cisco_bgp_peer.py b/agent_based/cisco_bgp_peer.py index 9bd148de3eece31bc11b19ffab096e22b59d8ec7..ec9544093b808a78e377727ec2bbc36a9542d906 100644 --- a/agent_based/cisco_bgp_peer.py +++ b/agent_based/cisco_bgp_peer.py @@ -47,8 +47,9 @@ # 2021-11-13: fix for mixed peers (with and without prefixes on one host) # 2021-11-14: merged check function with bgp_peer # merged parse function with bgp_peer +# added basic support for VRFs (cbgpPeer3Entry) -from typing import List, Dict +from typing import List, Dict, Optional from cmk.base.plugins.agent_based.agent_based_api.v1 import ( register, @@ -57,9 +58,11 @@ from cmk.base.plugins.agent_based.agent_based_api.v1 import ( contains, all_of, OIDEnd, + OIDBytes, ) from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( StringTable, + StringByteTable, ) from cmk.base.plugins.agent_based.utils.bgp_peer import ( @@ -178,6 +181,80 @@ register.snmp_section( ), ) +########################################################################### +# +# cisco_bgp_peer (CISCO-BGP4-MIB:cbgpPeer3Entry) +# +########################################################################### + + +# ToDo: add support for non ipv6, needs sample +def parse_cisco_bgp_peer_3(string_table: StringByteTable) -> Optional[Dict[str, BgpPeer]]: + peer_table = {} + for entry in string_table: + if entry[0] == '1': # IPv4 address + entry[1] = '.'.join(f'{m}' for m in entry[1]) + if entry[2] != 'default': + entry[1] += f' vrf {entry[2]}' + entry.pop(2) # remove vrf name + entry.pop(0) # remove remote address type + bgp_peer = bgp_get_peer_entry(entry) + if bgp_peer: + peer_table.update(bgp_peer) + return peer_table + + +register.snmp_section( + name='cisco_bgp_peer_3', + parse_function=parse_cisco_bgp_peer_3, + parsed_section_name='bgp_peer', + supersedes=['bgp_peer', 'cisco_bgp_peer'], + fetch= SNMPTree( + base='.1.3.6.1.4.1.9.9.187.1.2.9.1', # CISCO-BGP4-MIB::cbgpPeer3Entry + oids=[ + '2', # cbgpPeer3Type + OIDBytes('3'), # cbgpPeer3RemoteAddr + '4', # cbgpPeer3VrfName + '5', # cbgpPeer3State + '6', # cbgpPeer3AdminStatus + '15', # cbgpPeer3InUpdates + '16', # cbgpPeer3OutUpdates + '17', # cbgpPeer3InTotalMessages + '18', # cbgpPeer3OutTotalMessages + '20', # cbgpPeer3FsmEstablishedTransitions + '21', # cbgpPeer3FsmEstablishedTime + '29', # cbgpPeer3InUpdateElapsedTime + ] + ), + detect=all_of( + contains('.1.3.6.1.2.1.1.1.0', 'Cisco'), + exists('.1.3.6.1.4.1.9.9.187.1.2.9.1.3.*') + ), +) + +# '1', # cbgpPeer3VrfId +# '3', # cbgpPeer3RemoteAddr +# '4', # cbgpPeer3VrfName +# '5', # cbgpPeer3State +# '6', # cbgpPeer3AdminStatus +# '7', # cbgpPeer3NegotiatedVersion +# '8', # cbgpPeer3LocalAddr +# '9', # cbgpPeer3LocalPort +# '10', # cbgpPeer3LocalAs +# '11', # cbgpPeer3LocalIdentifier +# '12', # cbgpPeer3RemotePort +# '13', # cbgpPeer3RemoteAs +# '14', # cbgpPeer3RemoteIdentifier +# '19', # cbgpPeer3LastError +# '22', # cbgpPeer3ConnectRetryInterval +# '23', # cbgpPeer3HoldTime +# '24', # cbgpPeer3KeepAlive +# '25', # cbgpPeer3HoldTimeConfigured +# '26', # cbgpPeer3KeepAliveConfigured +# '27', # cbgpPeer3MinASOriginationInterval +# '28', # cbgpPeer3MinRouteAdvertisementInterval +# '30', # cbgpPeer3LastErrorTxt +# '31', # cbgpPeer3PrevState ########################################################################### # diff --git a/cisco_bgp_peer.mkp b/cisco_bgp_peer.mkp index dc782b296198ca17d24f9300c1934aa7d14b90a3..0f061c46252e7782ccaa6f84ea5bddb7657b1b3c 100644 Binary files a/cisco_bgp_peer.mkp and b/cisco_bgp_peer.mkp differ