diff options
author | Naoto Hanaue <hanaue.naoto@po.ntts.co.jp> | 2015-05-25 11:50:42 +0900 |
---|---|---|
committer | Naoto Hanaue <hanaue.naoto@po.ntts.co.jp> | 2015-05-26 17:28:44 +0900 |
commit | fd4f6a91efb81646281ae8175433872627ec8611 (patch) | |
tree | f657b1c3bec445ed48dd82a009f61a34533209db /server/grpc_server.go | |
parent | fa5d2fe25ee3670a5ba2e66431dfd617f48737af (diff) |
cli: add the add/del commands to routepolicy
% gobgp -u 10.0.255.1 policy routepolicy
PolicyName policy0:
StatementName st0:
Conditions:
PrefixSet: ps0 192.168.0.0/16 16..24
NeighborSet: ns2 10.0.0.4
AsPathLength:
MatchOption: ALL
Actions:
REJECT
% gobgp -u 10.0.255.1 policy routepolicy add policy1 st0 conditions --prefix ps2 --neighbor ns0 --aspath-len eq,5 --option all
% gobgp -u 10.0.255.1 policy routepolicy add policy1 st0 actions --route-action accept
% gobgp -u 10.0.255.1 policy routepolicy del policy0
% gobgp -u 10.0.255.1 policy routepolicy
PolicyName policy1:
StatementName st0:
Conditions:
PrefixSet: ps2 192.168.20.0/24
NeighborSet: ns0 10.0.0.2
10.0.0.3
AsPathLength: eq 5
MatchOption: ALL
Actions:
ACCEPT
Diffstat (limited to 'server/grpc_server.go')
-rw-r--r-- | server/grpc_server.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/server/grpc_server.go b/server/grpc_server.go index dbd1be1e..f1d040a2 100644 --- a/server/grpc_server.go +++ b/server/grpc_server.go @@ -56,6 +56,9 @@ const ( REQ_POLICY_NEIGHBORS_DELETE REQ_POLICY_ROUTEPOLICIES REQ_POLICY_ROUTEPOLICY + REQ_POLICY_ROUTEPOLICY_ADD + REQ_POLICY_ROUTEPOLICY_DELETE + REQ_POLICY_ROUTEPOLICIES_DELETE ) const GRPC_PORT = 8080 @@ -390,6 +393,28 @@ func (s *Server) modPolicy(arg *api.PolicyArguments, stream interface{}) error { err = stream.(api.Grpc_ModPolicyNeighborServer).Send(&api.Error{ Code: api.Error_SUCCESS, }) + case api.Resource_POLICY_ROUTEPOLICY: + switch arg.Operation { + case api.Operation_ADD: + reqType = REQ_POLICY_ROUTEPOLICY_ADD + case api.Operation_DEL: + reqType = REQ_POLICY_ROUTEPOLICY_DELETE + case api.Operation_DEL_ALL: + reqType = REQ_POLICY_ROUTEPOLICIES_DELETE + default: + return fmt.Errorf("unsupported operation: %s", arg.Operation) + } + req := NewGrpcRequest(reqType, "", rf, arg.PolicyDifinition) + s.bgpServerCh <- req + + res := <-req.ResponseCh + if err := res.Err(); err != nil { + log.Debug(err.Error()) + return err + } + err = stream.(api.Grpc_ModPolicyRoutePolicyServer).Send(&api.Error{ + Code: api.Error_SUCCESS, + }) default: return fmt.Errorf("unsupported resource type: %v", arg.Resource) } @@ -476,6 +501,21 @@ func (s *Server) GetPolicyRoutePolicy(ctx context.Context, arg *api.PolicyArgume return data.(*api.PolicyDefinition), nil } +func (s *Server) ModPolicyRoutePolicy(stream api.Grpc_ModPolicyRoutePolicyServer) error { + for { + arg, err := stream.Recv() + if err == io.EOF { + return nil + } else if err != nil { + return err + } + if err := s.modPolicy(arg, stream); err != nil { + return err + } + return nil + } +} + type GrpcRequest struct { RequestType int RemoteAddr string |