code: def handle_msg(self, msg):
          
          if msg.type == BGP_MSG_KEEPALIVE:
              # If we receive a Keep Alive message in open_confirm state, we
              # transition to established state.
              if self.state.bgp_state == const.BGP_FSM_OPEN_CONFIRM:
                  self.state.bgp_state = const.BGP_FSM_ESTABLISHED
                  self._enqueue_init_updates()
  
          elif msg.type == BGP_MSG_UPDATE:
              assert self.state.bgp_state == const.BGP_FSM_ESTABLISHED
              # Will try to process this UDPATE message further
              self._handle_update_msg(msg)
  
          elif msg.type == BGP_MSG_ROUTE_REFRESH:
              # If its route-refresh message
              assert self.state.bgp_state == const.BGP_FSM_ESTABLISHED
              self._handle_route_refresh_msg(msg)
  
          else:
              # Open/Notification messages are currently handled by protocol and
              # nothing is done inside peer, so should not see them here.
              raise ValueError('Peer does not support handling of %s'
                               ' message during %s state' %
                               (msg, self.state.bgp_state))
docs: BGP message handler.
  
          BGP message handling is shared between protocol instance and peer. Peer
          only handles limited messages under suitable state. Here we handle
          KEEPALIVE, UPDATE and ROUTE_REFRESH messages. UPDATE and ROUTE_REFRESH
          messages are handled only after session is established.