diff --git a/src/sonic-bgpcfgd/bgpmon/bgpmon.py b/src/sonic-bgpcfgd/bgpmon/bgpmon.py index 2b50bd6cf58d..d6c2277684bd 100755 --- a/src/sonic-bgpcfgd/bgpmon/bgpmon.py +++ b/src/sonic-bgpcfgd/bgpmon/bgpmon.py @@ -6,7 +6,8 @@ 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 @@ def update_new_peer_states(self, peer_dict): 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 @@ def update_neigh_states(self): 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)