diff --git a/go.mod b/go.mod index af9d8336d060b0717f754271dc8b69092f7a266a..4c3b95b881db3ccc35a4b2467735ed1006e070ad 100644 --- a/go.mod +++ b/go.mod @@ -9,7 +9,7 @@ require ( github.com/vishvananda/netlink v1.0.0 github.com/vishvananda/netns v0.0.0-20180720170159-13995c7128cc // indirect golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 // indirect - golang.org/x/net v0.0.0-20181220203305-927f97764cc3 // indirect + golang.org/x/net v0.0.0-20181220203305-927f97764cc3 golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 // indirect golang.org/x/sys v0.0.0-20181228120256-c6cbdbf9e68a // indirect google.golang.org/genproto v0.0.0-20181221175505-bd9b4fb69e2f // indirect diff --git a/protocols/bgp/server/bgp_api.go b/protocols/bgp/server/bgp_api.go index 145fa5c0358b086e35392dbc5b7690d0ba094dec..5546abf94dc98ab546e736457ee50d6b67305c99 100644 --- a/protocols/bgp/server/bgp_api.go +++ b/protocols/bgp/server/bgp_api.go @@ -23,13 +23,17 @@ func NewBGPAPIServer(s BGPServer) *BGPAPIServer { } func (s *BGPAPIServer) ListSessions(ctx context.Context, in *api.ListSessionsRequest) (*api.ListSessionsResponse, error) { - return nil, fmt.Errorf("Not implemented yet.") + return nil, fmt.Errorf("Not implemented yet") } // DumpRIBIn dumps the RIB in of a peer for a given AFI/SAFI -//func (s *BGPAPIServer) DumpRIBIn(ctx context.Context, in *api.DumpRIBRequest) (api.BgpService_DumpRIBInClient, error) { func (s *BGPAPIServer) DumpRIBIn(in *api.DumpRIBRequest, stream api.BgpService_DumpRIBInServer) error { - for _, r := range s.srv.DumpRIBIn(bnet.IPFromProtoIP(*in.Peer), uint16(in.Afi), uint8(in.Safi)) { + r := s.srv.GetRIBIn(bnet.IPFromProtoIP(*in.Peer), uint16(in.Afi), uint8(in.Safi)) + if r == nil { + return fmt.Errorf("Unable to get AdjRIBIn") + } + + for _, r := range r.Dump() { x := r.ToProto() err := stream.Send(x) if err != nil { @@ -42,8 +46,14 @@ func (s *BGPAPIServer) DumpRIBIn(in *api.DumpRIBRequest, stream api.BgpService_D // DumpRIBOut dumps the RIB out of a peer for a given AFI/SAFI func (s *BGPAPIServer) DumpRIBOut(in *api.DumpRIBRequest, stream api.BgpService_DumpRIBOutServer) error { - for _, r := range s.srv.DumpRIBOut(bnet.IPFromProtoIP(*in.Peer), uint16(in.Afi), uint8(in.Safi)) { - err := stream.Send(r.ToProto()) + r := s.srv.GetRIBOut(bnet.IPFromProtoIP(*in.Peer), uint16(in.Afi), uint8(in.Safi)) + if r == nil { + return fmt.Errorf("Unable to get AdjRIBOut") + } + + for _, r := range r.Dump() { + x := r.ToProto() + err := stream.Send(x) if err != nil { return err } diff --git a/protocols/bgp/server/server.go b/protocols/bgp/server/server.go index 402eb74e11b719c25733aff39c4f415b83d53f2e..d3d0a67447f82598c9a9be4a14e63e9fef4e0a7a 100644 --- a/protocols/bgp/server/server.go +++ b/protocols/bgp/server/server.go @@ -3,9 +3,12 @@ package server import ( "net" + "github.com/bio-routing/bio-rd/routingtable/adjRIBOut" + + "github.com/bio-routing/bio-rd/routingtable/adjRIBIn" + "github.com/bio-routing/bio-rd/config" bnet "github.com/bio-routing/bio-rd/net" - "github.com/bio-routing/bio-rd/route" bnetutils "github.com/bio-routing/bio-rd/util/net" "github.com/pkg/errors" log "github.com/sirupsen/logrus" @@ -27,8 +30,8 @@ type BGPServer interface { RouterID() uint32 Start(*config.Global) error AddPeer(config.Peer) error - DumpRIBIn(peer bnet.IP, afi uint16, safi uint8) []*route.Route - DumpRIBOut(peer bnet.IP, afi uint16, safi uint8) []*route.Route + GetRIBIn(peerIP bnet.IP, afi uint16, safi uint8) *adjRIBIn.AdjRIBIn + GetRIBOut(peerIP bnet.IP, afi uint16, safi uint8) *adjRIBOut.AdjRIBOut ConnectMockPeer(peer config.Peer, con net.Conn) } @@ -68,22 +71,42 @@ func (b *bgpServer) Start(c *config.Global) error { return nil } -func (b *bgpServer) DumpRIBIn(peerIP bnet.IP, afi uint16, safi uint8) []*route.Route { +func (b *bgpServer) GetRIBIn(peerIP bnet.IP, afi uint16, safi uint8) *adjRIBIn.AdjRIBIn { p := b.peers.get(peerIP) if p == nil { return nil } - return p.dumpRIBIn(afi, safi) + if len(p.fsms) != 1 { + return nil + } + + fsm := p.fsms[0] + f := fsm.addressFamily(afi, safi) + if f == nil { + return nil + } + + return f.adjRIBIn.(*adjRIBIn.AdjRIBIn) } -func (b *bgpServer) DumpRIBOut(peerIP bnet.IP, afi uint16, safi uint8) []*route.Route { +func (b *bgpServer) GetRIBOut(peerIP bnet.IP, afi uint16, safi uint8) *adjRIBOut.AdjRIBOut { p := b.peers.get(peerIP) if p == nil { return nil } - return p.dumpRIBOut(afi, safi) + if len(p.fsms) != 1 { + return nil + } + + fsm := p.fsms[0] + f := fsm.addressFamily(afi, safi) + if f == nil { + return nil + } + + return f.adjRIBOut.(*adjRIBOut.AdjRIBOut) } func (b *bgpServer) incomingConnectionWorker() {