Skip to content
Snippets Groups Projects
Unverified Commit cb072c17 authored by Daniel Czerwonk's avatar Daniel Czerwonk Committed by GitHub
Browse files

Merge pull request #34 from hikhvar/fix/dont-announce-own-as-in-ibgp

Fix: Don't announce own ASN in ASPath if iBGP
parents a35b7ffc e12b31e4
No related branches found
No related tags found
No related merge requests found
...@@ -15,18 +15,20 @@ import ( ...@@ -15,18 +15,20 @@ import (
// UpdateSender converts table changes into BGP update messages // UpdateSender converts table changes into BGP update messages
type UpdateSender struct { type UpdateSender struct {
routingtable.ClientManager routingtable.ClientManager
fsm *FSM fsm *FSM
iBGP bool
} }
func newUpdateSender(fsm *FSM) *UpdateSender { func newUpdateSender(fsm *FSM) *UpdateSender {
return &UpdateSender{ return &UpdateSender{
fsm: fsm, fsm: fsm,
iBGP: fsm.localASN == fsm.remoteASN,
} }
} }
// AddPath serializes a new path and sends out a BGP update message // AddPath serializes a new path and sends out a BGP update message
func (u *UpdateSender) AddPath(pfx net.Prefix, p *route.Path) error { 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 { if err != nil {
return fmt.Errorf("Unable to parse AS path: %v", err) return fmt.Errorf("Unable to parse AS path: %v", err)
} }
...@@ -74,3 +76,12 @@ func (u *UpdateSender) UpdateNewClient(client routingtable.RouteTableClient) err ...@@ -74,3 +76,12 @@ func (u *UpdateSender) UpdateNewClient(client routingtable.RouteTableClient) err
log.Warningf("BGP Update Sender: UpdateNewClient() not supported") log.Warningf("BGP Update Sender: UpdateNewClient() not supported")
return nil 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, " ")
}
...@@ -2,7 +2,6 @@ package server ...@@ -2,7 +2,6 @@ package server
import ( import (
"fmt" "fmt"
"strings"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
...@@ -15,18 +14,20 @@ import ( ...@@ -15,18 +14,20 @@ import (
// UpdateSenderAddPath converts table changes into BGP update messages with add path // UpdateSenderAddPath converts table changes into BGP update messages with add path
type UpdateSenderAddPath struct { type UpdateSenderAddPath struct {
routingtable.ClientManager routingtable.ClientManager
fsm *FSM fsm *FSM
iBGP bool
} }
func newUpdateSenderAddPath(fsm *FSM) *UpdateSenderAddPath { func newUpdateSenderAddPath(fsm *FSM) *UpdateSenderAddPath {
return &UpdateSenderAddPath{ return &UpdateSenderAddPath{
fsm: fsm, fsm: fsm,
iBGP: fsm.localASN == fsm.remoteASN,
} }
} }
// AddPath serializes a new path and sends out a BGP update message // AddPath serializes a new path and sends out a BGP update message
func (u *UpdateSenderAddPath) AddPath(pfx net.Prefix, p *route.Path) error { 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 { if err != nil {
return fmt.Errorf("Unable to parse AS path: %v", err) return fmt.Errorf("Unable to parse AS path: %v", err)
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment