[VOL-4692] BBSIM: OMCI extended message set - support get requests

Change-Id: I41f139558df5913cccab3ba3b8f7eb147e72ebbd
diff --git a/internal/common/omci/omci_base.go b/internal/common/omci/omci_base.go
index aa3a611..2c150a5 100644
--- a/internal/common/omci/omci_base.go
+++ b/internal/common/omci/omci_base.go
@@ -21,27 +21,43 @@
 	"encoding/hex"
 	"errors"
 	"fmt"
+
 	"github.com/google/gopacket"
 	"github.com/opencord/omci-lib-go/v2"
 	log "github.com/sirupsen/logrus"
 )
 
+const DeviceIdentifierPos = 3
+
 // ParseOpenOltOmciPacket receive an OMCI packet in the openolt format and returns
 // an OMCI Layer as per omci-lib-go
 func ParseOpenOltOmciPacket(pkt []byte) (gopacket.Packet, *omci.OMCI, error) {
 	rxMsg := HexDecode(pkt)
-
-	// NOTE this is may not be needed, VOLTHA sends the correct message
-	if len(rxMsg) >= 44 {
-		trailerLenData := rxMsg[42:44]
-		trailerLen := binary.BigEndian.Uint16(trailerLenData)
-		if trailerLen != 40 { // invalid base Format entry -> autocorrect
-			binary.BigEndian.PutUint16(rxMsg[42:44], 40)
-			omciLogger.Trace("cc-corrected-omci-message: trailer len inserted")
+	if len(rxMsg) < 10 {
+		omciLogger.WithFields(log.Fields{"Length": len(rxMsg)}).Error("received omci message is generally too small - abort")
+		return nil, nil, errors.New("received omci message is generally too small - abort")
+	}
+	if rxMsg[DeviceIdentifierPos] == byte(omci.BaselineIdent) {
+		// NOTE this is may not be needed, VOLTHA sends the correct message
+		if len(rxMsg) >= 44 {
+			trailerLenData := rxMsg[42:44]
+			trailerLen := binary.BigEndian.Uint16(trailerLenData)
+			if trailerLen != 40 { // invalid base Format entry -> autocorrect
+				binary.BigEndian.PutUint16(rxMsg[42:44], 40)
+				omciLogger.Trace("cc-corrected-omci-message: trailer len inserted")
+			}
+		} else {
+			omciLogger.WithFields(log.Fields{"Length": len(rxMsg)}).Error("received omci-message too small for OmciBaseFormat - abort")
+			return nil, nil, errors.New("received omci-message too small for OmciBaseFormat - abort")
+		}
+	} else if rxMsg[DeviceIdentifierPos] == byte(omci.ExtendedIdent) {
+		if len(rxMsg) > 1980 {
+			omciLogger.WithFields(log.Fields{"Length": len(rxMsg)}).Error("received omci-message with wrong length for OmciExtendedFormat - abort")
+			return nil, nil, errors.New("received omci-message with wrong length for OmciExtendedFormat - abort")
 		}
 	} else {
-		omciLogger.WithFields(log.Fields{"Length": len(rxMsg)}).Error("received omci-message too small for OmciBaseFormat - abort")
-		return nil, nil, errors.New("received omci-message too small for OmciBaseFormat - abort")
+		omciLogger.WithFields(log.Fields{"DeviceIdent": rxMsg[DeviceIdentifierPos]}).Error("received omci-message with wrong Device Identifier - abort")
+		return nil, nil, errors.New("received omci-message with wrong Device Identifier - abort")
 	}
 
 	packet := gopacket.NewPacket(rxMsg, omci.LayerTypeOMCI, gopacket.NoCopy)