From 7cb50ce1cfdf959a74dad516ef65a6c6c34aaec8 Mon Sep 17 00:00:00 2001 From: ISHIDA Wataru Date: Sun, 18 Oct 2015 14:10:46 +0900 Subject: api/cli: add api to retrieve statements and support showing them via cli $ gobgp policy statement $ gobgp policy statement st0 Signed-off-by: ISHIDA Wataru --- server/server.go | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'server/server.go') diff --git a/server/server.go b/server/server.go index 18c2693e..e25d314f 100644 --- a/server/server.go +++ b/server/server.go @@ -1643,6 +1643,13 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { ResponseErr: err, } close(grpcReq.ResponseCh) + case REQ_STATEMENT: + if err := server.handleGrpcGetStatement(grpcReq); err != nil { + grpcReq.ResponseCh <- &GrpcResponse{ + ResponseErr: err, + } + } + close(grpcReq.ResponseCh) case REQ_POLICY_ROUTEPOLICY, REQ_POLICY_ROUTEPOLICIES: info := server.policy.PolicyMap typ := grpcReq.RequestType @@ -1754,6 +1761,28 @@ func (server *BgpServer) handleGrpcModDefinedSet(grpcReq *GrpcRequest) error { return err } +func (server *BgpServer) handleGrpcGetStatement(grpcReq *GrpcRequest) error { + arg := grpcReq.Data.(*api.Statement) + name := arg.Name + found := false + for _, s := range server.policy.StatementMap { + if name != "" && name != s.Name { + continue + } + grpcReq.ResponseCh <- &GrpcResponse{ + Data: s.ToApiStruct(), + } + found = true + if name != "" { + break + } + } + if !found { + return fmt.Errorf("not found %s", name) + } + return nil +} + func (server *BgpServer) handleMrt(grpcReq *GrpcRequest) { now := uint32(time.Now().Unix()) view := "" -- cgit v1.2.3