diff --git a/internal/pkg/commands/devices.go b/internal/pkg/commands/devices.go
index 416e1c5..f04ab4e 100644
--- a/internal/pkg/commands/devices.go
+++ b/internal/pkg/commands/devices.go
@@ -25,8 +25,9 @@
 	"github.com/golang/protobuf/ptypes/empty"
 	flags "github.com/jessevdk/go-flags"
 	"github.com/opencord/voltctl/pkg/format"
-	"github.com/opencord/voltha-protos/v3/go/common"
-	"github.com/opencord/voltha-protos/v3/go/voltha"
+	"github.com/opencord/voltha-protos/v4/go/common"
+	"github.com/opencord/voltha-protos/v4/go/extension"
+	"github.com/opencord/voltha-protos/v4/go/voltha"
 )
 
 const (
@@ -46,6 +47,19 @@
 	DEFAULT_DEVICE_PM_CONFIG_GROUP_LIST_FORMAT  = "table{{.GroupName}}\t{{.Enabled}}\t{{.GroupFreq}}"
 	DEFAULT_DEVICE_VALUE_GET_FORMAT             = "table{{.Name}}\t{{.Result}}"
 	DEFAULT_DEVICE_IMAGE_LIST_GET_FORMAT        = "table{{.Name}}\t{{.Url}}\t{{.Crc}}\t{{.DownloadState}}\t{{.ImageVersion}}\t{{.LocalDir}}\t{{.ImageState}}\t{{.FileSize}}"
+	DEFAULT_DEVICE_GET_PORT_STATUS_FORMAT       = `
+  TXBYTES:		{{.TxBytes}}
+  TXPACKETS:		{{.TxPackets}}
+  TXERRPACKETS:		{{.TxErrorPackets}}
+  TXBCASTPACKETS:	{{.TxBcastPackets}}
+  TXUCASTPACKETS:	{{.TxUcastPackets}}
+  TXMCASTPACKETS:	{{.TxMcastPackets}}
+  RXBYTES:		{{.RxBytes}}
+  RXPACKETS:		{{.RxPackets}}
+  RXERRPACKETS:		{{.RxErrorPackets}}
+  RXBCASTPACKETS:	{{.RxBcastPackets}}
+  RXUCASTPACKETS:	{{.RxUcastPackets}}
+  RXMCASTPACKETS:	{{.RxMcastPackets}}`
 )
 
 type DeviceList struct {
@@ -232,6 +246,14 @@
 		ImageVersion string   `positional-arg-name:"IMAGE_VERSION" required:"yes"`
 		SaveConfig   bool     `positional-arg-name:"SAVE_EXISTING_CONFIG"`
 		LocalDir     string   `positional-arg-name:"IMAGE_LOCAL_DIRECTORY"`
+	}
+}
+type DeviceGetPortStats struct {
+	ListOutputOptions
+	Args struct {
+		Id       DeviceId `positional-arg-name:"DEVICE_ID" required:"yes"`
+		PortNo   uint32   `positional-arg-name:"PORT_NO" required:"yes"`
+		PortType string   `positional-arg-name:"PORT_TYPE" required:"yes"`
 	} `positional-args:"yes"`
 }
 
@@ -274,12 +296,14 @@
 			List DevicePmConfigGroupMetricList `command:"list"`
 		} `command:"groupmetric"`
 	} `command:"pmconfig"`
-
 	Image struct {
 		Get      DeviceOnuListImages          `command:"list"`
 		Download DeviceOnuDownloadImage       `command:"download"`
 		Activate DeviceOnuActivateImageUpdate `command:"activate"`
 	} `command:"image"`
+	GetExtVal struct {
+		Stats DeviceGetPortStats `command:"portstats"`
+	} `command:"getextval"`
 }
 
 var deviceOpts = DeviceOpts{}
@@ -1416,6 +1440,63 @@
 	Result interface{} `json:"result"`
 }
 
+func (options *DeviceGetPortStats) Execute(args []string) error {
+	conn, err := NewConnection()
+	if err != nil {
+		return err
+	}
+	defer conn.Close()
+	client := extension.NewExtensionClient(conn)
+	var portType extension.GetOltPortCounters_PortType
+
+	if options.Args.PortType == "pon" {
+		portType = extension.GetOltPortCounters_Port_PON_OLT
+	} else if options.Args.PortType == "nni" {
+
+		portType = extension.GetOltPortCounters_Port_ETHERNET_NNI
+	} else {
+		return fmt.Errorf("expected interface type pon/nni, provided %s", options.Args.PortType)
+	}
+
+	singleGetValReq := extension.SingleGetValueRequest{
+		TargetId: string(options.Args.Id),
+		Request: &extension.GetValueRequest{
+			Request: &extension.GetValueRequest_OltPortInfo{
+				OltPortInfo: &extension.GetOltPortCounters{
+					PortNo:   options.Args.PortNo,
+					PortType: portType,
+				},
+			},
+		},
+	}
+
+	ctx, cancel := context.WithTimeout(context.Background(), GlobalConfig.Grpc.Timeout)
+	defer cancel()
+	rv, err := client.GetExtValue(ctx, &singleGetValReq)
+	if err != nil {
+		Error.Printf("Error getting value on device Id %s,err=%s\n", options.Args.Id, ErrorToString(err))
+		return err
+	}
+
+	if rv.Response.Status != extension.GetValueResponse_OK {
+		return fmt.Errorf("failed to get port stats %v", rv.Response.ErrReason.String())
+	}
+
+	outputFormat := CharReplacer.Replace(options.Format)
+	if outputFormat == "" {
+		outputFormat = GetCommandOptionWithDefault("device-get-port-status", "format", DEFAULT_DEVICE_GET_PORT_STATUS_FORMAT)
+	}
+
+	result := CommandResult{
+		Format:    format.Format(outputFormat),
+		OutputAs:  toOutputType(options.OutputAs),
+		NameLimit: options.NameLimit,
+		Data:      rv.GetResponse().GetPortCoutners(),
+	}
+	GenerateOutput(&result)
+	return nil
+}
+
 /*Device  get Onu Distance */
 func (options *DeviceGetExtValue) Execute(args []string) error {
 	conn, err := NewConnection()
