summaryrefslogtreecommitdiffhomepage
path: root/server
diff options
context:
space:
mode:
Diffstat (limited to 'server')
-rw-r--r--server/grpc_server.go32
-rw-r--r--server/server.go6
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{}