Added OMCI message parsing tests
Change-Id: Ic864446241c3507dcfb389c7e774d0aa79de3b55
diff --git a/voltha/extensions/omci/omci_entities.py b/voltha/extensions/omci/omci_entities.py
index cbeeec5..6c082ad 100644
--- a/voltha/extensions/omci/omci_entities.py
+++ b/voltha/extensions/omci/omci_entities.py
@@ -133,7 +133,28 @@
mandatory_operations = {OP.Get, OP.Set,
OP.GetAllAlarms, OP.GetAllAlarmsNext,
OP.MibReset, OP.MibUpload, OP.MibUploadNext}
- optional_operations = {}
+
+
+class Cardholder(EntityClass):
+ class_id = 5
+ attributes = [
+ ECA(ShortField("managed_entity_id", None), {AA.R}),
+ ECA(ByteField("actual_plugin_unit_type", None), {AA.R}),
+ ECA(ByteField("expected_plugin_unit_type", None), {AA.R, AA.W}),
+ ECA(ByteField("expected_port_count", None), {AA.R, AA.W},
+ optional=True),
+ ECA(StrFixedLenField("expected_equipment_id", None, 20), {AA.R, AA.W},
+ optional=True),
+ ECA(StrFixedLenField("actual_equipment_id", None, 20), {AA.R},
+ optional=True),
+ ECA(ByteField("protection_profile_pointer", None), {AA.R},
+ optional=True),
+ ECA(ByteField("invoke_protection_switch", None), {AA.R, AA.W},
+ optional=True),
+ ECA(ByteField("arc", None), {AA.R, AA.W}),
+ ECA(ByteField("arc_interval", None), {AA.R, AA.W}),
+ ]
+ mandatory_operations = {OP.Get, OP.Set}
class CircuitPack(EntityClass):
diff --git a/voltha/extensions/omci/omci_frame.py b/voltha/extensions/omci/omci_frame.py
index 5c8dd20..a762ad8 100644
--- a/voltha/extensions/omci/omci_frame.py
+++ b/voltha/extensions/omci/omci_frame.py
@@ -73,13 +73,21 @@
"omci_message", None, OmciGetAllAlarmsNextResponse), align=36),
lambda pkt:
pkt.message_type == OmciGetAllAlarmsNextResponse.message_id),
+
ConditionalField(FixedLenField(
PacketField("omci_message", None, OmciMibUpload), align=36),
+ lambda pkt: pkt.message_type == OmciMibUpload.message_id),
+ ConditionalField(FixedLenField(
+ PacketField("omci_message", None, OmciMibUploadResponse), align=36),
lambda pkt: pkt.message_type == OmciMibUploadResponse.message_id),
ConditionalField(FixedLenField(
PacketField("omci_message", None, OmciMibUploadNext), align=36),
lambda pkt:
- pkt.message_type == OmciMibUploadNextResponse.message_id),
+ pkt.message_type == OmciMibUploadNext.message_id),
+ ConditionalField(FixedLenField(
+ PacketField("omci_message", None, OmciMibUploadNextResponse), align=36),
+ lambda pkt: pkt.message_type == OmciMibUploadNextResponse.message_id),
+
ConditionalField(FixedLenField(
PacketField("omci_message", None, OmciMibReset), align=36),
lambda pkt: pkt.message_type == OmciMibReset.message_id),
diff --git a/voltha/extensions/omci/omci_messages.py b/voltha/extensions/omci/omci_messages.py
index 3710702..12956dc 100644
--- a/voltha/extensions/omci/omci_messages.py
+++ b/voltha/extensions/omci/omci_messages.py
@@ -86,7 +86,10 @@
indices = entity_class.attribute_indices_from_mask(attribute_mask)
data = {}
for index in indices:
- fld = entity_class.attributes[index]._fld
+ try:
+ fld = entity_class.attributes[index]._fld
+ except IndexError, e:
+ raise
s, value = fld.getfield(pkt, s)
data[fld.name] = value
return s, data
@@ -264,7 +267,8 @@
ShortField("object_entity_class", None),
ShortField("object_entity_id", 0),
ShortField("object_attributes_mask", None),
- OmciMaskedData("object_data")
+ OmciMaskedData("object_data", entity_class='object_entity_class',
+ attributes_mask='object_attributes_mask')
]