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)