diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-04-10 15:43:41 +0900 |
---|---|---|
committer | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2016-04-11 05:44:30 +0900 |
commit | d4a82f70ba17b64b1841d801098bf38dc0c475e1 (patch) | |
tree | f4a03088be1d1a11432cd539a28e727c9e4d3192 | |
parent | 0d2633e7831cb2406bacf62a232fcca7184ff988 (diff) |
specify api hosts that gobgpd listens on
by default, ":50051" is used as before.
gobgpd accepts grpc connections from localhost with the following
example:
$ gobgpd --api-hosts 127.0.0.1:50051
You can specify multiple hosts like:
$ gobgpd --api-hosts 127.0.0.1:50051,10.0.255.254:50051
close #796
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
-rw-r--r-- | gobgpd/main.go | 4 | ||||
-rw-r--r-- | server/grpc_server.go | 24 |
2 files changed, 19 insertions, 9 deletions
diff --git a/gobgpd/main.go b/gobgpd/main.go index b41b72d9..f6788cab 100644 --- a/gobgpd/main.go +++ b/gobgpd/main.go @@ -49,7 +49,7 @@ func main() { DisableStdlog bool `long:"disable-stdlog" description:"disable standard logging"` CPUs int `long:"cpus" description:"specify the number of CPUs to be used"` Ops bool `long:"openswitch" description:"openswitch mode"` - GrpcPort int `short:"g" long:"grpc-port" description:"grpc port" default:"50051"` + GrpcHosts string `long:"api-hosts" description:"specify the hosts that gobgpd listens on" default:":50051"` GracefulRestart bool `short:"r" long:"graceful-restart" description:"flag restart-state in graceful-restart capability"` Dry bool `short:"d" long:"dry-run" description:"check configuration"` } @@ -174,7 +174,7 @@ func main() { go bgpServer.Serve() // start grpc Server - grpcServer := server.NewGrpcServer(opts.GrpcPort, bgpServer.GrpcReqCh) + grpcServer := server.NewGrpcServer(opts.GrpcHosts, bgpServer.GrpcReqCh) go func() { if err := grpcServer.Serve(); err != nil { log.Fatalf("failed to listen grpc port: %s", err) diff --git a/server/grpc_server.go b/server/grpc_server.go index cff759ff..cf0a883d 100644 --- a/server/grpc_server.go +++ b/server/grpc_server.go @@ -24,6 +24,7 @@ import ( "google.golang.org/grpc" "io" "net" + "strings" ) const ( @@ -79,15 +80,24 @@ const ( type Server struct { grpcServer *grpc.Server bgpServerCh chan *GrpcRequest - port int + hosts string } func (s *Server) Serve() error { - lis, err := net.Listen("tcp", fmt.Sprintf(":%d", s.port)) - if err != nil { - return fmt.Errorf("failed to listen: %v", err) + l := strings.Split(s.hosts, ",") + for i, host := range l { + lis, err := net.Listen("tcp", fmt.Sprintf(host)) + if err != nil { + return fmt.Errorf("failed to listen: %v", err) + } + if i == len(l)-1 { + s.grpcServer.Serve(lis) + } else { + go func() { + s.grpcServer.Serve(lis) + }() + } } - s.grpcServer.Serve(lis) return nil } @@ -482,13 +492,13 @@ func (r *GrpcResponse) Err() error { return r.ResponseErr } -func NewGrpcServer(port int, bgpServerCh chan *GrpcRequest) *Server { +func NewGrpcServer(hosts string, bgpServerCh chan *GrpcRequest) *Server { grpc.EnableTracing = false grpcServer := grpc.NewServer() server := &Server{ grpcServer: grpcServer, bgpServerCh: bgpServerCh, - port: port, + hosts: hosts, } api.RegisterGobgpApiServer(grpcServer, server) return server |