diff options
Diffstat (limited to 'server')
-rw-r--r-- | server/grpc_server.go | 32 | ||||
-rw-r--r-- | server/server.go | 6 |
2 files changed, 29 insertions, 9 deletions
diff --git a/server/grpc_server.go b/server/grpc_server.go index 69313092..a47222c5 100644 --- a/server/grpc_server.go +++ b/server/grpc_server.go @@ -546,13 +546,33 @@ func (s *Server) GetRoa(ctx context.Context, arg *api.GetRoaRequest) (*api.GetRo } func (s *Server) GetVrf(ctx context.Context, arg *api.GetVrfRequest) (*api.GetVrfResponse, error) { - req := NewGrpcRequest(REQ_GET_VRF, "", bgp.RouteFamily(0), nil) - s.bgpServerCh <- req - res := <-req.ResponseCh - if res.Err() != nil { - return nil, res.Err() + d, err := s.get(REQ_GET_VRF, arg) + if err != nil { + return nil, err + } + l := make([]*api.Vrf, 0, len(d.([]*table.Vrf))) + toApi := func(v *table.Vrf) *api.Vrf { + f := func(rts []bgp.ExtendedCommunityInterface) [][]byte { + ret := make([][]byte, 0, len(rts)) + for _, rt := range rts { + b, _ := rt.Serialize() + ret = append(ret, b) + } + return ret + } + rd, _ := v.Rd.Serialize() + return &api.Vrf{ + Name: v.Name, + Rd: rd, + ImportRt: f(v.ImportRt), + ExportRt: f(v.ExportRt), + } + } + + for _, v := range d.([]*table.Vrf) { + l = append(l, toApi(v)) } - return res.Data.(*api.GetVrfResponse), res.Err() + return &api.GetVrfResponse{Vrfs: l}, nil } func (s *Server) get(typ int, d interface{}) (interface{}, error) { diff --git a/server/server.go b/server/server.go index 5d1e2892..76d214b8 100644 --- a/server/server.go +++ b/server/server.go @@ -1380,11 +1380,11 @@ func (server *BgpServer) handleVrfRequest(req *GrpcRequest) []*table.Path { } goto END case REQ_GET_VRF: - l := make([]*api.Vrf, 0, len(server.globalRib.Vrfs)) + l := make([]*table.Vrf, 0, len(server.globalRib.Vrfs)) for _, vrf := range server.globalRib.Vrfs { - l = append(l, vrf.ToApiStruct()) + l = append(l, vrf.Clone()) } - result.Data = &api.GetVrfResponse{Vrfs: l} + result.Data = l case REQ_ADD_VRF: msgs, result.ResponseErr = server.handleAddVrfRequest(req) result.Data = &api.AddVrfResponse{} |