diff options
author | ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp> | 2015-12-30 20:56:27 +0900 |
---|---|---|
committer | ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp> | 2016-01-09 22:52:15 +0900 |
commit | d94bb930dc2778a39dd96050193743136a26fb0e (patch) | |
tree | 2eb3755fc82df74a28f433cf79b2ec2b7febd7d8 /server | |
parent | aff1c244ad0d88a814f2ce573800717ccd08b450 (diff) |
api: support bmp configuration
Signed-off-by: ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>
Diffstat (limited to 'server')
-rw-r--r-- | server/bmp.go | 16 | ||||
-rw-r--r-- | server/grpc_server.go | 5 | ||||
-rw-r--r-- | server/server.go | 31 |
3 files changed, 50 insertions, 2 deletions
diff --git a/server/bmp.go b/server/bmp.go index 90928acd..3f845b27 100644 --- a/server/bmp.go +++ b/server/bmp.go @@ -224,8 +224,10 @@ func (w *bmpWatcher) loop() error { case conn := <-w.endCh: host := conn.RemoteAddr().String() log.Debugf("bmp connection to %s killed", host) - w.connMap[host].conn = nil - go w.tryConnect(w.connMap[host]) + if _, y := w.connMap[host]; y { + w.connMap[host].conn = nil + go w.tryConnect(w.connMap[host]) + } } } } @@ -261,6 +263,16 @@ func (w *bmpWatcher) addServer(c config.BmpServerConfig) error { return <-ch } +func (w *bmpWatcher) deleteServer(c config.BmpServerConfig) error { + ch := make(chan error) + w.ctlCh <- &bmpConfig{ + config: c, + del: true, + errCh: ch, + } + return <-ch +} + func (w *bmpWatcher) watchingEventTypes() []watcherEventType { state := false pre := false diff --git a/server/grpc_server.go b/server/grpc_server.go index 554c62a9..9afb9f8a 100644 --- a/server/grpc_server.go +++ b/server/grpc_server.go @@ -50,6 +50,7 @@ const ( REQ_MRT_GLOBAL_RIB REQ_MRT_LOCAL_RIB REQ_MOD_MRT + REQ_MOD_BMP REQ_RPKI REQ_MOD_RPKI REQ_ROA @@ -284,6 +285,10 @@ func (s *Server) ModMrt(ctx context.Context, arg *api.ModMrtArguments) (*api.Err return s.mod(REQ_MOD_MRT, arg) } +func (s *Server) ModBmp(ctx context.Context, arg *api.ModBmpArguments) (*api.Error, error) { + return s.mod(REQ_MOD_BMP, arg) +} + func (s *Server) ModRPKI(ctx context.Context, arg *api.ModRpkiArguments) (*api.Error, error) { return s.mod(REQ_MOD_RPKI, arg) } diff --git a/server/server.go b/server/server.go index cd86da38..2deb9b0f 100644 --- a/server/server.go +++ b/server/server.go @@ -1975,6 +1975,8 @@ func (server *BgpServer) handleGrpc(grpcReq *GrpcRequest) []*SenderMsg { server.handleMrt(grpcReq) case REQ_MOD_MRT: server.handleModMrt(grpcReq) + case REQ_MOD_BMP: + server.handleModBmp(grpcReq) case REQ_MOD_RPKI: server.handleModRpki(grpcReq) case REQ_ROA, REQ_RPKI: @@ -2532,6 +2534,35 @@ func (server *BgpServer) handleModMrt(grpcReq *GrpcRequest) { } } +func (server *BgpServer) handleModBmp(grpcReq *GrpcRequest) { + arg := grpcReq.Data.(*api.ModBmpArguments) + w, y := server.watchers[WATCHER_BMP] + if !y { + if arg.Operation == api.Operation_ADD { + w, _ = newBmpWatcher(server.GrpcReqCh) + server.watchers[WATCHER_BMP] = w + } else if arg.Operation == api.Operation_DEL { + grpcDone(grpcReq, fmt.Errorf("not enabled yet")) + return + } + } + c := config.BmpServerConfig{ + Address: arg.Address, + Port: arg.Port, + RouteMonitoringPolicy: config.BmpRouteMonitoringPolicyType(arg.Type), + } + switch arg.Operation { + case api.Operation_ADD: + err := w.(*bmpWatcher).addServer(c) + grpcDone(grpcReq, err) + case api.Operation_DEL: + err := w.(*bmpWatcher).deleteServer(c) + grpcDone(grpcReq, err) + default: + grpcDone(grpcReq, fmt.Errorf("unsupported operation: %s", arg.Operation)) + } +} + func (server *BgpServer) handleModRpki(grpcReq *GrpcRequest) { arg := grpcReq.Data.(*api.ModRpkiArguments) |