VOL-4337: Code upgrade for 3/2020 G.988 support and remaining Extended Message Set support

Change-Id: I6c5e1a167216ad9b51e9da89460e9909465ae1bc
diff --git a/omci_test.go b/omci_test.go
index b383881..86c9a59 100644
--- a/omci_test.go
+++ b/omci_test.go
@@ -28,6 +28,51 @@
 	"testing"
 )
 
+var allBaselineTypes = []MessageType{
+	CreateRequestType,
+	CreateResponseType,
+	DeleteRequestType,
+	DeleteResponseType,
+	SetRequestType,
+	SetResponseType,
+	GetRequestType,
+	GetResponseType,
+	GetAllAlarmsRequestType,
+	GetAllAlarmsResponseType,
+	GetAllAlarmsNextRequestType,
+	GetAllAlarmsNextResponseType,
+	MibUploadRequestType,
+	MibUploadResponseType,
+	MibUploadNextRequestType,
+	MibUploadNextResponseType,
+	MibResetRequestType,
+	MibResetResponseType,
+	TestRequestType,
+	TestResponseType,
+	StartSoftwareDownloadRequestType,
+	StartSoftwareDownloadResponseType,
+	DownloadSectionRequestType,
+	DownloadSectionRequestWithResponseType,
+	DownloadSectionResponseType,
+	EndSoftwareDownloadRequestType,
+	EndSoftwareDownloadResponseType,
+	ActivateSoftwareRequestType,
+	ActivateSoftwareResponseType,
+	CommitSoftwareRequestType,
+	CommitSoftwareResponseType,
+	SynchronizeTimeRequestType,
+	SynchronizeTimeResponseType,
+	RebootRequestType,
+	RebootResponseType,
+	GetNextRequestType,
+	GetNextResponseType,
+	GetCurrentDataRequestType,
+	GetCurrentDataResponseType,
+	AlarmNotificationType,
+	AttributeValueChangeType,
+	TestResultType,
+}
+
 func stringToPacket(input string) ([]byte, error) {
 	var p []byte
 
@@ -73,48 +118,11 @@
 	assert.NotEqual(t, unknownString, extendedString)
 }
 
-// MibResetRequestTest tests decode/encode of a MIB Reset Request
-func TestMibResetRequestMessage(t *testing.T) {
-	mibResetRequest := "00014F0A000200000000000000000000" +
-		"00000000000000000000000000000000" +
-		"000000000000000000000028"
+func TestOmciCanDecodeAndNextLayer(t *testing.T) {
 
-	data, err := stringToPacket(mibResetRequest)
-	assert.NoError(t, err)
+	baselineString := BaselineIdent.String()
+	assert.NotZero(t, len(baselineString))
 
-	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-
-	omciLayer := packet.Layer(LayerTypeOMCI)
-	assert.NotNil(t, packet)
-
-	omciMsg, ok := omciLayer.(*OMCI)
-	assert.True(t, ok)
-	assert.Equal(t, omciMsg.TransactionID, uint16(1))
-	assert.Equal(t, omciMsg.MessageType, MibResetRequestType)
-	assert.Equal(t, omciMsg.Length, uint16(40))
-
-	msgLayer := packet.Layer(LayerTypeMibResetRequest)
-	assert.NotNil(t, msgLayer)
-
-	omciMsg2, ok2 := msgLayer.(*MibResetRequest)
-	assert.True(t, ok2)
-	assert.Equal(t, omciMsg2.EntityClass, OnuDataClassID)
-	assert.Equal(t, omciMsg2.EntityInstance, uint16(0))
-
-	// Test serialization back to former string
-	var options gopacket.SerializeOptions
-	options.FixLengths = true
-
-	buffer := gopacket.NewSerializeBuffer()
-	err = gopacket.SerializeLayers(buffer, options, omciMsg, omciMsg2)
-	assert.NoError(t, err)
-
-	outgoingPacket := buffer.Bytes()
-	reconstituted := packetToString(outgoingPacket)
-	assert.Equal(t, strings.ToLower(mibResetRequest), reconstituted)
-}
-
-func TestCreateGalEthernetProfile(t *testing.T) {
 	createGalEthernetProfile := "0002440A011000010030000000000000" +
 		"00000000000000000000000000000000" +
 		"000000000000000000000028"
@@ -130,1206 +138,144 @@
 
 	omciMsg, ok := omciLayer.(*OMCI)
 	assert.True(t, ok)
-	assert.Equal(t, omciMsg.TransactionID, uint16(2))
-	assert.Equal(t, omciMsg.MessageType, CreateRequestType)
-	assert.Equal(t, omciMsg.Length, uint16(40))
+	assert.Equal(t, LayerTypeOMCI, omciMsg.LayerType())
+	assert.Equal(t, LayerTypeOMCI, omciMsg.CanDecode())
+	assert.Equal(t, LayerTypeCreateRequest, omciMsg.NextLayerType())
 
 	msgLayer := packet.Layer(LayerTypeCreateRequest)
 	assert.NotNil(t, msgLayer)
 
 	omciMsg2, ok2 := msgLayer.(*CreateRequest)
 	assert.True(t, ok2)
-	assert.Equal(t, omciMsg2.EntityClass, GalEthernetProfileClassID)
-	assert.Equal(t, omciMsg2.EntityInstance, uint16(1))
-
-	// Test serialization back to former string
-	var options gopacket.SerializeOptions
-	options.FixLengths = true
-
-	buffer := gopacket.NewSerializeBuffer()
-	err = gopacket.SerializeLayers(buffer, options, omciMsg, omciMsg2)
-	assert.NoError(t, err)
-
-	outgoingPacket := buffer.Bytes()
-	reconstituted := packetToString(outgoingPacket)
-	assert.Equal(t, strings.ToLower(createGalEthernetProfile), reconstituted)
+	assert.Equal(t, LayerTypeCreateRequest, omciMsg2.LayerType())
+	assert.Equal(t, LayerTypeCreateRequest, omciMsg2.CanDecode())
+	assert.Equal(t, gopacket.LayerTypePayload, omciMsg2.NextLayerType())
 }
 
-func TestSetTCont(t *testing.T) {
-	setTCont := "0003480A010680008000040000000000" +
-		"00000000000000000000000000000000" +
-		"000000000000000000000028"
-
-	data, err := stringToPacket(setTCont)
+func TestOmciHeaderVeryShort(t *testing.T) {
+	// Need at least 6 octets in OMCI header to decode Message Type
+	message := "000159"
+	data, err := stringToPacket(message)
 	assert.NoError(t, err)
 
 	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
 	assert.NotNil(t, packet)
 
 	omciLayer := packet.Layer(LayerTypeOMCI)
-	assert.NotNil(t, packet)
+	assert.Nil(t, omciLayer)
 
-	omciMsg, ok := omciLayer.(*OMCI)
-	assert.True(t, ok)
-	assert.Equal(t, omciMsg.TransactionID, uint16(3))
-	assert.Equal(t, omciMsg.MessageType, SetRequestType)
-	assert.Equal(t, omciMsg.Length, uint16(40))
-
-	msgLayer := packet.Layer(LayerTypeSetRequest)
-	assert.NotNil(t, msgLayer)
-
-	omciMsg2, ok2 := msgLayer.(*SetRequest)
-	assert.True(t, ok2)
-	assert.Equal(t, omciMsg2.EntityClass, TContClassID)
-	assert.Equal(t, omciMsg2.EntityInstance, uint16(0x8000))
-
-	attributes := omciMsg2.Attributes
-	assert.Equal(t, len(attributes), 2)
-
-	// TODO: Create generic test to look up the name from definition
-	// Here 1 is the index in the attribute definition map of a TCONT that points
-	// to the AllocID attribute.
-	value, ok3 := attributes["AllocId"]
-	assert.True(t, ok3)
-	assert.Equal(t, value, uint16(1024))
-
-	// Test serialization back to former string
-	var options gopacket.SerializeOptions
-	options.FixLengths = true
-
-	buffer := gopacket.NewSerializeBuffer()
-	err = gopacket.SerializeLayers(buffer, options, omciMsg, omciMsg2)
-	assert.NoError(t, err)
-
-	outgoingPacket := buffer.Bytes()
-	reconstituted := packetToString(outgoingPacket)
-	assert.Equal(t, strings.ToLower(setTCont), reconstituted)
+	badLayer := packet.Layer(gopacket.LayerTypeDecodeFailure)
+	assert.NotNil(t, badLayer)
+	assert.True(t, packet.Metadata().Truncated)
 }
 
-func TestCreate8021pMapperService_profile(t *testing.T) {
-	create8021pMapperServiceProfile := "0007440A00828000ffffffffffffffff" +
-		"ffffffffffffffffffff000000000000" +
-		"000000000000000000000028"
-
-	data, err := stringToPacket(create8021pMapperServiceProfile)
-	assert.NoError(t, err)
-
-	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-	assert.NotNil(t, packet)
-
-	omciLayer := packet.Layer(LayerTypeOMCI)
-	assert.NotNil(t, packet)
-
-	omciMsg, ok := omciLayer.(*OMCI)
-	assert.True(t, ok)
-	assert.Equal(t, omciMsg.TransactionID, uint16(7))
-	assert.Equal(t, omciMsg.MessageType, CreateRequestType)
-	assert.Equal(t, omciMsg.Length, uint16(40))
-
-	msgLayer := packet.Layer(LayerTypeCreateRequest)
-	assert.NotNil(t, msgLayer)
-
-	createRequest, ok2 := msgLayer.(*CreateRequest)
-	assert.True(t, ok2)
-	assert.Equal(t, createRequest.EntityClass, Ieee8021PMapperServiceProfileClassID)
-	assert.Equal(t, createRequest.EntityInstance, uint16(0x8000))
-
-	attributes := createRequest.Attributes
-	assert.NotNil(t, attributes)
-	assert.Equal(t, len(attributes), 13)
-
-	// As this is a create request, gather up all set-by-create attributes
-	// make sure we got them all, and nothing else
-	meDefinition, omciErr := LoadManagedEntityDefinition(createRequest.EntityClass)
-	assert.NotNil(t, omciErr)
-	assert.Equal(t, omciErr.StatusCode(), Success)
-
-	attrDefs := meDefinition.GetAttributeDefinitions()
-
-	for index := uint(1); index <= uint(9); index++ {
-		attrName := attrDefs[index].GetName()
-		value, ok := attributes[attrName]
-		assert.True(t, ok)
-
-		value16, ok3 := value.(uint16)
-		assert.True(t, ok3)
-		assert.Equal(t, value16, uint16(0xffff))
-	}
-
-	sbcMask := getSbcMask(meDefinition)
-	for index := uint(1); index < uint(len(attrDefs)); index++ {
-		attrName := attrDefs[index].GetName()
-
-		if sbcMask&uint16(1<<(uint)(16-index)) != 0 {
-			_, ok3 := attributes[attrName]
-			assert.True(t, ok3)
-		} else {
-			_, ok3 := attributes[attrName]
-			assert.False(t, ok3)
+func TestOmciHeaderBaselineShort(t *testing.T) {
+	for _, msgType := range allBaselineTypes {
+		// Smallest message baseline is 40 bytes (length and MIC optional)
+		tid := 1
+		if msgType == AlarmNotificationType || msgType == AttributeValueChangeType {
+			tid = 0
 		}
-	}
-	// TODO: Individual attribute tests here if needed
-	// Test serialization back to former string
-	var options gopacket.SerializeOptions
-	options.FixLengths = true
+		msg39 := fmt.Sprintf("%04x%02x0a0002000000000000000000000000000000000000000000000000000000000000000000",
+			uint16(tid), uint8(msgType))
 
-	buffer := gopacket.NewSerializeBuffer()
-	err = gopacket.SerializeLayers(buffer, options, omciMsg, createRequest)
-	assert.NoError(t, err)
-
-	outgoingPacket := buffer.Bytes()
-	reconstituted := packetToString(outgoingPacket)
-	assert.Equal(t, strings.ToLower(create8021pMapperServiceProfile), reconstituted)
-}
-
-func TestCreate_macBridgeService_profile(t *testing.T) {
-	var createMacBridgeServiceProfile = "000B440A002D02010001008000140002" +
-		"000f0001000000000000000000000000" +
-		"000000000000000000000028"
-
-	data, err := stringToPacket(createMacBridgeServiceProfile)
-	assert.NoError(t, err)
-
-	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-	assert.NotNil(t, packet)
-
-	omciLayer := packet.Layer(LayerTypeOMCI)
-	assert.NotNil(t, packet)
-
-	omciMsg, ok := omciLayer.(*OMCI)
-	assert.True(t, ok)
-	assert.Equal(t, omciMsg.TransactionID, uint16(0xb))
-	assert.Equal(t, omciMsg.MessageType, CreateRequestType)
-	assert.Equal(t, omciMsg.Length, uint16(40))
-
-	msgLayer := packet.Layer(LayerTypeCreateRequest)
-	assert.NotNil(t, msgLayer)
-
-	createRequest, ok2 := msgLayer.(*CreateRequest)
-	assert.True(t, ok2)
-	assert.Equal(t, createRequest.EntityClass, MacBridgeServiceProfileClassID)
-	assert.Equal(t, createRequest.EntityInstance, uint16(0x201))
-
-	attributes := createRequest.Attributes
-	assert.NotNil(t, attributes)
-
-	// As this is a create request, gather up all set-by-create attributes
-	// make sure we got them all, and nothing else
-	meDefinition, omciErr := LoadManagedEntityDefinition(createRequest.EntityClass)
-	assert.NotNil(t, omciErr)
-	assert.Equal(t, omciErr.StatusCode(), Success)
-
-	attrDefs := meDefinition.GetAttributeDefinitions()
-
-	sbcMask := getSbcMask(meDefinition)
-	for index := uint(1); index < uint(len(attrDefs)); index++ {
-		attrName := attrDefs[index].GetName()
-
-		if sbcMask&uint16(1<<(uint)(16-index)) != 0 {
-			_, ok3 := attributes[attrName]
-			assert.True(t, ok3)
-		} else {
-			_, ok3 := attributes[attrName]
-			assert.False(t, ok3)
-		}
-	}
-	// Test serialization back to former string
-	var options gopacket.SerializeOptions
-	options.FixLengths = true
-
-	buffer := gopacket.NewSerializeBuffer()
-	err = gopacket.SerializeLayers(buffer, options, omciMsg, createRequest)
-	assert.NoError(t, err)
-
-	outgoingPacket := buffer.Bytes()
-	reconstituted := packetToString(outgoingPacket)
-	assert.Equal(t, strings.ToLower(createMacBridgeServiceProfile), reconstituted)
-}
-
-func TestCreateGemPortNetworkCtp(t *testing.T) {
-	createGemPortNetworkCtp := "000C440A010C01000400800003010000" +
-		"00000000000000000000000000000000" +
-		"000000000000000000000028"
-
-	data, err := stringToPacket(createGemPortNetworkCtp)
-	assert.NoError(t, err)
-
-	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-	assert.NotNil(t, packet)
-
-	omciLayer := packet.Layer(LayerTypeOMCI)
-	assert.NotNil(t, packet)
-
-	omciMsg, ok := omciLayer.(*OMCI)
-	assert.True(t, ok)
-	assert.Equal(t, omciMsg.TransactionID, uint16(0xc))
-	assert.Equal(t, omciMsg.MessageType, CreateRequestType)
-	assert.Equal(t, omciMsg.Length, uint16(40))
-
-	msgLayer := packet.Layer(LayerTypeCreateRequest)
-	assert.NotNil(t, msgLayer)
-
-	createRequest, ok2 := msgLayer.(*CreateRequest)
-	assert.True(t, ok2)
-	assert.Equal(t, createRequest.EntityClass, GemPortNetworkCtpClassID)
-	assert.Equal(t, createRequest.EntityInstance, uint16(0x100))
-
-	attributes := createRequest.Attributes
-	assert.NotNil(t, attributes)
-
-	// As this is a create request, gather up all set-by-create attributes
-	// make sure we got them all, and nothing else
-	meDefinition, omciErr := LoadManagedEntityDefinition(createRequest.EntityClass)
-	assert.NotNil(t, omciErr)
-	assert.Equal(t, omciErr.StatusCode(), Success)
-
-	attrDefs := meDefinition.GetAttributeDefinitions()
-
-	sbcMask := getSbcMask(meDefinition)
-	for index := uint(1); index < uint(len(attrDefs)); index++ {
-		attrName := attrDefs[index].GetName()
-
-		if sbcMask&uint16(1<<(uint)(16-index)) != 0 {
-			_, ok3 := attributes[attrName]
-			assert.True(t, ok3)
-		} else {
-			_, ok3 := attributes[attrName]
-			assert.False(t, ok3)
-		}
-	}
-	// Test serialization back to former string
-	var options gopacket.SerializeOptions
-	options.FixLengths = true
-
-	buffer := gopacket.NewSerializeBuffer()
-	err = gopacket.SerializeLayers(buffer, options, omciMsg, createRequest)
-	assert.NoError(t, err)
-
-	outgoingPacket := buffer.Bytes()
-	reconstituted := packetToString(outgoingPacket)
-	assert.Equal(t, strings.ToLower(createGemPortNetworkCtp), reconstituted)
-}
-
-// TODO: Uncomment as encode/decode supported
-//func TestMulticastGemInterworkingTp(t *testing.T) {
-//
-//	multicastGemInterworkingTp := "0011440A011900060104000001000000" +
-//		"00000000000000000000000000000000" +
-//		"000000000000000000000028"
-//
-//	data, err := stringToPacket(multicastGemInterworkingTp)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	fmt.Println(packet)
-//
-//	customLayer := packet.Layer(LayerTypeOMCI)
-//	assert.NotNil(t, customLayer)
-//}
-//
-//func TestCreateGemInteworkingTp(t *testing.T) {
-//
-//	createGemInteworkingTp := "0012440A010A80010100058000000000" +
-//		"01000000000000000000000000000000" +
-//		"000000000000000000000028"
-//
-//	data, err := stringToPacket(createGemInteworkingTp)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	fmt.Println(packet)
-//
-//	customLayer := packet.Layer(LayerTypeOMCI)
-//	assert.NotNil(t, customLayer)
-//}
-
-func TestSet8021pMapperServiceProfile(t *testing.T) {
-	set8021pMapperServiceProfile := "0016480A008280004000800100000000" +
-		"00000000000000000000000000000000" +
-		"000000000000000000000028"
-
-	data, err := stringToPacket(set8021pMapperServiceProfile)
-	assert.NoError(t, err)
-
-	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-	assert.NotNil(t, packet)
-
-	omciLayer := packet.Layer(LayerTypeOMCI)
-	assert.NotNil(t, packet)
-
-	omciMsg, ok := omciLayer.(*OMCI)
-	assert.True(t, ok)
-	assert.Equal(t, omciMsg.TransactionID, uint16(0x16))
-	assert.Equal(t, omciMsg.MessageType, SetRequestType)
-	assert.Equal(t, omciMsg.Length, uint16(40))
-
-	msgLayer := packet.Layer(LayerTypeSetRequest)
-	assert.NotNil(t, msgLayer)
-
-	setRequest, ok2 := msgLayer.(*SetRequest)
-	assert.True(t, ok2)
-	assert.Equal(t, setRequest.EntityClass, Ieee8021PMapperServiceProfileClassID)
-	assert.Equal(t, setRequest.EntityInstance, uint16(0x8000))
-
-	attributes := setRequest.Attributes
-	assert.NotNil(t, attributes)
-	assert.Equal(t, len(attributes), 2)
-
-	// Test serialization back to former string
-	var options gopacket.SerializeOptions
-	options.FixLengths = true
-
-	buffer := gopacket.NewSerializeBuffer()
-	err = gopacket.SerializeLayers(buffer, options, omciMsg, setRequest)
-	assert.NoError(t, err)
-
-	outgoingPacket := buffer.Bytes()
-	reconstituted := packetToString(outgoingPacket)
-	assert.Equal(t, strings.ToLower(set8021pMapperServiceProfile), reconstituted)
-}
-
-// TODO: Uncomment as encode/decode supported
-//func TestCreateMacBridgePortConfigurationData(t *testing.T) {
-//
-//	createMacBridgePortConfigurationData := "001A440A002F21010201020380000000" +
-//		"00000000000000000000000000000000" +
-//		"000000000000000000000028"
-//
-//	data, err := stringToPacket(createMacBridgePortConfigurationData)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	fmt.Println(packet)
-//
-//	customLayer := packet.Layer(LayerTypeOMCI)
-//	assert.NotNil(t, customLayer)
-//}
-//
-//func TestCreateVlanTaggingFilterData(t *testing.T) {
-//
-//	createVlanTaggingFilterData := "001F440A005421010400000000000000" +
-//		"00000000000000000000000000000000" +
-//		"100100000000000000000028"
-//
-//	data, err := stringToPacket(createVlanTaggingFilterData)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	fmt.Println(packet)
-//
-//	customLayer := packet.Layer(LayerTypeOMCI)
-//	assert.NotNil(t, customLayer)
-//}
-//
-//func TestCreateExtendedVlanTaggingOperationConfigurationData(t *testing.T) {
-//
-//	createExtendedVlanTaggingOperationConfigurationData := "0023440A00AB02020A04010000000000" +
-//		"00000000000000000000000000000000" +
-//		"000000000000000000000028"
-//
-//	data, err := stringToPacket(createExtendedVlanTaggingOperationConfigurationData)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	fmt.Println(packet)
-//}
-//
-//func TestSetExtendedVlanTagging_operationConfigurationData(t *testing.T) {
-//
-//	setExtendedVlanTaggingOperationConfigurationData := "0024480A00AB02023800810081000000" +
-//		"00000000000000000000000000000000" +
-//		"000000000000000000000028"
-//
-//	data, err := stringToPacket(setExtendedVlanTaggingOperationConfigurationData)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	fmt.Println(packet)
-//
-//	customLayer := packet.Layer(LayerTypeOMCI)
-//	assert.NotNil(t, customLayer)
-//}
-//
-//func TestSetExtendedVlanTagging1(t *testing.T) {
-//
-//	setExtendedVlanTagging1 := "0025480A00AB02020400f00000008200" +
-//		"5000402f000000082004000000000000" +
-//		"000000000000000000000028"
-//
-//	data, err := stringToPacket(setExtendedVlanTagging1)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	fmt.Println(packet)
-//
-//	customLayer := packet.Layer(LayerTypeOMCI)
-//	assert.NotNil(t, customLayer)
-//}
-//
-//func TestSetExtendedVlanTagging2(t *testing.T) {
-//
-//	setExtendedVlanTagging2 := "0026480A00AB02020400F00000008200" +
-//		"d000402f00000008200c000000000000" +
-//		"000000000000000000000028"
-//
-//	data, err := stringToPacket(setExtendedVlanTagging2)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	fmt.Println(packet)
-//
-//	customLayer := packet.Layer(LayerTypeOMCI)
-//	assert.NotNil(t, customLayer)
-//}
-//
-//func TestCreateMacBridgePortConfigurationData2(t *testing.T) {
-//
-//	createMacBridgePortConfigurationData2 := "0029440A002F02010201010b04010000" +
-//		"00000000000000000000000000000000" +
-//		"000000000000000000000028"
-//
-//	data, err := stringToPacket(createMacBridgePortConfigurationData2)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	fmt.Println(packet)
-//
-//	customLayer := packet.Layer(LayerTypeOMCI)
-//	assert.NotNil(t, customLayer)
-//}
-
-func TestMibUpload(t *testing.T) {
-	mibUpload := "00304D0A000200000000000000000000" +
-		"00000000000000000000000000000000" +
-		"000000000000000000000028"
-
-	data, err := stringToPacket(mibUpload)
-	assert.NoError(t, err)
-
-	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-	assert.NotNil(t, packet)
-
-	omciLayer := packet.Layer(LayerTypeOMCI)
-	assert.NotNil(t, packet)
-
-	omciMsg, ok := omciLayer.(*OMCI)
-	assert.True(t, ok)
-	assert.Equal(t, omciMsg.TransactionID, uint16(0x30))
-	assert.Equal(t, omciMsg.MessageType, MibUploadRequestType)
-	assert.Equal(t, omciMsg.Length, uint16(40))
-
-	msgLayer := packet.Layer(LayerTypeMibUploadRequest)
-	assert.NotNil(t, msgLayer)
-
-	uploadRequest, ok2 := msgLayer.(*MibUploadRequest)
-	assert.True(t, ok2)
-	assert.Equal(t, uploadRequest.EntityClass, OnuDataClassID)
-	assert.Equal(t, uploadRequest.EntityInstance, uint16(0))
-
-	// Test serialization back to former string
-	var options gopacket.SerializeOptions
-	options.FixLengths = true
-
-	buffer := gopacket.NewSerializeBuffer()
-	err = gopacket.SerializeLayers(buffer, options, omciMsg, uploadRequest)
-	assert.NoError(t, err)
-
-	outgoingPacket := buffer.Bytes()
-	reconstituted := packetToString(outgoingPacket)
-	assert.Equal(t, strings.ToLower(mibUpload), reconstituted)
-}
-
-// TODO: Uncomment as encode/decode supported
-//func TestEnhSecurityAvc(t *testing.T) {
-//
-//	enhSecurityAvc := "0000110a014c0000008000202020202020202020202020202020202020202020" +
-//		"2020202020202020000000280be43cf4"
-//
-//	data, err := stringToPacket(enhSecurityAvc)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	fmt.Println(packet)
-//
-//	customLayer := packet.Layer(LayerTypeOMCI)
-//	assert.NotNil(t, customLayer)
-//}
-
-//func TestAlarmMessage(t *testing.T) {
-//	alarmMessage := "0000100a00050101000000000000000000000000000000000000000000000000" +
-//		"0000000220000000000000280be43cf4"
-//
-//	data, err := stringToPacket(alarmMessage)
-//	assert.NoError(t, err)
-//
-//	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//	assert.NotNil(t, packet)
-//
-//	omciLayer := packet.Layer(LayerTypeOMCI)
-//	assert.NotNil(t, packet)
-//
-//	omciMsg, ok := omciLayer.(*OMCI)
-//	assert.True(t, ok)
-//	assert.Equal(t, omciMsg.TransactionID, uint16(0))
-//	assert.Equal(t, omciMsg.MessageType, byte(AlarmNotification))
-//	assert.Equal(t, omciMsg.Length, uint16(40))
-//
-//	msgLayer := packet.Layer(LayerTypeAlarmNotification)
-//	assert.Nil(t, msgLayer)		// TODO: Fix decode
-//
-//	//assert.NotNil(t, msgLayer)
-//	//
-//	//alarmNotification, ok2 := msgLayer.(*AlarmNotificationMsg)
-//	//assert.True(t, ok2)
-//	//// TODO: Repace with actual entity class
-//	//assert.Equal(t, alarmNotification.EntityClass, uint16(0x0005))
-//	//assert.Equal(t, alarmNotification.EntityInstance, uint16(0x101))
-//	// TODO: Decode alarm bits
-//
-//	// TODO: Serialize frame and test with original
-//}
-
-func TestOnuRebootRequest(t *testing.T) {
-	onuRebootRequest := "0016590a01000000000000000000000000000" +
-		"0000000000000000000000000000000000000" +
-		"00000000000028"
-
-	data, err := stringToPacket(onuRebootRequest)
-	assert.NoError(t, err)
-
-	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-	assert.NotNil(t, packet)
-
-	omciLayer := packet.Layer(LayerTypeOMCI)
-	assert.NotNil(t, packet)
-
-	omciMsg, ok := omciLayer.(*OMCI)
-	assert.True(t, ok)
-	assert.Equal(t, omciMsg.TransactionID, uint16(0x16))
-	assert.Equal(t, omciMsg.MessageType, RebootRequestType)
-	assert.Equal(t, omciMsg.Length, uint16(40))
-
-	msgLayer := packet.Layer(LayerTypeRebootRequest)
-	assert.NotNil(t, msgLayer) // TODO: Fix decode
-
-	//assert.NotNil(t, msgLayer)
-	//
-	//rebootRequest, ok2 := msgLayer.(*RebootRequest)
-	//assert.True(t, ok2)
-	//assert.Equal(t, rebootRequest.EntityClass, OnuDataClassID)
-	//assert.Equal(t, rebootRequest.EntityInstance, uint16(0x8000))
-
-	// TODO: Test Decoded flags
-
-	// TODO: Serialize frame and test with original
-}
-
-func TestMibUploadNextSequence(t *testing.T) {
-	mibUploadNextSequence := [...]string{
-		"00032e0a00020000000200008000000000000000000000000000000000000000000000000000000000000028",
-		"00042e0a0002000000050101f0002f2f05202020202020202020202020202020202020202000000000000028",
-		"00052e0a00020000000501010f80202020202020202020202020202020202020202000000000000000000028",
-		"00062e0a0002000000050104f000303001202020202020202020202020202020202020202000000000000028",
-		"00072e0a00020000000501040f80202020202020202020202020202020202020202000000000000000000028",
-		"00082e0a0002000000050180f000f8f801202020202020202020202020202020202020202000000000000028",
-		"00092e0a00020000000501800f80202020202020202020202020202020202020202000000000000000000028",
-		"000a2e0a0002000000060101f0002f054252434d12345678000000000000000000000000000c000000000028",
-		"000b2e0a00020000000601010f004252434d0000000000000000000000000000000000000000000000000028",
-		"000c2e0a000200000006010100f8202020202020202020202020202020202020202000000000000000000028",
-		"000d2e0a00020000000601010004000000000000000000000000000000000000000000000000000000000028",
-		"000e2e0a0002000000060104f00030014252434d12345678000000000000000000000000000c000000000028",
-		"000f2e0a00020000000601040f004252434d0000000000000000000000000000000000000000000000000028",
-		"00102e0a000200000006010400f8202020202020202020202020202020202020202000000800000000000028",
-		"00112e0a00020000000601040004000000000000000000000000000000000000000000000000000000000028",
-		"00122e0a0002000000060180f000f8014252434d12345678000000000000000000000000000c000000000028",
-		"00132e0a00020000000601800f004252434d0000000000000000000000000000000000000000000000000028",
-		"00142e0a000200000006018000f8202020202020202020202020202020202020202000084040000000000028",
-		"00152e0a00020000000601800004000000000000000000000000000000000000000000000000000000000028",
-		"00162e0a0002000000070000f0003530323247574f3236363230303301010100000000000000000000000028",
-		"00172e0a0002000000070001f0003530323247574f3236363230303300000100000000000000000000000028",
-		"00182e0a0002000000830000c000202020202020202020202020202020202020202020202020000000000028",
-		"00192e0a00020000008300002000202020202020202020202020202000000000000000000000000000000028",
-		"001a2e0a00020000008300001000000000000000000000000000000000000000000000000000000000000028",
-		"001b2e0a0002000000850000ffe0000000000000000000000000000000000000000000000000000000000028",
-		"001c2e0a0002000000860001c00000001018aaaa000000000000000000000000000000000000000000000028",
-		"001d2e0a00020000008600012000000000000000000000000000000000000000000000000000000000000028",
-		"001e2e0a00020000008600011f80000000000000000000000000000000000000000000000000000000000028",
-		"001f2e0a00020000008600010078000000000000000000000000000000000000000000000000000000000028",
-		"00202e0a00020000008600010004000000000000000000000000000000000000000000000000000000000028",
-		"00212e0a00020000008600010002000000000000000000000000000000000000000000000000000000000028",
-		"00222e0a0002000001000000e0004252434d00000000000000000000000000004252434d1234567800000028",
-		"00232e0a00020000010000001f80000000000000000000000000000000000000000000000000000000000028",
-		"00242e0a00020000010000000040000000000000000000000000000000000000000000000000000000000028",
-		"00252e0a00020000010000000038000000000000000000000000000003000000000000000000000000000028",
-		"00262e0a0002000001010000f80042564d344b3030425241303931352d3030383300b3000001010000000028",
-		"00272e0a000200000101000007f8000000010020027c85630016000030000000000000000000000000000028",
-		"00282e0a0002000001068000e00000ff01010000000000000000000000000000000000000000000000000028",
-		"00292e0a0002000001068001e00000ff01010000000000000000000000000000000000000000000000000028",
-		"002a2e0a0002000001068002e00000ff01010000000000000000000000000000000000000000000000000028",
-		"002b2e0a0002000001068003e00000ff01010000000000000000000000000000000000000000000000000028",
-		"002c2e0a0002000001068004e00000ff01010000000000000000000000000000000000000000000000000028",
-		"002d2e0a0002000001068005e00000ff01010000000000000000000000000000000000000000000000000028",
-		"002e2e0a0002000001068006e00000ff01010000000000000000000000000000000000000000000000000028",
-		"002f2e0a0002000001068007e00000ff01010000000000000000000000000000000000000000000000000028",
-		"00302e0a0002000001078001ffff01000800300000050900000000ffff000000008181000000000000000028",
-		"00312e0a0002000001080401f000000000000401000000000000000000000000000000000000000000000028",
-		"00322e0a0002000001150401fff0000080008000000000040100000000010000000000000000000000000028",
-		"00332e0a0002000001150401000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00342e0a0002000001150402fff0000080008000000000040100010000010000000000000000000000000028",
-		"00352e0a0002000001150402000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00362e0a0002000001150403fff0000080008000000000040100020000010000000000000000000000000028",
-		"00372e0a0002000001150403000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00382e0a0002000001150404fff0000080008000000000040100030000010000000000000000000000000028",
-		"00392e0a0002000001150404000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"003a2e0a0002000001150405fff0000080008000000000040100040000010000000000000000000000000028",
-		"003b2e0a0002000001150405000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"003c2e0a0002000001150406fff0000080008000000000040100050000010000000000000000000000000028",
-		"003d2e0a0002000001150406000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"003e2e0a0002000001150407fff0000080008000000000040100060000010000000000000000000000000028",
-		"003f2e0a0002000001150407000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00402e0a0002000001150408fff0000080008000000000040100070000010000000000000000000000000028",
-		"00412e0a0002000001150408000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00422e0a0002000001158000fff0000100010000000000800000000000010000000000000000000000000028",
-		"00432e0a0002000001158000000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00442e0a0002000001158001fff0000100010000000000800000010000010000000000000000000000000028",
-		"00452e0a0002000001158001000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00462e0a0002000001158002fff0000100010000000000800000020000010000000000000000000000000028",
-		"00472e0a0002000001158002000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00482e0a0002000001158003fff0000100010000000000800000030000010000000000000000000000000028",
-		"00492e0a0002000001158003000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"004a2e0a0002000001158004fff0000100010000000000800000040000010000000000000000000000000028",
-		"004b2e0a0002000001158004000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"004c2e0a0002000001158005fff0000100010000000000800000050000010000000000000000000000000028",
-		"004d2e0a0002000001158005000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"004e2e0a0002000001158006fff0000100010000000000800000060000010000000000000000000000000028",
-		"004f2e0a0002000001158006000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00502e0a0002000001158007fff0000100010000000000800000070000010000000000000000000000000028",
-		"00512e0a0002000001158007000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00522e0a0002000001158008fff0000100010000000000800100000000010000000000000000000000000028",
-		"00532e0a0002000001158008000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00542e0a0002000001158009fff0000100010000000000800100010000010000000000000000000000000028",
-		"00552e0a0002000001158009000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00562e0a000200000115800afff0000100010000000000800100020000010000000000000000000000000028",
-		"00572e0a000200000115800a000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00582e0a000200000115800bfff0000100010000000000800100030000010000000000000000000000000028",
-		"00592e0a000200000115800b000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"005a2e0a000200000115800cfff0000100010000000000800100040000010000000000000000000000000028",
-		"005b2e0a000200000115800c000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"005c2e0a000200000115800dfff0000100010000000000800100050000010000000000000000000000000028",
-		"005d2e0a000200000115800d000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"005e2e0a000200000115800efff0000100010000000000800100060000010000000000000000000000000028",
-		"005f2e0a000200000115800e000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00602e0a000200000115800ffff0000100010000000000800100070000010000000000000000000000000028",
-		"00612e0a000200000115800f000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00622e0a0002000001158010fff0000100010000000000800200000000010000000000000000000000000028",
-		"00632e0a0002000001158010000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00642e0a0002000001158011fff0000100010000000000800200010000010000000000000000000000000028",
-		"00652e0a0002000001158011000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00662e0a0002000001158012fff0000100010000000000800200020000010000000000000000000000000028",
-		"00672e0a0002000001158012000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00682e0a0002000001158013fff0000100010000000000800200030000010000000000000000000000000028",
-		"00692e0a0002000001158013000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"006a2e0a0002000001158014fff0000100010000000000800200040000010000000000000000000000000028",
-		"006b2e0a0002000001158014000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"006c2e0a0002000001158015fff0000100010000000000800200050000010000000000000000000000000028",
-		"006d2e0a0002000001158015000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"006e2e0a0002000001158016fff0000100010000000000800200060000010000000000000000000000000028",
-		"006f2e0a0002000001158016000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00702e0a0002000001158017fff0000100010000000000800200070000010000000000000000000000000028",
-		"00712e0a0002000001158017000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00722e0a0002000001158018fff0000100010000000000800300000000010000000000000000000000000028",
-		"00732e0a0002000001158018000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00742e0a0002000001158019fff0000100010000000000800300010000010000000000000000000000000028",
-		"00752e0a0002000001158019000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00762e0a000200000115801afff0000100010000000000800300020000010000000000000000000000000028",
-		"00772e0a000200000115801a000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00782e0a000200000115801bfff0000100010000000000800300030000010000000000000000000000000028",
-		"00792e0a000200000115801b000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"007a2e0a000200000115801cfff0000100010000000000800300040000010000000000000000000000000028",
-		"007b2e0a000200000115801c000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"007c2e0a000200000115801dfff0000100010000000000800300050000010000000000000000000000000028",
-		"007d2e0a000200000115801d000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"007e2e0a000200000115801efff0000100010000000000800300060000010000000000000000000000000028",
-		"007f2e0a000200000115801e000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00802e0a000200000115801ffff0000100010000000000800300070000010000000000000000000000000028",
-		"00812e0a000200000115801f000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00822e0a0002000001158020fff0000100010000000000800400000000010000000000000000000000000028",
-		"00832e0a0002000001158020000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00842e0a0002000001158021fff0000100010000000000800400010000010000000000000000000000000028",
-		"00852e0a0002000001158021000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00862e0a0002000001158022fff0000100010000000000800400020000010000000000000000000000000028",
-		"00872e0a0002000001158022000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00882e0a0002000001158023fff0000100010000000000800400030000010000000000000000000000000028",
-		"00892e0a0002000001158023000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"008a2e0a0002000001158024fff0000100010000000000800400040000010000000000000000000000000028",
-		"008b2e0a0002000001158024000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"008c2e0a0002000001158025fff0000100010000000000800400050000010000000000000000000000000028",
-		"008d2e0a0002000001158025000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"008e2e0a0002000001158026fff0000100010000000000800400060000010000000000000000000000000028",
-		"008f2e0a0002000001158026000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00902e0a0002000001158027fff0000100010000000000800400070000010000000000000000000000000028",
-		"00912e0a0002000001158027000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00922e0a0002000001158028fff0000100010000000000800500000000010000000000000000000000000028",
-		"00932e0a0002000001158028000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00942e0a0002000001158029fff0000100010000000000800500010000010000000000000000000000000028",
-		"00952e0a0002000001158029000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00962e0a000200000115802afff0000100010000000000800500020000010000000000000000000000000028",
-		"00972e0a000200000115802a000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00982e0a000200000115802bfff0000100010000000000800500030000010000000000000000000000000028",
-		"00992e0a000200000115802b000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"009a2e0a000200000115802cfff0000100010000000000800500040000010000000000000000000000000028",
-		"009b2e0a000200000115802c000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"009c2e0a000200000115802dfff0000100010000000000800500050000010000000000000000000000000028",
-		"009d2e0a000200000115802d000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"009e2e0a000200000115802efff0000100010000000000800500060000010000000000000000000000000028",
-		"009f2e0a000200000115802e000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00a02e0a000200000115802ffff0000100010000000000800500070000010000000000000000000000000028",
-		"00a12e0a000200000115802f000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00a22e0a0002000001158030fff0000100010000000000800600000000010000000000000000000000000028",
-		"00a32e0a0002000001158030000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00a42e0a0002000001158031fff0000100010000000000800600010000010000000000000000000000000028",
-		"00a52e0a0002000001158031000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00a62e0a0002000001158032fff0000100010000000000800600020000010000000000000000000000000028",
-		"00a72e0a0002000001158032000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00a82e0a0002000001158033fff0000100010000000000800600030000010000000000000000000000000028",
-		"00a92e0a0002000001158033000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00aa2e0a0002000001158034fff0000100010000000000800600040000010000000000000000000000000028",
-		"00ab2e0a0002000001158034000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00ac2e0a0002000001158035fff0000100010000000000800600050000010000000000000000000000000028",
-		"00ad2e0a0002000001158035000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00ae2e0a0002000001158036fff0000100010000000000800600060000010000000000000000000000000028",
-		"00af2e0a0002000001158036000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00b02e0a0002000001158037fff0000100010000000000800600070000010000000000000000000000000028",
-		"00b12e0a0002000001158037000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00b22e0a0002000001158038fff0000100010000000000800700000000010000000000000000000000000028",
-		"00b32e0a0002000001158038000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00b42e0a0002000001158039fff0000100010000000000800700010000010000000000000000000000000028",
-		"00b52e0a0002000001158039000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00b62e0a000200000115803afff0000100010000000000800700020000010000000000000000000000000028",
-		"00b72e0a000200000115803a000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00b82e0a000200000115803bfff0000100010000000000800700030000010000000000000000000000000028",
-		"00b92e0a000200000115803b000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00ba2e0a000200000115803cfff0000100010000000000800700040000010000000000000000000000000028",
-		"00bb2e0a000200000115803c000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00bc2e0a000200000115803dfff0000100010000000000800700050000010000000000000000000000000028",
-		"00bd2e0a000200000115803d000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00be2e0a000200000115803efff0000100010000000000800700060000010000000000000000000000000028",
-		"00bf2e0a000200000115803e000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00c02e0a000200000115803ffff0000100010000000000800700070000010000000000000000000000000028",
-		"00c12e0a000200000115803f000f0200020002000200ffff0900000000000000000000000000000000000028",
-		"00c22e0a0002000001168000f000800000000200000000000000000000000000000000000000000000000028",
-		"00c32e0a0002000001168001f000800000000200000000000000000000000000000000000000000000000028",
-		"00c42e0a0002000001168002f000800000000200000000000000000000000000000000000000000000000028",
-		"00c52e0a0002000001168003f000800000000200000000000000000000000000000000000000000000000028",
-		"00c62e0a0002000001168004f000800000000200000000000000000000000000000000000000000000000028",
-		"00c72e0a0002000001168005f000800000000200000000000000000000000000000000000000000000000028",
-		"00c82e0a0002000001168006f000800000000200000000000000000000000000000000000000000000000028",
-		"00c92e0a0002000001168007f000800000000200000000000000000000000000000000000000000000000028",
-		"00ca2e0a0002000001168008f000800100000200000000000000000000000000000000000000000000000028",
-		"00cb2e0a0002000001168009f000800100000200000000000000000000000000000000000000000000000028",
-		"00cc2e0a000200000116800af000800100000200000000000000000000000000000000000000000000000028",
-		"00cd2e0a000200000116800bf000800100000200000000000000000000000000000000000000000000000028",
-		"00ce2e0a000200000116800cf000800100000200000000000000000000000000000000000000000000000028",
-		"00cf2e0a000200000116800df000800100000200000000000000000000000000000000000000000000000028",
-		"00d02e0a000200000116800ef000800100000200000000000000000000000000000000000000000000000028",
-		"00d12e0a000200000116800ff000800100000200000000000000000000000000000000000000000000000028",
-		"00d22e0a0002000001168010f000800200000200000000000000000000000000000000000000000000000028",
-		"00d32e0a0002000001168011f000800200000200000000000000000000000000000000000000000000000028",
-		"00d42e0a0002000001168012f000800200000200000000000000000000000000000000000000000000000028",
-		"00d52e0a0002000001168013f000800200000200000000000000000000000000000000000000000000000028",
-		"00d62e0a0002000001168014f000800200000200000000000000000000000000000000000000000000000028",
-		"00d72e0a0002000001168015f000800200000200000000000000000000000000000000000000000000000028",
-		"00d82e0a0002000001168016f000800200000200000000000000000000000000000000000000000000000028",
-		"00d92e0a0002000001168017f000800200000200000000000000000000000000000000000000000000000028",
-		"00da2e0a0002000001168018f000800300000200000000000000000000000000000000000000000000000028",
-		"00db2e0a0002000001168019f000800300000200000000000000000000000000000000000000000000000028",
-		"00dc2e0a000200000116801af000800300000200000000000000000000000000000000000000000000000028",
-		"00dd2e0a000200000116801bf000800300000200000000000000000000000000000000000000000000000028",
-		"00de2e0a000200000116801cf000800300000200000000000000000000000000000000000000000000000028",
-		"00df2e0a000200000116801df000800300000200000000000000000000000000000000000000000000000028",
-		"00e02e0a000200000116801ef000800300000200000000000000000000000000000000000000000000000028",
-		"00e12e0a000200000116801ff000800300000200000000000000000000000000000000000000000000000028",
-		"00e22e0a0002000001168020f000800400000200000000000000000000000000000000000000000000000028",
-		"00e32e0a0002000001168021f000800400000200000000000000000000000000000000000000000000000028",
-		"00e42e0a0002000001168022f000800400000200000000000000000000000000000000000000000000000028",
-		"00e52e0a0002000001168023f000800400000200000000000000000000000000000000000000000000000028",
-		"00e62e0a0002000001168024f000800400000200000000000000000000000000000000000000000000000028",
-		"00e72e0a0002000001168025f000800400000200000000000000000000000000000000000000000000000028",
-		"00e82e0a0002000001168026f000800400000200000000000000000000000000000000000000000000000028",
-		"00e92e0a0002000001168027f000800400000200000000000000000000000000000000000000000000000028",
-		"00ea2e0a0002000001168028f000800500000200000000000000000000000000000000000000000000000028",
-		"00eb2e0a0002000001168029f000800500000200000000000000000000000000000000000000000000000028",
-		"00ec2e0a000200000116802af000800500000200000000000000000000000000000000000000000000000028",
-		"00ed2e0a000200000116802bf000800500000200000000000000000000000000000000000000000000000028",
-		"00ee2e0a000200000116802cf000800500000200000000000000000000000000000000000000000000000028",
-		"00ef2e0a000200000116802df000800500000200000000000000000000000000000000000000000000000028",
-		"00f02e0a000200000116802ef000800500000200000000000000000000000000000000000000000000000028",
-		"00f12e0a000200000116802ff000800500000200000000000000000000000000000000000000000000000028",
-		"00f22e0a0002000001168030f000800600000200000000000000000000000000000000000000000000000028",
-		"00f32e0a0002000001168031f000800600000200000000000000000000000000000000000000000000000028",
-		"00f42e0a0002000001168032f000800600000200000000000000000000000000000000000000000000000028",
-		"00f52e0a0002000001168033f000800600000200000000000000000000000000000000000000000000000028",
-		"00f62e0a0002000001168034f000800600000200000000000000000000000000000000000000000000000028",
-		"00f72e0a0002000001168035f000800600000200000000000000000000000000000000000000000000000028",
-		"00f82e0a0002000001168036f000800600000200000000000000000000000000000000000000000000000028",
-		"00f92e0a0002000001168037f000800600000200000000000000000000000000000000000000000000000028",
-		"00fa2e0a0002000001168038f000800700000200000000000000000000000000000000000000000000000028",
-		"00fb2e0a0002000001168039f000800700000200000000000000000000000000000000000000000000000028",
-		"00fc2e0a000200000116803af000800700000200000000000000000000000000000000000000000000000028",
-		"00fd2e0a000200000116803bf000800700000200000000000000000000000000000000000000000000000028",
-		"00fe2e0a000200000116803cf000800700000200000000000000000000000000000000000000000000000028",
-		"00ff2e0a000200000116803df000800700000200000000000000000000000000000000000000000000000028",
-		"01002e0a000200000116803ef000800700000200000000000000000000000000000000000000000000000028",
-		"01012e0a000200000116803ff000800700000200000000000000000000000000000000000000000000000028",
-		"01022e0a0002000001490401c000000000000000000000000000000000000000000000000000000000000028",
-		"01032e0a00020000014904012000000000000000000000000000000000000000000000000000000000000028",
-		"01042e0a00020000014904011800ffffffff0000000000000000000000000000000000000000000000000028",
-	}
-	firstTid := uint16(3)
-
-	for _, packetString := range mibUploadNextSequence {
-		data, err := stringToPacket(packetString)
+		data, err := stringToPacket(msg39)
 		assert.NoError(t, err)
 
 		packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
 		assert.NotNil(t, packet)
 
 		omciLayer := packet.Layer(LayerTypeOMCI)
+		assert.Nil(t, omciLayer)
+
+		badLayer := packet.Layer(gopacket.LayerTypeDecodeFailure)
+		assert.NotNil(t, badLayer)
+		truncated := packet.Metadata().Truncated
+		assert.True(t, truncated)
+
+		// Let length be optional size baseline size is fixed and we can recover from that
+		msg40 := fmt.Sprintf("%04x%02x0a000200000000000000000000000000000000000000000000000000000000000000000000",
+			uint16(tid), uint8(msgType))
+		data, err = stringToPacket(msg40)
+		assert.NoError(t, err)
+
+		packet = gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
+		assert.NotNil(t, packet)
+
+		omciLayer = packet.Layer(LayerTypeOMCI)
 		assert.NotNil(t, omciLayer)
 
 		omciMsg, ok := omciLayer.(*OMCI)
 		assert.True(t, ok)
-		assert.Equal(t, omciMsg.TransactionID, firstTid)
-		assert.Equal(t, omciMsg.MessageType, MibUploadNextResponseType)
-		assert.Equal(t, omciMsg.Length, uint16(40))
-
-		msgLayer := packet.Layer(LayerTypeMibUploadNextResponse)
-		assert.NotNil(t, msgLayer)
-
-		uploadResponse, ok2 := msgLayer.(*MibUploadNextResponse)
-		assert.True(t, ok2)
-		assert.Equal(t, uploadResponse.EntityClass, OnuDataClassID)
-		assert.Equal(t, uploadResponse.EntityInstance, uint16(0))
-
-		// Test serialization back to former string
-		var options gopacket.SerializeOptions
-		options.FixLengths = true
-
-		buffer := gopacket.NewSerializeBuffer()
-		err = gopacket.SerializeLayers(buffer, options, omciMsg, uploadResponse)
-		assert.NoError(t, err)
-
-		outgoingPacket := buffer.Bytes()
-		reconstituted := packetToString(outgoingPacket)
-		assert.Equal(t, strings.ToLower(packetString), reconstituted)
-
-		// Advance TID
-		firstTid += 1
+		assert.Equal(t, uint16(40), omciMsg.Length)
 	}
 }
 
-//func TestMibUploadNextWithMIC(t *testing.T) {
-//	// Similar to previous, but with the MIC available for testing
-//	mibUploadNextSequence := [...]string{
-//		"00032e0a0002000000020000800000000000000000000000000000000000000000000000000000000000002828ce00e2",
-//		"00042e0a0002000000050101f0002f2f05202020202020202020202020202020202020202000000000000028d4eb4bdf",
-//		"00052e0a00020000000501010f802020202020202020202020202020202020202020000000000000000000282dbe4b44",
-//		"00062e0a0002000000050104f000303001202020202020202020202020202020202020202000000000000028ef1b035b",
-//	}
-//	firstTid := uint16(3)
-//
-//	for pktNumber, packetString := range mibUploadNextSequence {
-//		data, err := stringToPacket(packetString)
-//		assert.NoError(t, err)
-//
-//		packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-//		fmt.Printf("Packet: %v: %v", pktNumber, packet)
-//		assert.NotNil(t, packet)
-//
-//		omciLayer := packet.Layer(LayerTypeOMCI)
-//		assert.NotNil(t, omciLayer)
-//
-//		omciMsg, ok := omciLayer.(*OMCI)
-//		assert.True(t, ok)
-//		assert.Equal(t, omciMsg.TransactionID, firstTid)
-//		assert.Equal(t, omciMsg.MessageType, byte(MibUploadNext))
-//		assert.Equal(t, omciMsg.Length, uint16(40))
-//
-//		msgLayer := packet.Layer(LayerTypeMibUploadNextResponse)
-//		assert.NotNil(t, msgLayer)
-//
-//		uploadResponse, ok2 := msgLayer.(*MibUploadNextResponse)
-//		assert.True(t, ok2)
-//		assert.Equal(t, uploadResponse.EntityClass, OnuDataClassID)
-//		assert.Equal(t, uploadResponse.EntityInstance, uint16(0))
-//
-//		// Test serialization back to former string
-//		var options gopacket.SerializeOptions
-//		options.FixLengths = true
-//
-//		buffer := gopacket.NewSerializeBuffer()
-//		err = gopacket.SerializeLayers(buffer, options, omciMsg, uploadResponse)
-//		assert.NoError(t, err)
-//
-//		outgoingPacket := buffer.Bytes()
-//		reconstituted := packetToString(outgoingPacket)
-//		assert.Equal(t,  strings.ToLower(packetString), reconstituted)
-//
-//		// Advance TID
-//		firstTid += 1
-//	}
-//}
+func TestOmciHeaderExtendedShort(t *testing.T) {
+	// Smallest message possible is an Extended Set Delete request which
+	// is 10 octets.
 
-// TestUnsupportedG988ClassIDMibUploadNextResponse tests decoding of an Unknown class ID that is
-// in the range of IDs assigned for G.988 use
-func TestUnsupportedG988ClassIDMibUploadNextResponse(t *testing.T) {
-	// The unsupported G.988 class ID below is 37 (0x0025), which is marked in the G.988
-	// (11/2017) as 'Intentionally left blank).  The encoded frame is a Get-Next
-	// response with a single attribute 1 & 16 (0x8001) encoded.
-	//
-	tid := 3
-	cid := 0x25
-	eid := 1
-	mask := 0x8000
-	omci_hdr := "00032e0a"
-	msg_hdr := "00020000002500018000"
-	attr := "0102030405060708090A0B0C0D0E0F101112131415161718191A"
-	trailer := "0000002828ce00e2"
-	msg := omci_hdr + msg_hdr + attr + trailer
-	data, err := stringToPacket(msg)
-	assert.NoError(t, err)
+	//mibResetRequest := "0001 4F 0A 0002 0000 0000000000000000" +
+	//	"00000000000000000000000000000000" +
+	//	"000000000000000000000028"
 
-	// Decode packet (lazy this time)
-	packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.Lazy)
-	assert.NotNil(t, packet)
-
-	// OMCI Layer Contents are the
-	//   - TCI          (2 bytes)
-	//   - Msg Type     (1 byte)
-	//   - Device Ident (1 byte)
-	//
-	// payload is remaining layers (less optional length and MIC)
-
-	omciLayer := packet.Layer(LayerTypeOMCI)
-	assert.NotNil(t, packet)
-
-	contents := omciLayer.LayerContents()
-	payload := omciLayer.LayerPayload()
-	assert.NotNil(t, contents)
-	assert.NotNil(t, payload)
-	assert.Equal(t, len(omci_hdr)/2, len(contents))
-	assert.Equal(t, (len(msg_hdr)+len(attr))/2, len(payload))
-
-	omciMsg, ok := omciLayer.(*OMCI)
-	assert.True(t, ok)
-	assert.Equal(t, omciMsg.TransactionID, uint16(tid))
-	assert.Equal(t, omciMsg.MessageType, MibUploadNextResponseType)
-	assert.Equal(t, omciMsg.Length, uint16(40))
-
-	// Message Layer contents for a MIB upload next response are the
-	//    - ONU Data Class/Instance                   (4 bytes)
-	//    - Reported Managed Entity Class/Instance    (4 bytes)
-	//    - Attribute Mask                            (2 bytes)
-	//
-	// Message Layer payload for a MIB upload next response are the attributes
-	// and zero-padding (but not length & MIC)
-
-	msgLayer := packet.Layer(LayerTypeMibUploadNextResponse)
-	assert.NotNil(t, msgLayer)
-
-	contents = msgLayer.LayerContents()
-	payload = msgLayer.LayerPayload()
-	assert.NotNil(t, contents)
-	assert.NotNil(t, payload)
-	assert.Equal(t, len(msg_hdr)/2, len(contents))
-	assert.Equal(t, len(attr)/2, len(payload))
-
-	uploadResponse, ok2 := msgLayer.(*MibUploadNextResponse)
-	assert.True(t, ok2)
-	assert.NotNil(t, uploadResponse)
-	assert.Equal(t, uploadResponse.EntityClass, OnuDataClassID)
-	assert.Equal(t, uploadResponse.EntityInstance, uint16(0))
-	assert.Equal(t, uploadResponse.ReportedME.GetClassID(), ClassID(cid))
-	assert.Equal(t, uploadResponse.ReportedME.GetEntityID(), uint16(eid))
-	assert.Equal(t, uploadResponse.ReportedME.GetAttributeMask(), uint16(mask))
-
-	name := "UnknownAttr_1"
-	blobAttribute, err := uploadResponse.ReportedME.GetAttribute(name)
-
-	assert.Nil(t, err)
-	assert.NotNil(t, blobAttribute)
-
-	byteValue, ok3 := blobAttribute.([]uint8)
-	assert.True(t, ok3)
-	assert.NotNil(t, byteValue)
 }
 
-func TestUnsupportedG988ClassIDMibUploadNextResponseAttributes(t *testing.T) {
-	// Same as previous, but try different attribute mask combinations
-	tid := 3
-	cid := 0x25
-	eid := 1
+func TestBad2017_G_988(t *testing.T) {
+	// ITU-G.988 11/2017 has a bad set of class IDs that map the Ethernet 64-bit PM counter
+	// to class ID 426 when it should be 425.   Make sure that code-generation of the OMCI
+	// ME's does not let that bad value find it's way back into our library.
 
-	// There are a number of ranges for vendor ID use. List below picks one from
-	// each of those ranges
-	masks := []uint16{0x8001, 0x0000, 0x0001, 0x8000}
+	assert.Equal(t, ClassID(425), EthernetFrameExtendedPm64BitClassID)
 
-	trailer := "0000002828ce00e2"
-	attr := "0102030405060708090A0B0C0D0E0F101112131415161718191A"
+	instance, omciErr := NewEthernetFrameExtendedPm64Bit()
+	assert.NotNil(t, instance)
+	assert.NotNil(t, omciErr)
+	assert.Equal(t, omciErr.StatusCode(), Success)
+	assert.Equal(t, EthernetFrameExtendedPm64BitClassID, instance.GetClassID())
+}
 
-	for _, mask := range masks {
-		hdr := fmt.Sprintf("00032e0a0002000000250001%04x", mask)
-
-		msg := hdr + attr + trailer
-		data, err := stringToPacket(msg)
-		assert.NoError(t, err)
-
-		packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-		assert.NotNil(t, packet)
-
-		omciLayer := packet.Layer(LayerTypeOMCI)
-		assert.NotNil(t, packet)
-
-		omciMsg, ok := omciLayer.(*OMCI)
-		assert.True(t, ok)
-		assert.Equal(t, omciMsg.TransactionID, uint16(tid))
-		assert.Equal(t, omciMsg.MessageType, MibUploadNextResponseType)
-		assert.Equal(t, omciMsg.Length, uint16(40))
-
-		msgLayer := packet.Layer(LayerTypeMibUploadNextResponse)
-		assert.NotNil(t, msgLayer)
-
-		uploadResponse, ok2 := msgLayer.(*MibUploadNextResponse)
-		assert.True(t, ok2)
-		assert.NotNil(t, uploadResponse)
-		assert.Equal(t, uploadResponse.EntityClass, OnuDataClassID)
-		assert.Equal(t, uploadResponse.EntityInstance, uint16(0))
-		assert.Equal(t, uploadResponse.ReportedME.GetClassID(), ClassID(cid))
-		assert.Equal(t, uploadResponse.ReportedME.GetEntityID(), uint16(eid))
-		assert.Equal(t, uploadResponse.ReportedME.GetAttributeMask(), uint16(mask))
-
-		//name := "UnknownAttr_1"
-		//blobAttribute, err := uploadResponse.ReportedME.GetAttribute(name)
-		//
-		//assert.Nil(t, err)
-		//assert.NotNil(t, blobAttribute)
-		//
-		//byteValue, ok3 := blobAttribute.([]uint8)
-		//assert.True(t, ok3)
-		//assert.NotNil(t, byteValue)
+func TestBaselineBadLenSerialize(t *testing.T) {
+	omciLayer := &OMCI{
+		TransactionID:    0x0211,
+		MessageType:      DeleteResponseType,
+		DeviceIdentifier: BaselineIdent,
+		Length:           39, // Must be 0 or 40
 	}
-}
-
-// TestUnsupportedVendorClassIDMibUploadNextResponse tests decoding of an Unknown class ID that is
-// in the range of IDs assigned for vendor assignment
-func TestUnsupportedVendorClassIDMibUploadNextResponse(t *testing.T) {
-	tid := 3
-	eid := 0
-	mask := 0x8000
-
-	// There are a number of ranges for vendor ID use. List below picks one from
-	// each of those ranges
-	classIDs := []uint16{250, 355, 65500}
-
-	hdr := "00032e0a00020000"
-	attr := "0102030405060708090A0B0C0D0E0F101112131415161718191A"
-	trailer := "0000002828ce00e2"
-
-	for _, cid := range classIDs {
-		cidToMask := fmt.Sprintf("%04x%04x%04x", cid, eid, mask)
-		msg := hdr + cidToMask + attr + trailer
-		data, err := stringToPacket(msg)
-		assert.NoError(t, err)
-
-		packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
-		assert.NotNil(t, packet)
-
-		omciLayer := packet.Layer(LayerTypeOMCI)
-		assert.NotNil(t, packet)
-
-		omciMsg, ok := omciLayer.(*OMCI)
-		assert.True(t, ok)
-		assert.Equal(t, omciMsg.TransactionID, uint16(tid))
-		assert.Equal(t, omciMsg.MessageType, MibUploadNextResponseType)
-		assert.Equal(t, omciMsg.Length, uint16(40))
-
-		msgLayer := packet.Layer(LayerTypeMibUploadNextResponse)
-		assert.NotNil(t, msgLayer)
-
-		uploadResponse, ok2 := msgLayer.(*MibUploadNextResponse)
-		assert.True(t, ok2)
-		assert.NotNil(t, uploadResponse)
-		assert.Equal(t, uploadResponse.EntityClass, OnuDataClassID)
-		assert.Equal(t, uploadResponse.EntityInstance, uint16(0))
-		assert.Equal(t, uploadResponse.ReportedME.GetClassID(), ClassID(cid))
-		assert.Equal(t, uploadResponse.ReportedME.GetEntityID(), uint16(eid))
-		assert.Equal(t, uploadResponse.ReportedME.GetAttributeMask(), uint16(mask))
-
-		name := "UnknownAttr_1"
-		blobAttribute, err := uploadResponse.ReportedME.GetAttribute(name)
-
-		assert.Nil(t, err)
-		assert.NotNil(t, blobAttribute)
-
-		byteValue, ok3 := blobAttribute.([]uint8)
-		assert.True(t, ok3)
-		assert.NotNil(t, byteValue)
-	}
-}
-
-func TestCreateMulticastOperationsProfileMe(t *testing.T) {
-	// Test various create request for this ME
-	meParams := ParamData{
-		EntityID: uint16(0x501),
-		Attributes: AttributeValueMap{
-			"IgmpVersion":               2,
-			"IgmpFunction":              0,
-			"ImmediateLeave":            0,
-			"USIgmpTci":                 0,
-			"Robustness":                2,
-			"QuerierIp":                 0,
-			"QueryInterval":             125,
-			"QuerierMaxResponseTime":    100,
-			"LastMemberResponseTime":    10,
-			"UnauthorizedJoinBehaviour": 0,
-			"USIgmpRate":                0,
-			"USIgmpTagCtrl":             0,
-			"DSIgmpMcastTci":            []byte{0, 0, 0},
+	request := &DeleteResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    ExtendedVlanTaggingOperationConfigurationDataClassID,
+			EntityInstance: uint16(0x202),
 		},
+		Result: Success,
 	}
-	meInstance, newErr := NewMulticastOperationsProfile(meParams)
-	assert.NotNil(t, meInstance)
-	assert.Equal(t, newErr.StatusCode(), Success)
+	// Test serialization back to former string
+	var options gopacket.SerializeOptions
+	options.FixLengths = true
 
-	tid := uint16(123)
-	frame, omciErr := GenFrame(meInstance, CreateRequestType, TransactionID(tid))
-	assert.NotNil(t, frame)
-	assert.NotZero(t, len(frame))
-	assert.Nil(t, omciErr)
+	buffer := gopacket.NewSerializeBuffer()
+	err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
+	assert.Error(t, err)
+}
 
-	///////////////////////////////////////////////////////////////////
-	// Now decode
-	packet := gopacket.NewPacket(frame, LayerTypeOMCI, gopacket.NoCopy)
-	assert.NotNil(t, packet)
+func TestBadIdentSerialize(t *testing.T) {
+	omciLayer := &OMCI{
+		TransactionID:    0x0211,
+		MessageType:      DeleteResponseType,
+		DeviceIdentifier: DeviceIdent(1), // Default is Baseline (0xa), other is Extended (0xb)
+	}
+	request := &DeleteResponse{
+		MeBasePacket: MeBasePacket{
+			EntityClass:    ExtendedVlanTaggingOperationConfigurationDataClassID,
+			EntityInstance: uint16(0x202),
+		},
+		Result: Success,
+	}
+	// Test serialization back to former string
+	var options gopacket.SerializeOptions
+	options.FixLengths = true
 
-	omciLayer := packet.Layer(LayerTypeOMCI)
-	assert.NotNil(t, omciLayer)
-
-	omciObj, omciOk := omciLayer.(*OMCI)
-	assert.NotNil(t, omciObj)
-	assert.True(t, omciOk)
-	assert.Equal(t, tid, omciObj.TransactionID)
-	assert.Equal(t, CreateRequestType, omciObj.MessageType)
-	assert.Equal(t, BaselineIdent, omciObj.DeviceIdentifier)
-
-	msgLayer := packet.Layer(LayerTypeCreateRequest)
-	assert.NotNil(t, msgLayer)
-
-	msgObj, msgOk := msgLayer.(*CreateRequest)
-	assert.NotNil(t, msgObj)
-	assert.True(t, msgOk)
-
-	assert.Equal(t, meInstance.GetClassID(), msgObj.EntityClass)
-	assert.Equal(t, meInstance.GetEntityID(), msgObj.EntityInstance)
-	//assert.Equal(t, meInstance.GetAttributeValueMap(), msgObj.Attributes)
+	buffer := gopacket.NewSerializeBuffer()
+	err := gopacket.SerializeLayers(buffer, options, omciLayer, request)
+	assert.Error(t, err)
 }