VOL-3720: Support access to raw packet data at msg-layer
Change-Id: Ib2bf03e091cce3c803dd76d777f81db360ba2a1c
diff --git a/omci_test.go b/omci_test.go
index d49f3cd..a775358 100644
--- a/omci_test.go
+++ b/omci_test.go
@@ -1091,28 +1091,59 @@
cid := 0x25
eid := 1
mask := 0x8000
- hdr := "00032e0a00020000002500018000"
- trailer := "0000002828ce00e2"
- attr := "0102030405060708090A0B0C0D0E0F101112131415161718191A"
- msg := hdr + attr + trailer
+ 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)
- packet := gopacket.NewPacket(data, LayerTypeOMCI, gopacket.NoCopy)
+ // 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)