Collection of CheckMK checks (see https://checkmk.com/). All checks and plugins are provided as is. Absolutely no warranty. Send any comments to thl-cmk[at]outlook[dot]com

Skip to content
Snippets Groups Projects
Commit cd28ae90 authored by thl-cmk's avatar thl-cmk :flag_na:
Browse files

update project

parent ca942560
No related branches found
No related tags found
No related merge requests found
......@@ -12,7 +12,9 @@
# Monitor status of Huawei BGP Peers (IPv4 and IPv6)
#
# 2020-07-20: added BGP prefix counter
# 2022-04-30: code cleanup/streamlining
#
# snmpwalk sample
# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.1.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 4
# .1.3.6.1.4.1.2011.5.25.177.1.1.2.1.2.0.2.1.2.16.32.32.9.200.0.2.0.1.0.0.0.0.31.100.0.7 = Gauge32: 16374
......@@ -55,7 +57,7 @@
# HUAWEI-BGP-VPN-MIB::hwBgpPeerEntry.11.0.ipv4.unicast.ipv4."79.200.120.2" = INTEGER: 2
from typing import List, Dict, Optional
from typing import List, Dict
from cmk.base.plugins.agent_based.agent_based_api.v1 import (
register,
......@@ -68,13 +70,13 @@ from cmk.base.plugins.agent_based.agent_based_api.v1.type_defs import (
)
from cmk.base.plugins.agent_based.utils.bgp_peer import (
bgp_get_peer,
bgp_get_ip_address_from_oid,
BgpPeer,
bgp_get_peer_entry,
)
def _huawei_get_adress_family(OID_END):
def _huawei_get_adress_family(afi, safi):
# HWBgpAfi ::= TEXTUAL-CONVENTION
# STATUS current
# DESCRIPTION
......@@ -101,15 +103,13 @@ def _huawei_get_adress_family(OID_END):
132: 'route-target',
}
OID_END = OID_END.split('.')
adress_family = HWBgpAfi.get(int(OID_END[1]), OID_END[1])
sub_family = HWBgpSafi.get(int(OID_END[2]), OID_END[2])
address_family = HWBgpAfi.get(int(afi), afi)
sub_family = HWBgpSafi.get(int(safi), safi)
return '%s %s' % (adress_family, sub_family)
return f'{address_family} {sub_family}'
def _huawei_bgp_PeerUnAvaiReason(st):
def _huawei_bgp_peer_unavail_reason(st):
reason = {
'1': 'Configuration lead peer down',
'2': 'Receive notification',
......@@ -127,43 +127,39 @@ def parse_huawei_bgp_peer(string_table: List[StringTable]) -> Dict[str, BgpPeer]
peer_table = {}
for entry in hwbgpPeer2Entry:
oid_end, hwBgpPeerRemoteAddr, hwBgpPeerState, hwBgpPeerFsmEstablishedCounter, hwBgpPeerFsmEstablishedTime, \
hwBgpPeerUnAvaiReason = entry
oid_end, remote_address, state, fsm_established_counter, fsm_established_time, unavail_reason = entry
bgp_peer = bgp_get_peer_entry([
hwBgpPeerRemoteAddr,
hwBgpPeerState,
remote_address,
state,
'2', # admin_state not admin_down
None, # in_updates
None, # out_updates
None, # in_messages
None, # out_messages
hwBgpPeerFsmEstablishedCounter,
hwBgpPeerFsmEstablishedTime,
fsm_established_counter,
fsm_established_time,
None, # in_update_elapsed_time
]
)
if bgp_peer:
adressfamily = _huawei_get_adress_family(oid_end)
remote_address = list(bgp_peer.keys())[0]
index = f'{remote_address} {adressfamily}'
bgp_peer[remote_address].peer_unavail_reason = int(hwBgpPeerUnAvaiReason)
bgp_peer[remote_address].peer_unavail_reason_str = _huawei_bgp_PeerUnAvaiReason(int(hwBgpPeerUnAvaiReason))
bgp_peer = {index: bgp_peer[remote_address]}
afi, safi = oid_end.split('.')[1:3]
adress_family = _huawei_get_adress_family(afi, safi)
item = f'{remote_address} {adress_family}'
bgp_peer[remote_address].peer_unavail_reason = int(unavail_reason)
bgp_peer[remote_address].peer_unavail_reason_str = _huawei_bgp_peer_unavail_reason(int(unavail_reason))
bgp_peer = {item: bgp_peer[remote_address]}
peer_table.update(bgp_peer)
# peer = {
# 'hwpeerunavireason': _huawei_bgp_PeerUnAvaiReason(hwBgpPeerUnAvaiReason),
# }
#
# add BGP route counter
for entry in hwBgpPeerRouteEntry:
oid_end, hwBgpPeerPrefixRcvCounter, hwBgpPeerPrefixActiveCounter, hwBgpPeerPrefixAdvCounter = entry
oid_end, prefix_rcv_counter, prefix_active_counter, prefix_adv_counter = entry
afi, safi = oid_end.split('.')[1:3]
counter = []
for key, value in [
('prefixrcvcounter', hwBgpPeerPrefixRcvCounter),
('prefixactivecounter', hwBgpPeerPrefixActiveCounter),
('prefixadvcounter', hwBgpPeerPrefixAdvCounter),
('prefixrcvcounter', prefix_rcv_counter),
('prefixactivecounter', prefix_active_counter),
('prefixadvcounter', prefix_adv_counter),
]:
try:
counter.append((key, int(value)))
......@@ -171,9 +167,9 @@ def parse_huawei_bgp_peer(string_table: List[StringTable]) -> Dict[str, BgpPeer]
pass
# adjust oid_end to match cisco oid_end
service = '%s %s' % (bgp_get_peer(f'{oid_end[6:]}.1.1'), _huawei_get_adress_family(oid_end))
if service in peer_table.keys():
peer_table[service].metric_count += counter
item = f'{bgp_get_ip_address_from_oid(f"{oid_end[6:]}.1.1")} {_huawei_get_adress_family(afi, safi)}'
if item in peer_table.keys():
peer_table[item].metric_count += counter
return peer_table
......@@ -187,7 +183,7 @@ register.snmp_section(
SNMPTree(
base='.1.3.6.1.4.1.2011.5.25.177.1.1.2.1', # HUAWEI-BGP-VPN-MIB::hwBgpPeerEntry
oids=[
OIDEnd(), # 0.ipv4/ipv6.adressFamily.ipv4/ipv6.RemotePeerIP
OIDEnd(), # 0.afi.safi.adresstype.length.RemotePeerIP
# '1', # hwBgpPeerNegotiatedVersion
# '2', # hwBgpPeerRemoteAs
'4', # hwBgpPeerRemoteAddr
......@@ -202,12 +198,23 @@ register.snmp_section(
SNMPTree(
base='.1.3.6.1.4.1.2011.5.25.177.1.1.3.1', # HUAWEI-BGP-VPN-MIB::hwBgpPeerRouteEntry
oids=[
OIDEnd(), # 0.ipv4/ipv6.adressFamily.ipv4/ipv6.RemotePeerIP
OIDEnd(), # 0.afi.safi.adresstype.length.RemotePeerIP
'1', # hwBgpPeerPrefixRcvCounter
'2', # hwBgpPeerPrefixActiveCounter
'3', # hwBgpPeerPrefixAdvCounter
]
),
# ToDo: sample need to add counters :-(
# SNMPTree(
# base='.1.3.6.1.4.1.2011.5.25.177.1.1.4.1', # HUAWEI-BGP-VPN-MIB::hwBgpPeerMessageEntry
# oids=[
# OIDEnd(), # 0.afi.safi.adresstype.length.RemotePeerIP(?)
# '1', # hwBgpPeerInTotalMsgCounter
# '2', # hwBgpPeerOutTotalMsgCounter
# '4', # hwBgpPeerInUpdateMsgCounter
# '9', # hwBgpPeerOutUpdateMsgCounter
# ]
# ),
],
detect=startswith('.1.3.6.1.2.1.1.2.0', '.1.3.6.1.4.1.2011')
)
No preview for this file type
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment