diff --git a/protocols/bgp/server/update_sender.go b/protocols/bgp/server/update_sender.go index a5d05887f026cf336e3792e405fa7c456eae6e74..dc0c44354c6afa7df979aa8c54d254dff6808351 100644 --- a/protocols/bgp/server/update_sender.go +++ b/protocols/bgp/server/update_sender.go @@ -15,18 +15,20 @@ import ( // UpdateSender converts table changes into BGP update messages type UpdateSender struct { routingtable.ClientManager - fsm *FSM + fsm *FSM + iBGP bool } func newUpdateSender(fsm *FSM) *UpdateSender { return &UpdateSender{ - fsm: fsm, + fsm: fsm, + iBGP: fsm.localASN == fsm.remoteASN, } } // AddPath serializes a new path and sends out a BGP update message func (u *UpdateSender) AddPath(pfx net.Prefix, p *route.Path) error { - asPathPA, err := packet.ParseASPathStr(strings.TrimRight(fmt.Sprintf("%d %s", u.fsm.localASN, p.BGPPath.ASPath), " ")) + asPathPA, err := packet.ParseASPathStr(asPathString(u.iBGP, u.fsm.localASN, p.BGPPath.ASPath)) if err != nil { return fmt.Errorf("Unable to parse AS path: %v", err) } @@ -74,3 +76,12 @@ func (u *UpdateSender) UpdateNewClient(client routingtable.RouteTableClient) err log.Warningf("BGP Update Sender: UpdateNewClient() not supported") return nil } + +func asPathString(iBGP bool, localASN uint16, asPath string) string { + ret := "" + if iBGP { + ret = ret + fmt.Sprintf("%d ", localASN) + } + ret = ret + asPath + return strings.TrimRight(ret, " ") +} diff --git a/protocols/bgp/server/update_sender_add_path.go b/protocols/bgp/server/update_sender_add_path.go index e7b46577c594c5b5f84e115981ac560777899d11..1cc0470579e45e78aa1ec456ea312e2851cd88e0 100644 --- a/protocols/bgp/server/update_sender_add_path.go +++ b/protocols/bgp/server/update_sender_add_path.go @@ -2,7 +2,6 @@ package server import ( "fmt" - "strings" log "github.com/sirupsen/logrus" @@ -15,18 +14,20 @@ import ( // UpdateSenderAddPath converts table changes into BGP update messages with add path type UpdateSenderAddPath struct { routingtable.ClientManager - fsm *FSM + fsm *FSM + iBGP bool } func newUpdateSenderAddPath(fsm *FSM) *UpdateSenderAddPath { return &UpdateSenderAddPath{ - fsm: fsm, + fsm: fsm, + iBGP: fsm.localASN == fsm.remoteASN, } } // AddPath serializes a new path and sends out a BGP update message func (u *UpdateSenderAddPath) AddPath(pfx net.Prefix, p *route.Path) error { - asPathPA, err := packet.ParseASPathStr(strings.TrimRight(fmt.Sprintf("%d %s", u.fsm.localASN, p.BGPPath.ASPath), " ")) + asPathPA, err := packet.ParseASPathStr(asPathString(u.iBGP, u.fsm.localASN, p.BGPPath.ASPath)) if err != nil { return fmt.Errorf("Unable to parse AS path: %v", err) }