From c4330572f7f80cd5c2ce731803b719a4498807b1 Mon Sep 17 00:00:00 2001
From: "th.l" <thl-cmk@outlook.com>
Date: Sun, 30 Mar 2025 17:07:43 +0200
Subject: [PATCH] modified for check APIv2

---
 README.md                                     |   2 +-
 mkp/cisco_bgp_peer-1.0.3-20250324.mkp         | Bin 0 -> 5904 bytes
 .../bgp_peer}/agent_based/cisco_bgp_peer.py   |  67 +++++++++---------
 .../agent_based/inv_cisco_bgp_peer.py         |  20 +++---
 .../bgp_peer/checkman/cisco_bgp_peer          |  39 ++++++++++
 source/packages/cisco_bgp_peer                |  10 +--
 6 files changed, 91 insertions(+), 47 deletions(-)
 create mode 100644 mkp/cisco_bgp_peer-1.0.3-20250324.mkp
 rename source/{ => cmk_addons_plugins/bgp_peer}/agent_based/cisco_bgp_peer.py (91%)
 rename source/{ => cmk_addons_plugins/bgp_peer}/agent_based/inv_cisco_bgp_peer.py (93%)
 create mode 100644 source/cmk_addons_plugins/bgp_peer/checkman/cisco_bgp_peer

diff --git a/README.md b/README.md
index 48a8679..6d9a5d3 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
GIT binary patch
literal 5904
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
U{~!FYKZn9Z{u+~jDS(0bA2cVXD*ylh

literal 0
HcmV?d00001

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 a39204b..9e9d735 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 c2db485..982ea79 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 0000000..b54de43
--- /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 16c0651..7f3969b 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'}
-- 
GitLab