VOL-4270 fetching extended pm counters per uni VOL-4200 Support reset of counters

Change-Id: I36d3ad67dc91038a1357eaa1ce1b7f1b2da1c2c9
diff --git a/internal/pkg/commands/devices.go b/internal/pkg/commands/devices.go
index b8fdc71..7ef8a5e 100644
--- a/internal/pkg/commands/devices.go
+++ b/internal/pkg/commands/devices.go
@@ -399,8 +399,10 @@
 
 type GetOnuEthernetFrameExtendedPmCounters struct {
 	ListOutputOptions
-	Args struct {
-		Id DeviceId `positional-arg-name:"DEVICE_ID" required:"yes"`
+	Reset bool `long:"reset" description:"Reset the counters"`
+	Args  struct {
+		Id       DeviceId `positional-arg-name:"DEVICE_ID" required:"yes"`
+		UniIndex *uint32  `positional-arg-name:"UNI_INDEX"`
 	} `positional-args:"yes"`
 }
 
@@ -2067,17 +2069,37 @@
 	}
 	defer conn.Close()
 	client := extension.NewExtensionClient(conn)
+	var singleGetValReq extension.SingleGetValueRequest
 
-	singleGetValReq := extension.SingleGetValueRequest{
-		TargetId: string(options.Args.Id),
-		Request: &extension.GetValueRequest{
-			Request: &extension.GetValueRequest_OnuInfo{
-				OnuInfo: &extension.GetOmciEthernetFrameExtendedPmRequest{
-					OnuDeviceId: string(options.Args.Id),
+	if options.Args.UniIndex != nil {
+		singleGetValReq = extension.SingleGetValueRequest{
+			TargetId: string(options.Args.Id),
+			Request: &extension.GetValueRequest{
+				Request: &extension.GetValueRequest_OnuInfo{
+					OnuInfo: &extension.GetOmciEthernetFrameExtendedPmRequest{
+						OnuDeviceId: string(options.Args.Id),
+						Reset_:      options.Reset,
+						IsUniIndex: &extension.GetOmciEthernetFrameExtendedPmRequest_UniIndex{
+							UniIndex: *options.Args.UniIndex,
+						},
+					},
 				},
 			},
-		},
+		}
+	} else {
+		singleGetValReq = extension.SingleGetValueRequest{
+			TargetId: string(options.Args.Id),
+			Request: &extension.GetValueRequest{
+				Request: &extension.GetValueRequest_OnuInfo{
+					OnuInfo: &extension.GetOmciEthernetFrameExtendedPmRequest{
+						OnuDeviceId: string(options.Args.Id),
+						Reset_:      options.Reset,
+					},
+				},
+			},
+		}
 	}
+
 	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Current().Grpc.Timeout)
 	defer cancel()
 	rv, err := client.GetExtValue(ctx, &singleGetValReq)