diff --git a/main.go b/main.go index 22cba26fdfb466f2e554538d3f81f864d8c18b79..0896ecc2dff80c5ee68cd8abc7c28c5e2923e744 100644 --- a/main.go +++ b/main.go @@ -40,9 +40,9 @@ func main() { b.AddPeer(config.Peer{ AdminEnabled: true, - LocalAS: 6695, + LocalAS: 65200, PeerAS: 65300, - PeerAddress: net.IP([]byte{169, 254, 200, 1}), + PeerAddress: net.IP([]byte{172, 17, 0, 3}), LocalAddress: net.IP([]byte{169, 254, 200, 0}), ReconnectInterval: time.Second * 15, HoldTime: time.Second * 90, @@ -59,9 +59,9 @@ func main() { b.AddPeer(config.Peer{ AdminEnabled: true, - LocalAS: 6695, + LocalAS: 65200, PeerAS: 65100, - PeerAddress: net.IP([]byte{169, 254, 100, 0}), + PeerAddress: net.IP([]byte{172, 17, 0, 2}), LocalAddress: net.IP([]byte{169, 254, 100, 1}), ReconnectInterval: time.Second * 15, HoldTime: time.Second * 90, diff --git a/protocols/bgp/packet/decoder.go b/protocols/bgp/packet/decoder.go index cafc9b5a21165c5f0b909420335e2fcfe3c62e10..9bb71f1a8fa01945eca0a2764cdada5ad578595c 100644 --- a/protocols/bgp/packet/decoder.go +++ b/protocols/bgp/packet/decoder.go @@ -242,6 +242,12 @@ func decodeCapability(buf *bytes.Buffer) (Capability, error) { return cap, fmt.Errorf("Unable to decode add path capability") } cap.Value = addPathCap + case ASN4CapabilityCode: + asn4Cap, err := decodeASN4Capability(buf) + if err != nil { + return cap, fmt.Errorf("Unable to decode 4 octet ASN capability") + } + cap.Value = asn4Cap default: for i := uint8(0); i < cap.Length; i++ { _, err := buf.ReadByte() @@ -270,6 +276,20 @@ func decodeAddPathCapability(buf *bytes.Buffer) (AddPathCapability, error) { return addPathCap, nil } +func decodeASN4Capability(buf *bytes.Buffer) (ASN4Capability, error) { + asn4Cap := ASN4Capability{} + fields := []interface{}{ + &asn4Cap.ASN4, + } + + err := decode(buf, fields) + if err != nil { + return asn4Cap, err + } + + return asn4Cap, nil +} + func validateOpen(msg *BGPOpen) error { if msg.Version != BGP4Version { return BGPError{ diff --git a/protocols/bgp/server/fsm_open_sent_test.go b/protocols/bgp/server/fsm_open_sent_test.go index d4f2634eac2adba7a70c9a636a8969388d0a7fc3..39057c6480f84c21d025e335cd95b2c7b34b2b08 100644 --- a/protocols/bgp/server/fsm_open_sent_test.go +++ b/protocols/bgp/server/fsm_open_sent_test.go @@ -65,7 +65,7 @@ func TestOpenMsgReceived(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - fsm := newFSM2(&Peer{ + fsm := newFSM2(&peer{ peerASN: test.asn, }) diff --git a/protocols/bgp/server/fsm_test.go b/protocols/bgp/server/fsm_test.go index 1dc8e9dd7288fabd8625a1b0bbb604401ab3aa86..c0b293936118c345060049cfcee77a4325861741 100644 --- a/protocols/bgp/server/fsm_test.go +++ b/protocols/bgp/server/fsm_test.go @@ -70,7 +70,7 @@ func TestOpenMessage(t *testing.T) { for _, test := range tests { t.Run(test.name, func(t *testing.T) { - p := Peer{ + p := peer{ localASN: test.localASN, holdTime: test.holdTime, routerID: test.routerID, diff --git a/protocols/bgp/server/peer.go b/protocols/bgp/server/peer.go index be8edab9bf20e9801519d57436b8660875942cc6..d12fbc0051d6756646790827aba7d13e76e8e43e 100644 --- a/protocols/bgp/server/peer.go +++ b/protocols/bgp/server/peer.go @@ -108,6 +108,7 @@ func newPeer(c config.Peer, rib routingtable.RouteTableClient, server *bgpServer server: server, addr: c.PeerAddress, peerASN: c.PeerAS, + localASN: c.LocalAS, fsms: make([]*FSM, 0), rib: rib, addPathSend: c.AddPathSend,