diff --git a/README.md b/README.md index 48a86791f8377a66b8dd4f7f4a24b3ce6b557473..6d9a5d3d3681a63cd3be05758c82ecf30ba89d96 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -[PACKAGE]: ../../raw/master/mkp/cisco_bgp_peer-1.0.2-20241220.mkp "cisco_bgp_peer-1.0.2-20241220.mkp" +[PACKAGE]: ../../raw/master/mkp/cisco_bgp_peer-1.0.3-20250324.mkp "cisco_bgp_peer-1.0.3-20250324.mkp" # Cisco BGP Peer Monitors status of Cisco BGP peers (IPv4 and IPv6, with basic support for VRFs on NXOS) diff --git a/mkp/cisco_bgp_peer-1.0.3-20250324.mkp b/mkp/cisco_bgp_peer-1.0.3-20250324.mkp new file mode 100644 index 0000000000000000000000000000000000000000..700d5c0c5ef55c0a76b51af8f882ae7c6e85a9db Binary files /dev/null and b/mkp/cisco_bgp_peer-1.0.3-20250324.mkp differ diff --git a/source/agent_based/cisco_bgp_peer.py b/source/cmk_addons_plugins/bgp_peer/agent_based/cisco_bgp_peer.py similarity index 91% rename from source/agent_based/cisco_bgp_peer.py rename to source/cmk_addons_plugins/bgp_peer/agent_based/cisco_bgp_peer.py index a39204b1b212205ec1e7d40f81fe13f7fd60df2e..9e9d7353e6375a16edfdf757ef44431442e7d8a4 100644 --- a/source/agent_based/cisco_bgp_peer.py +++ b/source/cmk_addons_plugins/bgp_peer/agent_based/cisco_bgp_peer.py @@ -63,23 +63,25 @@ from dataclasses import dataclass from typing import List, Dict, Optional, Tuple import copy -from cmk.base.plugins.agent_based.agent_based_api.v1 import ( +from cmk.agent_based.v2 import ( OIDBytes, OIDEnd, + SNMPSection, SNMPTree, + StringByteTable, all_of, contains, exists, - register, ) -from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import StringByteTable -from cmk.base.plugins.agent_based.utils.bgp_peer import ( + +from cmk_addons.plugins.bgp_peer.lib.bgp_peer import ( BgpPeer, bgp_get_ip_address_from_oid, bgp_get_peer_entry, bgp_render_ip_address, ) + ########################################################################### # # cisco_bgp_peer (CISCO-BGP4-MIB:cbgpPeer2Entry) @@ -216,11 +218,11 @@ def parse_cisco_bgp_peer(string_table: List[StringByteTable]) -> Dict[str, BgpPe return peer_table -register.snmp_section( +snmp_section_cisco_bgp_peer = SNMPSection( name='cisco_bgp_peer', parse_function=parse_cisco_bgp_peer, parsed_section_name='bgp_peer', - supersedes=['bgp_peer'], + supersedes=['bgp_peer', 'cisco_bgp_peerv2'], fetch=[ SNMPTree( base='.1.3.6.1.4.1.9.9.187.1.2.5.1', # CISCO-BGP4-MIB::cbgpPeer2Entry @@ -272,6 +274,7 @@ register.snmp_section( ), ) + ########################################################################### # # cisco_bgp_peer (CISCO-BGP4-MIB:cbgpPeer3Entry) @@ -280,9 +283,9 @@ register.snmp_section( # ToDo: add support for non IPv4, needs sample -def parse_cisco_bgp_peer_3(string_table: StringByteTable) -> Optional[Dict[str, BgpPeer]]: +def parse_cisco_bgp_peer_3(string_table: List[StringByteTable]) -> Dict[str, BgpPeer]: peer_table = {} - for entry in string_table: + for entry in string_table[0]: ( remote_addr_type, remote_addr, @@ -338,33 +341,33 @@ def parse_cisco_bgp_peer_3(string_table: StringByteTable) -> Optional[Dict[str, return peer_table -register.snmp_section( +snmp_section_cisco_bgp_peer_3 = SNMPSection( 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 - OIDBytes('8'), # cbgpPeer3LocalAddr - '10', # cbgpPeer3LocalAs - '11', # cbgpPeer3LocalIdentifier - '13', # cbgpPeer3RemoteAs - '14', # cbgpPeer3RemoteIdentifier - '15', # cbgpPeer3InUpdates - '16', # cbgpPeer3OutUpdates - '17', # cbgpPeer3InTotalMessages - '18', # cbgpPeer3OutTotalMessages - '20', # cbgpPeer3FsmEstablishedTransitions - '21', # cbgpPeer3FsmEstablishedTime - '29', # cbgpPeer3InUpdateElapsedTime - ] - ), + supersedes=['bgp_peer', 'cisco_bgp_peer', 'cisco_bgp_peerv2', 'cisco_bgp_peerv3'], + 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 + OIDBytes('8'), # cbgpPeer3LocalAddr + '10', # cbgpPeer3LocalAs + '11', # cbgpPeer3LocalIdentifier + '13', # cbgpPeer3RemoteAs + '14', # cbgpPeer3RemoteIdentifier + '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.*') diff --git a/source/agent_based/inv_cisco_bgp_peer.py b/source/cmk_addons_plugins/bgp_peer/agent_based/inv_cisco_bgp_peer.py similarity index 93% rename from source/agent_based/inv_cisco_bgp_peer.py rename to source/cmk_addons_plugins/bgp_peer/agent_based/inv_cisco_bgp_peer.py index c2db485afad5d09486b43b4c458483f65b8fb01d..982ea79da8398cb1b5f8af0f51c491d413de0c5e 100644 --- a/source/agent_based/inv_cisco_bgp_peer.py +++ b/source/cmk_addons_plugins/bgp_peer/agent_based/inv_cisco_bgp_peer.py @@ -11,22 +11,22 @@ # # 2022-04-22: moved here from cisco_bgp_peer # 2022-04-30: code cleanup/streamlining -# +# 2025-03-24: moved to check API v2 for CMK 2.3/2.4 from typing import List -from cmk.base.plugins.agent_based.agent_based_api.v1 import ( + +from cmk.agent_based.v2 import ( OIDBytes, - OIDEnd, + SNMPSection, SNMPTree, + StringByteTable, + exists, + OIDEnd, all_of, contains, - exists, - register, ) -from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import ( - StringByteTable -) -from cmk.base.plugins.agent_based.utils.bgp_peer import ( + +from cmk_addons.plugins.bgp_peer.lib.bgp_peer import ( InvBgpPeer, bgp_error_as_string, bgp_error_code_as_hex, @@ -101,7 +101,7 @@ def parse_inv_cisco_bgp_peer(string_table: List[StringByteTable]): return bgp_peers -register.snmp_section( +snmp_section_inv_cisco_bgp_peer = SNMPSection( name='inv_cisco_bgp_peer', parse_function=parse_inv_cisco_bgp_peer, parsed_section_name='inv_bgp_peer', diff --git a/source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer b/source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer new file mode 100644 index 0000000000000000000000000000000000000000..b54de4350e34801e61bb60921cb406c18601bb17 --- /dev/null +++ b/source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer @@ -0,0 +1,39 @@ +title: Cisco BGP Peers +agents: snmp +catalog: hw/network/cisco +license: GPL +distribution: https://thl-cmk.hopto.org +description: + Monitors the status of BGP peers. It supports IPv4/IPv6 peers and more then one + address family per BGP peer. + + critical: + + - if peer state is "idle" or adminstate is not "start" + + - if accepted prefixes equal or above prefix admin limit + + warning: + + - if peer state is not "established" or peer is not up long enough + + - if accepted prefixes equal or above warn threshold + + This check is tested with a variaity of Cisco ASR and ISR routers. + + The "prefix admin limit" and "warn threshold" needs to be configured on the device. + For example: neighbor 172.17.10.10 maximum-prefix 10000 80. The threshold is in + percentage of the prefix limit . + +item: + Is build from the Address family and IP address of the BGP peer. + For example "172.17.10.10 IPv4 Unicast" + +perfdata: + Describe precisely the number and meaning of performance variables + the check sends. If it outputs no performance data, then leave out this + section. + +inventory: + Checks for "cisco" in sysDesc. If found the check creates one service for each + BGP peer and address family. diff --git a/source/packages/cisco_bgp_peer b/source/packages/cisco_bgp_peer index 16c0651c4acf24272e8f144bd8052cd17ed9e2b1..7f3969bb602b9fbea5c3449518cc3a9a02713e36 100644 --- a/source/packages/cisco_bgp_peer +++ b/source/packages/cisco_bgp_peer @@ -17,10 +17,12 @@ 'plugin ' '(https://thl-cmk.hopto.org/gitlab/checkmk/vendor-independent/bgp_peer)\n', 'download_url': 'https://thl-cmk.hopto.org/gitlab/checkmk/cisco/cisco_bgp_peer', - 'files': {'agent_based': ['cisco_bgp_peer.py', 'inv_cisco_bgp_peer.py']}, + 'files': {'cmk_addons_plugins': ['bgp_peer/agent_based/cisco_bgp_peer.py', + 'bgp_peer/agent_based/inv_cisco_bgp_peer.py', + 'bgp_peer/checkman/cisco_bgp_peer']}, 'name': 'cisco_bgp_peer', 'title': 'Cisco BGP Peer', - 'version': '1.0.2-20241220', - 'version.min_required': '2.0.0b1', + 'version': '1.0.3-20250324', + 'version.min_required': '2.3.0b1', 'version.packaged': 'cmk-mkp-tool 0.2.0', - 'version.usable_until': '2.4.0b1'} + 'version.usable_until': '2.5.0b1'}