mirror of
https://github.com/osrg/gobgp.git
synced 2024-05-11 05:55:10 +00:00
server: move ProcessMessage to fsm from peer
Signed-off-by: FUJITA Tomonori <[email protected]>
This commit is contained in:
@@ -40,6 +40,7 @@ type fsmMsg struct {
|
||||
MsgType fsmMsgType
|
||||
MsgSrc string
|
||||
MsgData interface{}
|
||||
PathList []*table.Path
|
||||
}
|
||||
|
||||
const (
|
||||
@@ -503,6 +504,10 @@ func (h *FSMHandler) recvMessageWithError() error {
|
||||
"error": err,
|
||||
}).Warn("malformed BGP update message")
|
||||
fmsg.MsgData = err
|
||||
} else {
|
||||
// FIXME: we should use the original message for bmp/mrt
|
||||
table.UpdatePathAttrs4ByteAs(body)
|
||||
fmsg.PathList = table.ProcessMessage(m, h.fsm.peerInfo)
|
||||
}
|
||||
fallthrough
|
||||
case bgp.BGP_MSG_KEEPALIVE:
|
||||
|
||||
+4
-5
@@ -133,7 +133,8 @@ func open2Cap(open *bgp.BGPOpen, n *config.Neighbor) (map[bgp.BGPCapabilityCode]
|
||||
return capMap, rfMap
|
||||
}
|
||||
|
||||
func (peer *Peer) handleBGPmessage(m *bgp.BGPMessage) ([]*table.Path, bool, []*bgp.BGPMessage) {
|
||||
func (peer *Peer) handleBGPmessage(e *fsmMsg) ([]*table.Path, bool, []*bgp.BGPMessage) {
|
||||
m := e.MsgData.(*bgp.BGPMessage)
|
||||
bgpMsgList := []*bgp.BGPMessage{}
|
||||
pathList := []*table.Path{}
|
||||
log.WithFields(log.Fields{
|
||||
@@ -193,10 +194,8 @@ func (peer *Peer) handleBGPmessage(m *bgp.BGPMessage) ([]*table.Path, bool, []*b
|
||||
case bgp.BGP_MSG_UPDATE:
|
||||
update = true
|
||||
peer.conf.Timers.TimersState.UpdateRecvTime = time.Now().Unix()
|
||||
body := m.Body.(*bgp.BGPUpdate)
|
||||
table.UpdatePathAttrs4ByteAs(body)
|
||||
pathList = table.ProcessMessage(m, peer.fsm.peerInfo)
|
||||
if len(pathList) > 0 {
|
||||
if len(e.PathList) > 0 {
|
||||
pathList = e.PathList
|
||||
peer.staleAccepted = true
|
||||
peer.ApplyPolicy(table.POLICY_DIRECTION_IN, pathList)
|
||||
peer.adjRib.UpdateIn(pathList)
|
||||
|
||||
+1
-1
@@ -779,7 +779,7 @@ func (server *BgpServer) handleFSMMessage(peer *Peer, e *fsmMsg, incoming chan *
|
||||
case *bgp.MessageError:
|
||||
msgs = append(msgs, newSenderMsg(peer, []*bgp.BGPMessage{bgp.NewBGPNotificationMessage(m.TypeCode, m.SubTypeCode, m.Data)}))
|
||||
case *bgp.BGPMessage:
|
||||
pathList, update, msgList := peer.handleBGPmessage(m)
|
||||
pathList, update, msgList := peer.handleBGPmessage(e)
|
||||
if len(msgList) > 0 {
|
||||
msgs = append(msgs, newSenderMsg(peer, msgList))
|
||||
break
|
||||
|
||||
Reference in New Issue
Block a user