diff --git a/client/cmd/service.go b/client/cmd/service.go index 5c60744f9..855eb30fa 100644 --- a/client/cmd/service.go +++ b/client/cmd/service.go @@ -2,18 +2,21 @@ package cmd import ( "context" + "github.com/kardianos/service" log "github.com/sirupsen/logrus" "github.com/spf13/cobra" "google.golang.org/grpc" "github.com/netbirdio/netbird/client/internal" + "github.com/netbirdio/netbird/client/server" ) type program struct { - ctx context.Context - cancel context.CancelFunc - serv *grpc.Server + ctx context.Context + cancel context.CancelFunc + serv *grpc.Server + serverInstance *server.Server } func newProgram(ctx context.Context, cancel context.CancelFunc) *program { diff --git a/client/cmd/service_controller.go b/client/cmd/service_controller.go index d416afaac..86546e31c 100644 --- a/client/cmd/service_controller.go +++ b/client/cmd/service_controller.go @@ -61,6 +61,8 @@ func (p *program) Start(svc service.Service) error { } proto.RegisterDaemonServiceServer(p.serv, serverInstance) + p.serverInstance = serverInstance + log.Printf("started daemon server: %v", split[1]) if err := p.serv.Serve(listen); err != nil { log.Errorf("failed to serve daemon requests: %v", err) @@ -70,6 +72,14 @@ func (p *program) Start(svc service.Service) error { } func (p *program) Stop(srv service.Service) error { + if p.serverInstance != nil { + in := new(proto.DownRequest) + _, err := p.serverInstance.Down(p.ctx, in) + if err != nil { + log.Errorf("failed to stop daemon: %v", err) + } + } + p.cancel() if p.serv != nil {