diff options
Diffstat (limited to 'server/grpc_server.go')
-rw-r--r-- | server/grpc_server.go | 63 |
1 files changed, 54 insertions, 9 deletions
diff --git a/server/grpc_server.go b/server/grpc_server.go index 17fb6c87..041f0659 100644 --- a/server/grpc_server.go +++ b/server/grpc_server.go @@ -48,8 +48,6 @@ const ( REQ_NEIGHBOR_POLICY_DEL_EXPORT REQ_NEIGHBOR_POLICY_DEL_DISTRIBUTE REQ_GLOBAL_RIB - REQ_GLOBAL_ADD - REQ_GLOBAL_DELETE REQ_POLICY_PREFIX REQ_POLICY_PREFIXES REQ_POLICY_PREFIX_ADD @@ -85,6 +83,10 @@ const ( REQ_MRT_GLOBAL_RIB REQ_MRT_LOCAL_RIB REQ_RPKI + REQ_VRF + REQ_VRFS + REQ_VRF_MOD + REQ_MOD_PATH ) const GRPC_PORT = 8080 @@ -329,16 +331,11 @@ func (s *Server) ModPath(stream api.Grpc_ModPathServer) error { return err } - if arg.Resource != api.Resource_GLOBAL { + if arg.Resource != api.Resource_GLOBAL && arg.Resource != api.Resource_VRF { return fmt.Errorf("unsupported resource: %s", arg.Resource) } - reqType := REQ_GLOBAL_ADD - if arg.IsWithdraw { - reqType = REQ_GLOBAL_DELETE - } - - req := NewGrpcRequest(reqType, "", bgp.RouteFamily(0), arg) + req := NewGrpcRequest(REQ_MOD_PATH, arg.Name, bgp.RouteFamily(0), arg) s.bgpServerCh <- req res := <-req.ResponseCh @@ -641,6 +638,54 @@ func (s *Server) GetRPKI(arg *api.Arguments, stream api.Grpc_GetRPKIServer) erro return nil } +func (s *Server) GetVrf(arg *api.Arguments, stream api.Grpc_GetVrfServer) error { + rf, err := convertAf2Rf(arg.Af) + if err != nil { + return err + } + req := NewGrpcRequest(REQ_VRF, "", rf, arg) + s.bgpServerCh <- req + + for res := range req.ResponseCh { + if err := res.Err(); err != nil { + log.Debug(err.Error()) + return err + } + if err := stream.Send(res.Data.(*api.Path)); err != nil { + return err + } + } + return nil +} + +func (s *Server) GetVrfs(arg *api.Arguments, stream api.Grpc_GetVrfsServer) error { + req := NewGrpcRequest(REQ_VRFS, "", bgp.RouteFamily(0), nil) + s.bgpServerCh <- req + + for res := range req.ResponseCh { + if err := res.Err(); err != nil { + log.Debug(err.Error()) + return err + } + if err := stream.Send(res.Data.(*api.Vrf)); err != nil { + return err + } + } + return nil +} + +func (s *Server) ModVrf(ctx context.Context, arg *api.ModVrfArguments) (*api.Error, error) { + none := &api.Error{} + req := NewGrpcRequest(REQ_VRF_MOD, "", bgp.RouteFamily(0), arg) + s.bgpServerCh <- req + + res := <-req.ResponseCh + if err := res.Err(); err != nil { + return none, err + } + return none, nil +} + type GrpcRequest struct { RequestType int RemoteAddr string |