diff --git a/internal/bbsimctl/commands/olt.go b/internal/bbsimctl/commands/olt.go
index 5f6747e..bed3733 100644
--- a/internal/bbsimctl/commands/olt.go
+++ b/internal/bbsimctl/commands/olt.go
@@ -49,6 +49,15 @@
 
 type OltReboot struct{}
 
+type StopGrpcServer struct{}
+
+type StartGrpcServer struct{}
+type RestartGrpcServer struct {
+	Args struct {
+		Delay uint32
+	} `positional-args:"yes" required:"yes"`
+}
+
 type OltFlows struct{}
 
 type OltPoweronAllOnus struct{}
@@ -66,6 +75,9 @@
 	Flows           OltFlows           `command:"flows"`
 	PoweronAllOnus  OltPoweronAllOnus  `command:"poweronAllONUs"`
 	ShutdownAllOnus OltShutdownAllOnus `command:"shutdownAllONUs"`
+	StopServer      StopGrpcServer     `command:"stopServer"`
+	StartServer     StartGrpcServer    `command:"startServer"`
+	RestartServer   RestartGrpcServer  `command:"restartServer"`
 }
 
 func RegisterOltCommands(parser *flags.Parser) {
@@ -184,6 +196,63 @@
 	return nil
 }
 
+func (o *StopGrpcServer) Execute(args []string) error {
+	client, conn := connect()
+	defer conn.Close()
+
+	ctx, cancel := context.WithTimeout(context.Background(), config.GlobalConfig.Grpc.Timeout)
+	defer cancel()
+
+	res, err := client.StopgRPCServer(ctx, &pb.Empty{})
+
+	if err != nil {
+		log.Fatalf("Cannot stop Openolt server: %v", err)
+		return err
+	}
+
+	fmt.Println(fmt.Sprintf("[Status: %d] %s", res.StatusCode, res.Message))
+	return nil
+}
+
+func (o *StartGrpcServer) Execute(args []string) error {
+	client, conn := connect()
+	defer conn.Close()
+
+	ctx, cancel := context.WithTimeout(context.Background(), config.GlobalConfig.Grpc.Timeout)
+	defer cancel()
+
+	res, err := client.StartgRPCServer(ctx, &pb.Empty{})
+
+	if err != nil {
+		log.Fatalf("Cannot start Openolt server: %v", err)
+		return err
+	}
+
+	fmt.Println(fmt.Sprintf("[Status: %d] %s", res.StatusCode, res.Message))
+	return nil
+}
+
+func (o *RestartGrpcServer) Execute(args []string) error {
+	req := &pb.Timeout{
+		Delay: o.Args.Delay,
+	}
+	client, conn := connect()
+	defer conn.Close()
+
+	ctx, cancel := context.WithTimeout(context.Background(), config.GlobalConfig.Grpc.Timeout)
+	defer cancel()
+
+	res, err := client.RestartgRPCServer(ctx, req)
+
+	if err != nil {
+		log.Fatalf("Cannot restart Openolt server: %v", err)
+		return err
+	}
+
+	fmt.Println(fmt.Sprintf("[Status: %d] %s", res.StatusCode, res.Message))
+	return nil
+}
+
 func (o *OltFlows) Execute(args []string) error {
 	client, conn := connect()
 	defer conn.Close()
