From e12b31e4e6ebc830986af1768a8dc2a1d903c98a Mon Sep 17 00:00:00 2001 From: Christoph Petrausch <christoph.petrausch@inovex.de> Date: Tue, 29 May 2018 13:08:06 +0200 Subject: [PATCH] Don't announce own ASN in ASPath if iBGP --- protocols/bgp/server/update_sender.go | 17 ++++++++++++++--- protocols/bgp/server/update_sender_add_path.go | 9 +++++---- 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/protocols/bgp/server/update_sender.go b/protocols/bgp/server/update_sender.go index a5d05887..dc0c4435 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 e7b46577..1cc04705 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) } -- GitLab