diff --git a/README.md b/README.md index ab183306bc1820957fd3056e98c2f000388905bb..d9336c24d36bb5192f79a0aec3d257355169d20e 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,4 @@ +[PACKAGE]: ../../raw/master/mkp/ospfv3-0.4.0-20231221.mkp "ospfv3-0.4.0-20231221.mkp" # OSPFv3 Monitors status of OSPFv3 enabled devices diff --git a/agent_based/ospfv3_area.py b/agent_based/ospfv3_area.py index 2117ba01aeb2ddd741105143a01bd1190d536357..5a42acda6d2daa051f2761812ad55ba63938f3bf 100644 --- a/agent_based/ospfv3_area.py +++ b/agent_based/ospfv3_area.py @@ -102,26 +102,26 @@ class OspfV3Area: def parse_ospfv3_area(string_table: StringTable) -> Dict[str, OspfV3Area]: areas = {} for area in string_table: - AreaId, AreaImportAsExtern, AreaSpfRuns, AreaBdrRtrCount, AreaAsBdrRtrCount, AreaScopeLsaCount, \ - AreaScopeLsaCksumSum, AreaSummary, AreaStubMetric, AreaNssaTranslatorRole, AreaNssaTranslatorState, \ - AreaNssaTranslatorStabInterval, AreaNssaTranslatorEvents, AreaStubMetricType, AreaTEEnabled, = area - - areas[AreaId] = OspfV3Area( - AreaImportAsExtern=ospf_area_impotasextern(AreaImportAsExtern), - AreaSummary=ospf_area_summary(AreaSummary), - AreaSpfRuns=int(AreaSpfRuns), - AreaBdrRtrCount=int(AreaBdrRtrCount), - AreaAsBdrRtrCount=int(AreaAsBdrRtrCount), - AreaScopeLsaCount=int(AreaScopeLsaCount), - AreaScopeLsaCksumSum=int(AreaScopeLsaCksumSum), - AreaStubMetric=int(AreaStubMetric), - AreaNssaTranslatorRole=ospf_area_translatorrole(AreaNssaTranslatorRole), - AreaNssaTranslatorState=ospf_area_translatorrolestate(AreaNssaTranslatorState), - AreaNssaTranslatorStabInterval=int(AreaNssaTranslatorStabInterval), - AreaNssaTranslatorEvents=int(AreaNssaTranslatorEvents), - AreaStubMetricType=ospf_area_submetrictype(AreaStubMetricType), - AreaTEEnabled=ospf_area_teeenabled(AreaTEEnabled), - AreaType=get_area_type(AreaImportAsExtern, AreaSummary) + area_id, import_as_extern, spf_runs, bdr_rtr_count, as_bdr_rtr_count, scope_lsa_count, scope_lsa_cksum_sum, \ + summary, stub_metric, nssa_translator_role, nssa_translator_state, nssa_translator_stab_interval, \ + nssa_translator_events, stub_metric_type, te_enabled, = area + + areas[area_id] = OspfV3Area( + AreaImportAsExtern=ospf_area_impotasextern(import_as_extern), + AreaSummary=ospf_area_summary(summary), + AreaSpfRuns=int(spf_runs), + AreaBdrRtrCount=int(bdr_rtr_count), + AreaAsBdrRtrCount=int(as_bdr_rtr_count), + AreaScopeLsaCount=int(scope_lsa_count), + AreaScopeLsaCksumSum=int(scope_lsa_cksum_sum), + AreaStubMetric=int(stub_metric), + AreaNssaTranslatorRole=ospf_area_translatorrole(nssa_translator_role), + AreaNssaTranslatorState=ospf_area_translatorrolestate(nssa_translator_state), + AreaNssaTranslatorStabInterval=int(nssa_translator_stab_interval), + AreaNssaTranslatorEvents=int(nssa_translator_events), + AreaStubMetricType=ospf_area_submetrictype(stub_metric_type), + AreaTEEnabled=ospf_area_teeenabled(te_enabled), + AreaType=get_area_type(import_as_extern, summary) ) return areas diff --git a/agent_based/ospfv3_general.py b/agent_based/ospfv3_general.py index 7e790d807d824475ce53e0ef9c66f3bc5ad9a68a..c329191e8f192a18c10afa0d3efc12ea0be173b9 100644 --- a/agent_based/ospfv3_general.py +++ b/agent_based/ospfv3_general.py @@ -89,26 +89,26 @@ class OspfV3General: def parse_ospfv3_general(string_table: StringTable) -> Optional[OspfV3General]: try: - OID_END, RouterId, AdminStatus, VersionNumber, AreaBdrRtrStatus, ASBdrRtrStatus, AsScopeLsaCount, \ - AsScopeLsaCksumSum, OriginateNewLsas, RxNewLsas, ExtLsaCount, ExtAreaLsdbLimit, \ - ReferenceBandwidth, StubRouterSupport, StubRouterAdvertisement = string_table[0] + oid_end, router_id, admin_status, version_number, area_bdr_rtr_status, as_bdr_rtr_status, as_scope_lsa_count, \ + as_scope_lsa_cksum_sum, originate_new_lsas, rx_new_lsas, ext_lsa_count, ext_area_lsdb_limit, \ + reference_bandwidth, stub_router_support, stub_router_advertisement = string_table[0] except (ValueError, IndexError): return return OspfV3General( - RouterId=render_ipv4_neighbor_id(RouterId), - AdminStatus=ospf_admin_status(AdminStatus), - VersionNumber=int(VersionNumber), - AreaBdrRtrStatus=ospf_abr_asbr_status(AreaBdrRtrStatus), - ASBdrRtrStatus=ospf_abr_asbr_status(ASBdrRtrStatus), - AsScopeLsaCount=int(AsScopeLsaCount), - AsScopeLsaCksumSum=int(AsScopeLsaCksumSum), - RxNewLsas=int(RxNewLsas), - ExtLsaCount=int(ExtLsaCount), - ExtAreaLsdbLimit=int(ExtAreaLsdbLimit), - ReferenceBandwidth=int(ReferenceBandwidth), - StubRouterSupport=ospf_stub_router_support(StubRouterSupport), - StubRouterAdvertisement=ospf_stub_router_advertisement(StubRouterAdvertisement), + RouterId=render_ipv4_neighbor_id(router_id), + AdminStatus=ospf_admin_status(admin_status), + VersionNumber=int(version_number), + AreaBdrRtrStatus=ospf_abr_asbr_status(area_bdr_rtr_status), + ASBdrRtrStatus=ospf_abr_asbr_status(as_bdr_rtr_status), + AsScopeLsaCount=int(as_scope_lsa_count), + AsScopeLsaCksumSum=int(as_scope_lsa_cksum_sum), + RxNewLsas=int(rx_new_lsas), + ExtLsaCount=int(ext_lsa_count), + ExtAreaLsdbLimit=int(ext_area_lsdb_limit), + ReferenceBandwidth=int(reference_bandwidth), + StubRouterSupport=ospf_stub_router_support(stub_router_support), + StubRouterAdvertisement=ospf_stub_router_advertisement(stub_router_advertisement), ) diff --git a/agent_based/ospfv3_interface.py b/agent_based/ospfv3_interface.py index 79b5d3801d09ea0aa1f7d0c045b1cdaeda3d0102..101ddc6ea9c331b67710f12c4123397aaa562428 100644 --- a/agent_based/ospfv3_interface.py +++ b/agent_based/ospfv3_interface.py @@ -11,6 +11,8 @@ # # 2021-09-17: rewritten for CMK 2.0 # 2021-10-02: added WATO options +# 2023-12-21: replaced ifDescr by ifName +# fixed handling if non-matching ifIndex # # sample snmpwalk # @@ -140,34 +142,32 @@ def parse_ospfv3_interface(string_table: List[StringTable]) -> Optional[Dict[str ospf_interfaces = {} interfaceinfo, interfaces = string_table + interfaces_by_index = {if_index: if_name for if_index, if_name in interfaces} + for ospf_interface in interfaceinfo: - OID_END, IfAreaId, IfType, IfAdminStatus, IfRtrPriority, IfHelloInterval, IfRtrDeadInterval, IfPollInterval, \ - IfState, IfDesignatedRouter, IfBackupDesignatedRouter, IfEvents, IfMetricValue, IfLinkScopeLsaCount, \ - IfLinkLsaCksumSum = ospf_interface + oid_end, area_id, if_type, admin_state, rtr_priority, hello_interval, rtr_dead_interval, poll_interval, \ + if_state, designated_router, backup_designated_router, if_events, metric_value, link_scope_lsa_count, \ + link_lsa_cksum_sum = ospf_interface - ospfIfIndex, ospfIfInstId = OID_END.split('.') + ospf_if_index, ospf_if_inst_id = oid_end.split('.') - LocalInterface = '' - for interface in interfaces: - ifIndex, ifName = interface - if ifIndex == ospfIfIndex: - LocalInterface = get_short_if_name(ifName) + local_interface = get_short_if_name(interfaces_by_index.get(ospf_if_index, ospf_if_index)) - ospf_interfaces[LocalInterface] = OspfV3Interface( - IfAreaId=int(IfAreaId), - IfType=ospf_if_type(IfType), - IfAdminStatus=ospf_if_admin_status(IfAdminStatus), - IfRtrPriority=int(IfRtrPriority), - IfHelloInterval=int(IfHelloInterval), - IfRtrDeadInterval=int(IfRtrDeadInterval), - IfPollInterval=int(IfPollInterval), - IfState=ospf_if_state(IfState), - IfDesignatedRouter=render_ipv4_neighbor_id(IfDesignatedRouter), - IfBackupDesignatedRouter=render_ipv4_neighbor_id(IfBackupDesignatedRouter), - IfEvents=int(IfEvents), - IfMetricValue=int(IfMetricValue), - IfLinkScopeLsaCount=int(IfLinkScopeLsaCount), - IfLinkLsaCksumSum=int(IfLinkLsaCksumSum), + ospf_interfaces[local_interface] = OspfV3Interface( + IfAreaId=int(area_id), + IfType=ospf_if_type(if_type), + IfAdminStatus=ospf_if_admin_status(admin_state), + IfRtrPriority=int(rtr_priority), + IfHelloInterval=int(hello_interval), + IfRtrDeadInterval=int(rtr_dead_interval), + IfPollInterval=int(poll_interval), + IfState=ospf_if_state(if_state), + IfDesignatedRouter=render_ipv4_neighbor_id(designated_router), + IfBackupDesignatedRouter=render_ipv4_neighbor_id(backup_designated_router), + IfEvents=int(if_events), + IfMetricValue=int(metric_value), + IfLinkScopeLsaCount=int(link_scope_lsa_count), + IfLinkLsaCksumSum=int(link_lsa_cksum_sum), ) return ospf_interfaces @@ -235,10 +235,10 @@ register.snmp_section( ] ), SNMPTree( - base='.1.3.6.1.2.1.2.2.1', # + base='.1.3.6.1.2.1.31.1.1.1', # oids=[ - '1', # ifIndex - '2', # ifDescr + OIDEnd(), # ifIndex + '1', # ifName ] ), ], diff --git a/agent_based/ospfv3_neighbor.py b/agent_based/ospfv3_neighbor.py index 2f7c9b786e79ec468aa04de2e3f7626a3379a3ae..5aec8d910915abdf658bf5bb55a713db8533099c 100644 --- a/agent_based/ospfv3_neighbor.py +++ b/agent_based/ospfv3_neighbor.py @@ -11,6 +11,8 @@ # # 2021-09-17: rewritten for CMK 2.0 # 2021-10-02: added WATO options +# 2023-12-21: replaced ifDescr by ifName +# fixed handling if non-matching ifIndex # # .1.3.6.1.2.1.191.1.9.1.4.1.0.50529054 = INTEGER: 2 # .1.3.6.1.2.1.191.1.9.1.5.1.0.50529054 = Hex-STRING: FE 80 00 00 00 00 00 00 01 92 01 68 00 00 00 03 @@ -118,31 +120,29 @@ def parse_ospfv3_neighbor(string_table: List[StringTable]) -> Dict[str, OspfV3Ne neighbors = {} neighborinfo, interfaces = string_table + interfaces_by_index = {if_index: if_name for if_index, if_name in interfaces} + for neighbor in neighborinfo: - OID_END, nbrAddressType, nbrAddress, nbrOptions, nbrPriority, nbrState, nbrEvents, nbrLsRetransQLen, \ - nbrHelloSuppressed, nbrRestartHelperStatus, nbrRestartHelperAge, nbrRestartHelperExitReason = neighbor - - if nbrAddressType == '2': # IPv6 address - nbrAddress = render_ipv6_address(nbrAddress) - nbrIfIndex, nbrIfInstId, nbrRtrId = OID_END.split('.') - - nbrLocalInterface = '' - for interface in interfaces: - ifIndex, ifName = interface - if ifIndex == nbrIfIndex: - nbrLocalInterface = get_short_if_name(ifName) - - neighbors[f'{nbrAddress} on {nbrLocalInterface}'] = OspfV3Neighbor( - nbrRtrId=render_ipv4_neighbor_id(nbrRtrId), - nbrOptions=nbrOptions, - nbrPriority=int(nbrPriority), - nbrState=int(nbrState), - nbrEvents=int(nbrEvents), - nbrLsRetransQLen=int(nbrLsRetransQLen), - nbrHelloSuppressed=ospf_nbr_hellosuppressed(nbrHelloSuppressed), - nbrRestartHelperStatus=ospf_nbr_helperstatus(nbrRestartHelperStatus), - nbrRestartHelperAge=int(nbrRestartHelperAge), - nbrRestartHelperExitReason=ospf_nbr_helperexitreason(nbrRestartHelperExitReason), + oid_end, address_type, address, options, priority, state, events, ls_retrans_q_len, hello_suppressed, \ + restart_helper_status, restart_helper_age, restart_helper_exit_reason = neighbor + + if address_type == '2': # IPv6 address + address = render_ipv6_address(address) + nbr_if_index, nbr_if_inst_id, nbr_rtr_id = oid_end.split('.') + + nbr_local_interface = get_short_if_name(interfaces_by_index.get(nbr_if_index, nbr_if_index)) + + neighbors[f'{address} on {nbr_local_interface}'] = OspfV3Neighbor( + nbrRtrId=render_ipv4_neighbor_id(nbr_rtr_id), + nbrOptions=options, + nbrPriority=int(priority), + nbrState=int(state), + nbrEvents=int(events), + nbrLsRetransQLen=int(ls_retrans_q_len), + nbrHelloSuppressed=ospf_nbr_hellosuppressed(hello_suppressed), + nbrRestartHelperStatus=ospf_nbr_helperstatus(restart_helper_status), + nbrRestartHelperAge=int(restart_helper_age), + nbrRestartHelperExitReason=ospf_nbr_helperexitreason(restart_helper_exit_reason), ) if neighbors: return neighbors @@ -224,10 +224,10 @@ register.snmp_section( ] ), SNMPTree( - base='.1.3.6.1.2.1.2.2.1', # + base='.1.3.6.1.2.1.31.1.1.1', # oids=[ - '1', # ifIndex - '2', # ifDescr + OIDEnd(), # ifIndex + '1', # ifName ] ), ], diff --git a/agent_based/ospfv3_virtuallink.py b/agent_based/ospfv3_virtuallink.py index ae87d874cd185b60344e550faa8f4afb907abb47..f4335a75cdd14dcdbe7fe2af9a42c65e98887df4 100644 --- a/agent_based/ospfv3_virtuallink.py +++ b/agent_based/ospfv3_virtuallink.py @@ -11,6 +11,8 @@ # # 2021-09-17: rewritten for CMK 2.0 # 2021-10-02: added WATO options +# 2023-12-21: replaced ifDescr by ifName +# fixed handling if non-matching ifIndex # # .1.3.6.1.2.1.191.1.11.1.3.3.50529054 = INTEGER: 0 # .1.3.6.1.2.1.191.1.11.1.4.3.50529054 = Gauge32: 0 @@ -117,35 +119,32 @@ def parse_ospfv3_virtuallink(string_table: List[StringTable]) -> Dict[str, OspfV virtual_links = {} virtual_links_info, interfaces = string_table + interfaces_by_index = {if_index: if_name for if_index, if_name in interfaces} + for virtual_link in virtual_links_info: - OID_END, VirtNbrIfIndex, VirtNbrIfInstId, VirtNbrAddressType, VirtNbrAddress, VirtNbrOptions, VirtNbrState, \ - VirtNbrEvents, VirtNbrLsRetransQLen, VirtNbrHelloSuppressed, VirtNbrIfId, VirtNbrRestartHelperStatus, \ - VirtNbrRestartHelperAge, VirtNbrRestartHelperExitReason, = virtual_link - - if VirtNbrAddressType == '2': # IPv6 address - VirtNbrAddress = render_ipv6_address(VirtNbrAddress) - VirtNbrArea, VirtNbrId = OID_END.split('.') - - nbrLocalInterface = '' - for interface in interfaces: - ifIndex, ifName = interface - if ifIndex == VirtNbrIfIndex: - nbrLocalInterface = get_short_if_name(ifName) - - # virtual_links[f'{VirtNbrAddress} on {nbrLocalInterface}']= OspfV3VirtualLink( - virtual_links[VirtNbrAddress] = OspfV3VirtualLink( - VirtNbrId=render_ipv4_neighbor_id(VirtNbrId), - VirtNbrArea=int(VirtNbrArea), - VirtNbrOptions=VirtNbrOptions, - VirtNbrState=int(VirtNbrState), - VirtNbrEvents=int(VirtNbrEvents), - VirtNbrLsRetransQLen=int(VirtNbrLsRetransQLen), - VirtNbrHelloSuppressed=ospf_nbr_hellosuppressed(VirtNbrHelloSuppressed), - VirtNbrRestartHelperStatus=ospf_nbr_helperstatus(VirtNbrRestartHelperStatus), - VirtNbrRestartHelperAge=int(VirtNbrRestartHelperAge), - VirtNbrRestartHelperExitReason=ospf_nbr_helperexitreason(VirtNbrRestartHelperExitReason), - VitrNbrLocalInterface=nbrLocalInterface, + oid_end, if_index, if_inst_id, address_type, address, options, state, events, ls_retrans_q_len, \ + hello_suppressed, if_id, restart_helper_status, restart_helper_age, \ + restart_helper_exit_reason, = virtual_link + + if address_type == '2': # IPv6 address + address = render_ipv6_address(address) + area, nbr_id = oid_end.split('.') + + nbr_local_interface = get_short_if_name(interfaces_by_index.get(if_index, if_index)) + + virtual_links[address] = OspfV3VirtualLink( + VirtNbrId=render_ipv4_neighbor_id(nbr_id), + VirtNbrArea=int(area), + VirtNbrOptions=options, + VirtNbrState=int(state), + VirtNbrEvents=int(events), + VirtNbrLsRetransQLen=int(ls_retrans_q_len), + VirtNbrHelloSuppressed=ospf_nbr_hellosuppressed(hello_suppressed), + VirtNbrRestartHelperStatus=ospf_nbr_helperstatus(restart_helper_status), + VirtNbrRestartHelperAge=int(restart_helper_age), + VirtNbrRestartHelperExitReason=ospf_nbr_helperexitreason(restart_helper_exit_reason), + VitrNbrLocalInterface=nbr_local_interface, ) if virtual_links: return virtual_links @@ -229,10 +228,10 @@ register.snmp_section( ] ), SNMPTree( - base='.1.3.6.1.2.1.2.2.1', # + base='.1.3.6.1.2.1.31.1.1.1', # oids=[ - '1', # ifIndex - '2', # ifDescr + OIDEnd(), # ifIndex + '1', # ifName ] ), ], diff --git a/mkp/ospfv3-0.4.0-20231221.mkp b/mkp/ospfv3-0.4.0-20231221.mkp new file mode 100644 index 0000000000000000000000000000000000000000..1367d5db1f99f564f170a7d0de7d422980dc1b08 Binary files /dev/null and b/mkp/ospfv3-0.4.0-20231221.mkp differ diff --git a/packages/ospfv3 b/packages/ospfv3 index 8301b3111dcd1de9cea6d43e2dff38a3d92e7116..45f218f6be50dbafa6371e722da160473ff08fea 100644 --- a/packages/ospfv3 +++ b/packages/ospfv3 @@ -17,7 +17,7 @@ 'gui': ['metrics/ospfv3.py', 'wato/ospfv3.py']}, 'name': 'ospfv3', 'title': 'Collection of OSPFv3 checks', - 'version': '0.4.0-20230603', + 'version': '0.4.0-20231221', 'version.min_required': '2.1.0b1', - 'version.packaged': '2.1.0p21', - 'version.usable_until': None} \ No newline at end of file + 'version.packaged': '2.2.0p14', + 'version.usable_until': None}