[SEBA-873] add reboot olt support

Change-Id: I1570d05313661a6d66e1596b9f9a1a1cc17d1a73
diff --git a/internal/bbsimctl/commands/olt.go b/internal/bbsimctl/commands/olt.go
index fa847ff..9ff6a30 100644
--- a/internal/bbsimctl/commands/olt.go
+++ b/internal/bbsimctl/commands/olt.go
@@ -40,10 +40,19 @@
 
 type OltPONs struct{}
 
+type OltShutdown struct{}
+
+type OltPoweron struct{}
+
+type OltReboot struct{}
+
 type oltOptions struct {
-	Get OltGet  `command:"get"`
-	NNI OltNNIs `command:"nnis"`
-	PON OltPONs `command:"pons"`
+	Get      OltGet      `command:"get"`
+	NNI      OltNNIs     `command:"nnis"`
+	PON      OltPONs     `command:"pons"`
+	Shutdown OltShutdown `command:"shutdown"`
+	Poweron  OltPoweron  `command:"poweron"`
+	Reboot   OltReboot   `command:"reboot"`
 }
 
 func RegisterOltCommands(parser *flags.Parser) {
@@ -107,3 +116,57 @@
 
 	return nil
 }
+
+func (o *OltShutdown) 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.ShutdownOlt(ctx, &pb.Empty{})
+
+	if err != nil {
+		log.Fatalf("Cannot shut down OLT: %v", err)
+		return err
+	}
+
+	fmt.Println(fmt.Sprintf("[Status: %d] %s", res.StatusCode, res.Message))
+	return nil
+}
+
+func (o *OltPoweron) 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.PoweronOlt(ctx, &pb.Empty{})
+
+	if err != nil {
+		log.Fatalf("Cannot power on OLT: %v", err)
+		return err
+	}
+
+	fmt.Println(fmt.Sprintf("[Status: %d] %s", res.StatusCode, res.Message))
+	return nil
+}
+
+func (o *OltReboot) 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.RebootOlt(ctx, &pb.Empty{})
+
+	if err != nil {
+		log.Fatalf("Cannot reboot OLT: %v", err)
+		return err
+	}
+
+	fmt.Println(fmt.Sprintf("[Status: %d] %s", res.StatusCode, res.Message))
+	return nil
+}