From af47583c798e2c9095ea289ddd5a36fa2dbaf4cd Mon Sep 17 00:00:00 2001 From: mssonicbld <79238446+mssonicbld@users.noreply.github.com> Date: Thu, 8 Jun 2023 05:34:02 +0800 Subject: [PATCH] Added change to add 'peerType' as element in NEIGH_STATE_TABLE. (#15265) (#15381) --- src/sonic-bgpcfgd/bgpmon/bgpmon.py | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/sonic-bgpcfgd/bgpmon/bgpmon.py b/src/sonic-bgpcfgd/bgpmon/bgpmon.py index 2b50bd6cf5..d6c2277684 100755 --- a/src/sonic-bgpcfgd/bgpmon/bgpmon.py +++ b/src/sonic-bgpcfgd/bgpmon/bgpmon.py @@ -6,7 +6,8 @@ Description: bgpmon.py -- populating bgp related information in stateDB. Initial creation of this daemon is to assist SNMP agent in obtaining the BGP related information for its MIB support. The MIB that this daemon is - assisting is for the CiscoBgp4MIB (Neighbor state only). If there are other + assisting is for the CiscoBgp4MIB (Neighbor state only). Also for chassis use-case + it identify if the given BGP neighbors as i-BGP vs e-BGP. If there are other BGP related items that needs to be updated in a periodic manner in the future, then more can be added into this process. @@ -69,7 +70,9 @@ class BgpStateGet: peer_l = peer_dict["peers"].keys() self.new_peer_l.update(peer_l) for peer in peer_l: - self.new_peer_state[peer] = peer_dict["peers"][peer]["state"] + self.new_peer_state[peer] = (peer_dict["peers"][peer]["state"], + peer_dict["peers"][peer]["remoteAs"], + peer_dict["peers"][peer]["localAs"]) # Get a new snapshot of BGP neighbors and store them in the "new" location def get_all_neigh_states(self): @@ -119,17 +122,19 @@ class BgpStateGet: key = "NEIGH_STATE_TABLE|%s" % peer if peer in self.peer_l: # only update the entry if state changed - if self.peer_state[peer] != self.new_peer_state[peer]: + if self.peer_state[peer] != self.new_peer_state[peer][0]: # state changed. Update state DB for this entry - state = self.new_peer_state[peer] - data[key] = {'state':state} + state = self.new_peer_state[peer][0] + peerType = "i-BGP" if self.new_peer_state[peer][1] == self.new_peer_state[peer][2] else "e-BGP" + data[key] = {'state':state, 'peerType':peerType} self.peer_state[peer] = state # remove this neighbor from old set since it is accounted for self.peer_l.remove(peer) else: # New neighbor found case. Add to dictionary and state DB - state = self.new_peer_state[peer] - data[key] = {'state':state} + state = self.new_peer_state[peer][0] + peerType = "i-BGP" if self.new_peer_state[peer][1] == self.new_peer_state[peer][2] else "e-BGP" + data[key] = {'state':state, 'peerType':peerType} self.peer_state[peer] = state if len(data) > PIPE_BATCH_MAX_COUNT: self.flush_pipe(data)