[VOL-4519] Add bbsimctl command to invalidate MDS count of an ONU

Change-Id: I8cdb6c0d5381b952a87e1d24d87cab81de0ddaf9
diff --git a/internal/bbsim/api/onus_handler.go b/internal/bbsim/api/onus_handler.go
index 8aef5e9..92ab912 100644
--- a/internal/bbsim/api/onus_handler.go
+++ b/internal/bbsim/api/onus_handler.go
@@ -19,9 +19,10 @@
 import (
 	"context"
 	"fmt"
+	"strconv"
+
 	"github.com/opencord/bbsim/internal/bbsim/types"
 	"github.com/opencord/voltha-protos/v5/go/openolt"
-	"strconv"
 
 	"github.com/opencord/bbsim/api/bbsim"
 	"github.com/opencord/bbsim/internal/bbsim/devices"
@@ -664,3 +665,28 @@
 	}
 	return &unis_ret, nil
 }
+
+// Invalidate the MDS counter of the ONU
+func (s BBSimServer) InvalidateMds(ctx context.Context, req *bbsim.ONURequest) (*bbsim.Response, error) {
+	logger.WithFields(log.Fields{
+		"OnuSn": req.SerialNumber,
+	}).Infof("Received request to invalidate the MDS counter of the ONU")
+
+	res := &bbsim.Response{}
+	olt := devices.GetOLT()
+
+	onu, err := olt.FindOnuBySn(req.SerialNumber)
+	if err != nil {
+		res.StatusCode = int32(codes.NotFound)
+		res.Message = err.Error()
+		return res, err
+	}
+
+	previous := onu.MibDataSync
+	onu.InvalidateMibDataSync()
+
+	res.StatusCode = int32(codes.OK)
+	res.Message = fmt.Sprintf("MDS counter of ONU %s was %d, set to %d).", onu.Sn(), previous, onu.MibDataSync)
+
+	return res, nil
+}