diff --git a/agent_based/cisco_bgp_peer.py b/agent_based/cisco_bgp_peer.py index 7aeb6768ff1383f39fe690bd2e4b0a07aba1cb4d..9f1a4ff240bedcf137df66207bc768321d932792 100644 --- a/agent_based/cisco_bgp_peer.py +++ b/agent_based/cisco_bgp_peer.py @@ -51,8 +51,10 @@ # 2022.04.22: moved inventory plugin to inv_cisco_bgp_peer.py # 2022-04-29: added info if device is admin prefix limit capable (device_admin_limit) # 2022-04-30: code cleanup/streamlining +# 2022-05-09: added item to BgpPeer class, this is used in the discovery function # +import copy from typing import List, Dict, Optional, Tuple from dataclasses import dataclass @@ -95,7 +97,6 @@ class CiscoPrefixes: def parse_cisco_bgp_peer(string_table: List[StringTable]) -> Dict[str, BgpPeer]: cbgpPeer2Entry, cbgpPeer2AddrFamily = string_table - peer_table = {} peer_prefixes = {} # create dictionary by peer address and list of entries per address family for entry in cbgpPeer2AddrFamily: @@ -140,7 +141,8 @@ def parse_cisco_bgp_peer(string_table: List[StringTable]) -> Dict[str, BgpPeer]: if prefixes: for address_family in prefixes: item = f'{remote_address} {address_family.address_family}' - peer_table[item] = bgp_peer[remote_address] + temp_bgp_peer = copy.deepcopy(bgp_peer) + peer_table[item] = temp_bgp_peer[remote_address] peer_table[item].accepted_prefixes = address_family.accepted_prefixes peer_table[item].prefix_admin_limit = address_family.prefix_admin_limit peer_table[item].prefix_clear_threshold = address_family.prefix_clear_threshold @@ -148,6 +150,7 @@ def parse_cisco_bgp_peer(string_table: List[StringTable]) -> Dict[str, BgpPeer]: peer_table[item].device_admin_limit = True peer_table[item].metric_rate += address_family.metric_count peer_table[item].metric_rate += address_family.metric_rate + peer_table[item].item['address_family'] = address_family.address_family else: peer_table.update(bgp_peer) @@ -211,13 +214,20 @@ def parse_cisco_bgp_peer_3(string_table: StringByteTable) -> Optional[Dict[str, peer_table = {} for entry in string_table: if entry[0] == '1': # IPv4 address - entry[1] = '.'.join(f'{m}' for m in entry[1]) + remote_address = '.'.join(f'{m}' for m in entry[1]) + entry[1] = remote_address + routing_instance = None if entry[2] != 'default': - entry[1] += f' vrf {entry[2]}' + routing_instance = f'vrf {entry[2]}' + # entry[1] += f' {routing_instance}' entry.pop(2) # remove vrf name entry.pop(0) # remove remote address type bgp_peer = bgp_get_peer_entry(entry) if bgp_peer: + bgp_peer[remote_address].item['routing_instance'] = routing_instance + if routing_instance: + item = f'{remote_address} {routing_instance}' + bgp_peer = {item: bgp_peer[remote_address]} peer_table.update(bgp_peer) return peer_table diff --git a/cisco_bgp_peer.mkp b/cisco_bgp_peer.mkp index 8a39e699cfcc9f11d07a6c6e047ae4fd862c2f85..8916e2b43f32609f8e5bac57a4c781b9931752ac 100644 Binary files a/cisco_bgp_peer.mkp and b/cisco_bgp_peer.mkp differ diff --git a/packages/cisco_bgp_peer b/packages/cisco_bgp_peer index f44dd4f6aa0224d450c26a432ec12dfed60f956c..a7901ecff7dd319a305a287d0a9cd60dfd667d8d 100644 --- a/packages/cisco_bgp_peer +++ b/packages/cisco_bgp_peer @@ -26,7 +26,7 @@ 'name': 'cisco_bgp_peer', 'num_files': 3, 'title': 'Cisco BGP Peer', - 'version': '20220422.v.0.6', + 'version': '20220509.v.0.7', 'version.min_required': '2.0.0', 'version.packaged': '2021.09.20', 'version.usable_until': None} \ No newline at end of file