Loxi support for Optical Transport extensions, onos-2472

Change-Id: I69b9a8839fd899aec531f68103b448dd93cbbe4a
diff --git a/test_data/of13/exp_port_desc_reply.data b/test_data/of13/exp_port_desc_reply.data
new file mode 100644
index 0000000..df1eeec
--- /dev/null
+++ b/test_data/of13/exp_port_desc_reply.data
@@ -0,0 +1,85 @@
+-- binary
+04 13 # version, type
+00 58 # length
+12 34 56 78 # xid
+ff ff # stats_type
+00 00 # flags
+00 00 00 00 # pad
+FF 00 00 07 # experimenter
+00 00 00 01 # subtype
+# entries[0]
+00 00 00 01 # port
+00 40 # length - ????????
+00 00 # pad
+00 00 00 00 00 00 # entries[0].hw_addr
+00 00 # pad
+69 6e 74 65 72 66 61 63 65 31 32 33 34 35 36 37 # entries[0].name
+00 00 00 60 # entries[0].config
+00 00 00 04 # entries[0].state
+# properties[0]
+00 02 # entries[0].properties[0].type 
+00 18 # entries[0].properties[0].length  ???????
+0C # port_signal_type OMSn = 2,OCH  = 5,OTU2 = 12(oduclt-10),OTU4 = 14(oduclt-100)
+00 #reserved
+00 00 #pad
+# features[0]
+00 02
+00 10 # length - ????????
+00 00 00 00
+# layeres[0]
+03 # layer class (PORT=1,OCH=2,ODU=3,DUCLT=4)
+01 # signal_type;    /*OFP(OTP/OCH/ODU/ODUCL)T_*/
+06 #(OTS_OMS=1,OMS_OCH=2,OPS_OCHr=3,OPSM_OTUk=4,OCH_OTUk=5,ODUk_ODUij=6,ODUk_ODUj21=7,
+   #ODUkh_ODUj21=8,ODU0_CBRx=9,ODUk_CBRx=10,ODUk_CBRxg=11,ODUk_RSn=12,ODUk_ATM=13,ODUk_ETH=14,ODUkh_ETH=15,ODUk_ETHPPOS=16
+00 00 00 00 00
+
+-- python
+ofp.message.exp_port_desc_stats_reply(
+    xid=0x12345678,
+    flags=0,
+    entries=[
+        ofp.exp_port_desc(
+            port_no=1,
+            hw_addr=[0,0,0,0,0,0],
+            name="interface1234567",
+            config=0x60,
+            state=0x03,
+            properties=[
+                ofp.exp_port_desc_prop.ethernet(
+                    curr=0x70,
+                    max_speed=0x80)])])
+
+
+-- java
+builder
+        .setXid(0x12345678)
+        .setFlags(ImmutableSet.<OFStatsReplyFlags>of())
+        .setEntries(ImmutableList.of(
+                factory.buildExpPort()
+                   .setPortNo(OFPort.of(1))
+                   .setHwAddr(MacAddress.of("00:00:00:00:00:00"))
+                   .setName("interface1234567")
+                   .setConfig(Sets.immutableEnumSet(OFPortConfig.NO_FWD, OFPortConfig.NO_PACKET_IN))
+                   .setState(Sets.immutableEnumSet(OFPortState.LIVE))
+                   .setProperties(ImmutableList.of(
+				  factory.buildExpPortDescPropOpticalTransport()
+                                  .setPortSignalType(OFPortOpticalTransportSignalType.OTU2)
+   				  .setFeatures(ImmutableList.of(   
+                                               factory.buildExpPortOpticalTransportLayerStack()
+                                              .setValue(ImmutableList.of(
+						         factory.buildExpPortOpticalTransportLayerEntry()
+                                                        .setLayerClass(OFPortOpticalTransportLayerClass.ODU)
+                                                        .setSignalType((short)1)
+                                                        .setAdaptation(OFAdaptationsType.ODUK_ODUIJ)
+                                                        .build()))
+                                              .build()))
+		                   .build()))
+                     .build()))
+          .build();
+         
+
+
+
+
+
+
diff --git a/test_data/of13/exp_port_desc_reply_och b/test_data/of13/exp_port_desc_reply_och
new file mode 100644
index 0000000..b32d9a8
--- /dev/null
+++ b/test_data/of13/exp_port_desc_reply_och
@@ -0,0 +1,86 @@
+# To be included in exp_port_dest_reply.data
+-- binary
+04 13 # version, type
+00 58 # length
+12 34 56 78 # xid
+ff ff # stats_type
+00 00 # flags
+00 00 00 00 # pad
+FF 00 00 07 # experimenter
+00 00 00 01 # subtype
+# entries[0]
+00 00 00 01 # port
+00 40 # length - ????????
+00 00 # pad
+00 00 00 00 00 00 # entries[0].hw_addr
+00 00 # pad
+69 6e 74 65 72 66 61 63 65 31 32 33 34 35 36 37 # entries[0].name
+00 00 00 60 # entries[0].config
+00 00 00 04 # entries[0].state
+# properties[0]
+00 02 # entries[0].properties[0].type 
+00 18 # entries[0].properties[0].length  ???????
+05 # port_signal_type OMSn = 2,OCH  = 5,OTU2 = 12(oduclt-10),OTU4 = 14(oduclt-100)
+00 #reserved
+00 00 #pad
+# features[0]
+00 02
+00 10 # length - ????????
+00 00 00 00
+# layeres[0]
+03 # layer class (PORT=1,OCH=2,ODU=3,DUCLT=4)
+01 # signal_type;    /*OFP(OTP/OCH/ODU/ODUCL)T_*/
+06 #(OTS_OMS=1,OMS_OCH=2,OPS_OCHr=3,OPSM_OTUk=4,OCH_OTUk=5,ODUk_ODUij=6,ODUk_ODUj21=7,
+   #ODUkh_ODUj21=8,ODU0_CBRx=9,ODUk_CBRx=10,ODUk_CBRxg=11,ODUk_RSn=12,ODUk_ATM=13,ODUk_ETH=14,ODUkh_ETH=15,ODUk_ETHPPOS=16
+00 00 00 00 00
+
+-- python
+ofp.message.exp_port_desc_stats_reply(
+    xid=0x12345678,
+    flags=0,
+    entries=[
+        ofp.exp_port_desc(
+            port_no=1,
+            hw_addr=[0,0,0,0,0,0],
+            name="interface1234567",
+            config=0x60,
+            state=0x03,
+            properties=[
+                ofp.exp_port_desc_prop.ethernet(
+                    curr=0x70,
+                    max_speed=0x80)])])
+
+
+-- java
+builder
+        .setXid(0x12345678)
+        .setFlags(ImmutableSet.<OFStatsReplyFlags>of())
+        .setEntries(ImmutableList.of(
+                factory.buildExpPort()
+                   .setPortNo(OFPort.of(1))
+                   .setHwAddr(MacAddress.of("00:00:00:00:00:00"))
+                   .setName("interface1234567")
+                   .setConfig(Sets.immutableEnumSet(OFPortConfig.NO_FWD, OFPortConfig.NO_PACKET_IN))
+                   .setState(Sets.immutableEnumSet(OFPortState.LIVE))
+                   .setProperties(ImmutableList.of(
+				  factory.buildExpPortDescPropOpticalTransport()
+                                  .setPortSignalType(OFPortOpticalTransportSignalType.OCH)
+   				  .setFeatures(ImmutableList.of(   
+                                               factory.buildExpPortOpticalTransportLayerStack()
+                                              .setValue(ImmutableList.of(
+						         factory.buildExpPortOpticalTransportLayerEntry()
+                                                        .setLayerClass(OFPortOpticalTransportLayerClass.ODU)
+                                                        .setSignalType((short)1)
+                                                        .setAdaptation(OFAdaptationsType.ODUK_ODUIJ)
+                                                        .build()))
+                                              .build()))
+		                   .build()))
+                     .build()))
+          .build();
+         
+
+
+
+
+
+
diff --git a/test_data/of13/exp_port_desc_reply_oms b/test_data/of13/exp_port_desc_reply_oms
new file mode 100644
index 0000000..67a03e8
--- /dev/null
+++ b/test_data/of13/exp_port_desc_reply_oms
@@ -0,0 +1,87 @@
+#To put this code in exp_port_desc_reply.data
+
+-- binary
+04 13 # version, type
+00 58 # length
+12 34 56 78 # xid
+ff ff # stats_type
+00 00 # flags
+00 00 00 00 # pad
+FF 00 00 07 # experimenter
+00 00 00 01 # subtype
+# entries[0]
+00 00 00 01 # port
+00 40 # length - ????????
+00 00 # pad
+00 00 00 00 00 00 # entries[0].hw_addr
+00 00 # pad
+69 6e 74 65 72 66 61 63 65 31 32 33 34 35 36 37 # entries[0].name
+00 00 00 60 # entries[0].config
+00 00 00 04 # entries[0].state
+# properties[0]
+00 02 # entries[0].properties[0].type 
+00 18 # entries[0].properties[0].length  ???????
+02 # port_signal_type OMSn = 2,OCH  = 5,OTU2 = 12(oduclt-10),OTU4 = 14(oduclt-100)
+00 #reserved
+00 00 #pad
+# features[0]
+00 02
+00 10 # length - ????????
+00 00 00 00
+# layeres[0]
+02 # layer class (PORT=1,OCH=2,ODU=3,DUCLT=4)
+01 # signal_type;    /*OFP(OTP/OCH/ODU/ODUCL)T_*/
+02 #(OTS_OMS=1,OMS_OCH=2,OPS_OCHr=3,OPSM_OTUk=4,OCH_OTUk=5,ODUk_ODUij=6,ODUk_ODUj21=7,
+   #ODUkh_ODUj21=8,ODU0_CBRx=9,ODUk_CBRx=10,ODUk_CBRxg=11,ODUk_RSn=12,ODUk_ATM=13,ODUk_ETH=14,ODUkh_ETH=15,ODUk_ETHPPOS=16
+00 00 00 00 00
+
+-- python
+ofp.message.exp_port_desc_stats_reply(
+    xid=0x12345678,
+    flags=0,
+    entries=[
+        ofp.exp_port_desc(
+            port_no=1,
+            hw_addr=[0,0,0,0,0,0],
+            name="interface1234567",
+            config=0x60,
+            state=0x03,
+            properties=[
+                ofp.exp_port_desc_prop.ethernet(
+                    curr=0x70,
+                    max_speed=0x80)])])
+
+
+-- java
+builder
+        .setXid(0x12345678)
+        .setFlags(ImmutableSet.<OFStatsReplyFlags>of())
+        .setEntries(ImmutableList.of(
+                factory.buildExpPort()
+                   .setPortNo(OFPort.of(1))
+                   .setHwAddr(MacAddress.of("00:00:00:00:00:00"))
+                   .setName("interface1234567")
+                   .setConfig(Sets.immutableEnumSet(OFPortConfig.NO_FWD, OFPortConfig.NO_PACKET_IN))
+                   .setState(Sets.immutableEnumSet(OFPortState.LIVE))
+                   .setProperties(ImmutableList.of(
+				  factory.buildExpPortDescPropOpticalTransport()
+                                  .setPortSignalType(OFPortOpticalTransportSignalType.OMSN)
+   				  .setFeatures(ImmutableList.of(   
+                                               factory.buildExpPortOpticalTransportLayerStack()
+                                              .setValue(ImmutableList.of(
+						         factory.buildExpPortOpticalTransportLayerEntry()
+                                                        .setLayerClass(OFPortOpticalTransportLayerClass.OCH)
+                                                        .setSignalType((short)1)
+                                                        .setAdaptation(OFAdaptationsType.OMS_OCH)
+                                                        .build()))
+                                              .build()))
+		                   .build()))
+                     .build()))
+          .build();
+         
+
+
+
+
+
+
diff --git a/test_data/of13/exp_port_desc_reply_otu b/test_data/of13/exp_port_desc_reply_otu
new file mode 100644
index 0000000..441d837
--- /dev/null
+++ b/test_data/of13/exp_port_desc_reply_otu
@@ -0,0 +1,87 @@
+#To put this code in exp_port_desc_reply.data
+
+-- binary
+04 13 # version, type
+00 58 # length
+12 34 56 78 # xid
+ff ff # stats_type
+00 00 # flags
+00 00 00 00 # pad
+FF 00 00 07 # experimenter
+00 00 00 01 # subtype
+# entries[0]
+00 00 00 01 # port
+00 40 # length - ????????
+00 00 # pad
+00 00 00 00 00 00 # entries[0].hw_addr
+00 00 # pad
+69 6e 74 65 72 66 61 63 65 31 32 33 34 35 36 37 # entries[0].name
+00 00 00 60 # entries[0].config
+00 00 00 04 # entries[0].state
+# properties[0]
+00 02 # entries[0].properties[0].type 
+00 18 # entries[0].properties[0].length  ???????
+0C # port_signal_type OMSn = 2,OCH  = 5,OTU2 = 12(oduclt-10),OTU4 = 14(oduclt-100)
+00 #reserved
+00 00 #pad
+# features[0]
+00 02
+00 10 # length - ????????
+00 00 00 00
+# layeres[0]
+03 # layer class (PORT=1,OCH=2,ODU=3,DUCLT=4)
+01 # signal_type;    /*OFP(OTP/OCH/ODU/ODUCL)T_*/
+06 #(OTS_OMS=1,OMS_OCH=2,OPS_OCHr=3,OPSM_OTUk=4,OCH_OTUk=5,ODUk_ODUij=6,ODUk_ODUj21=7,
+   #ODUkh_ODUj21=8,ODU0_CBRx=9,ODUk_CBRx=10,ODUk_CBRxg=11,ODUk_RSn=12,ODUk_ATM=13,ODUk_ETH=14,ODUkh_ETH=15,ODUk_ETHPPOS=16
+00 00 00 00 00
+
+-- python
+ofp.message.exp_port_desc_stats_reply(
+    xid=0x12345678,
+    flags=0,
+    entries=[
+        ofp.exp_port_desc(
+            port_no=1,
+            hw_addr=[0,0,0,0,0,0],
+            name="interface1234567",
+            config=0x60,
+            state=0x03,
+            properties=[
+                ofp.exp_port_desc_prop.ethernet(
+                    curr=0x70,
+                    max_speed=0x80)])])
+
+
+-- java
+builder
+        .setXid(0x12345678)
+        .setFlags(ImmutableSet.<OFStatsReplyFlags>of())
+        .setEntries(ImmutableList.of(
+                factory.buildExpPort()
+                   .setPortNo(OFPort.of(1))
+                   .setHwAddr(MacAddress.of("00:00:00:00:00:00"))
+                   .setName("interface1234567")
+                   .setConfig(Sets.immutableEnumSet(OFPortConfig.NO_FWD, OFPortConfig.NO_PACKET_IN))
+                   .setState(Sets.immutableEnumSet(OFPortState.LIVE))
+                   .setProperties(ImmutableList.of(
+				  factory.buildExpPortDescPropOpticalTransport()
+                                  .setPortSignalType(OFPortOpticalTransportSignalType.OTU2)
+   				  .setFeatures(ImmutableList.of(   
+                                               factory.buildExpPortOpticalTransportLayerStack()
+                                              .setValue(ImmutableList.of(
+						         factory.buildExpPortOpticalTransportLayerEntry()
+                                                        .setLayerClass(OFPortOpticalTransportLayerClass.ODU)
+                                                        .setSignalType((short)1)
+                                                        .setAdaptation(OFAdaptationsType.ODUK_ODUIJ)
+                                                        .build()))
+                                              .build()))
+		                   .build()))
+                     .build()))
+          .build();
+         
+
+
+
+
+
+
diff --git a/test_data/of13/exp_port_desc_request.data b/test_data/of13/exp_port_desc_request.data
new file mode 100644
index 0000000..1c1b637
--- /dev/null
+++ b/test_data/of13/exp_port_desc_request.data
@@ -0,0 +1,14 @@
+-- binary
+04 12 # version, type
+00 18 # length
+11 11 11 11 # xid
+ff ff # stats_type
+00 00 # flags
+00 00 00 00 # pad
+FF 00 00 07 # experimenter
+00 00 00 01 # subtype
+
+-- python
+ofp.message.exp_port_desc_request(
+    xid=0x111111)
+
diff --git a/test_data/of13/flow_add.data b/test_data/of13/flow_add.data
index d566096..a1359c9 100644
--- a/test_data/of13/flow_add.data
+++ b/test_data/of13/flow_add.data
@@ -1,6 +1,6 @@
 -- binary
 04 0e # version, type
-00 80 # length
+00 B8 # length
 12 34 56 78 # xid
 
 fe dc ba 98 76 54 32 10 # cookie
@@ -21,7 +21,7 @@
 00 00 # pad
 
 00 01 # match.type
-00 3F # match.length # 59 bytes OXMs + 4 bytes match header
+00 77 # match.length #
 
 80 00 01 08 # match.oxm_list[0].type_len - IN_PORT
 00 00 00 04 # match.oxm_list[0].value
@@ -37,6 +37,31 @@
 1C CA FE 1C B1 10 1C 00 00 28 00 00 00 00 00 00 # match.oxm_list[3].value
 FF FF FF FF FF F0 FF FF 1C 2C 3C 00 00 00 00 00 # match.oxm_list[3].mask
 
+FF FF # experimenter class
+06 10 # type_len - EXP_ODU_SIG_ID
+FF 00 00 07 # experimenter id
+55 55 # tpn
+00 50 # tslen
+01 01 01 01 01 01 01 01 01 01 00 00 # tsmap
+
+FF FF # experimenter class
+04 01 # type_len - EXP_ODU_SIG_TYPE
+FF 00 00 07 # experimenter id
+08 # value
+
+FF FF # experimenter class
+0A 06 # type_len - EXP_OCH_SIG_ID
+FF 00 00 07 # experimenter id
+02  # gridType
+01  # channelSpacing
+00 04 #  channelNumber
+00 01 #  spectralWidth
+
+FF FF # experimenter class
+08 01 # type_len - EXP_OCH_SIG_TYPE
+FF 00 00 07 # experimenter id
+16 # value
+
 00 # match.pad
 
 00 01 # instructions[0].type
@@ -68,6 +93,10 @@
         ofp.oxm.ipv6_src_masked(
             value     ='\x1C\xCA\xFE\x1C\xB1\x10\x1C\x00\x00\x28\x00\x00\x00\x00\x00\x00',
             value_mask='\xFF\xFF\xFF\xFF\xFF\xF0\xFF\xFF\x1C\x2C\x3C\x00\x00\x00\x00\x00')
+        ofp.oxm.exp_odu_sig_id(21845,80,new byte {1,1,1,1,1,1,1,1,1,1}),
+        ofp.oxm.exp_odu_sigtype(8),
+        ofp.oxm.exp_och_sig_id(2,1,4,1),
+        ofp.oxm.exp_och_sigtype(22)
         ]),
     instructions=[
         ofp.instruction.goto_table(table_id=4),
@@ -92,6 +121,10 @@
             .setMasked(MatchField.IPV6_SRC, 
                        IPv6Address.of(0x1CCAFE1CB1101C00l, 0x0028000000000000l),
                        IPv6Address.of(0xFFFFFFFFFFF0FFFFl, 0x1C2C3C0000000000l))
+            .setExact(MatchField.EXP_ODU_SIG_ID, new OduSignalID((short)21845, (short)80,new byte[] {1,1,1,1,1,1,1,1,1,1}))
+            .setExact(MatchField.EXP_ODU_SIGTYPE, U8.of((short) 8 ))
+            .setExact(MatchField.EXP_OCH_SIG_ID, new CircuitSignalID((byte)2,(byte)1,(short)4,(short)1))
+            .setExact(MatchField.EXP_OCH_SIGTYPE, U8.of((short) 22))
         	.build()
     )
     .setInstructions(
diff --git a/test_data/of13/flow_delete.data b/test_data/of13/flow_delete.data
index bf9c453..0c1387f 100644
--- a/test_data/of13/flow_delete.data
+++ b/test_data/of13/flow_delete.data
@@ -1,6 +1,6 @@
 -- binary
 04 0e # version, type
-00 80 # length
+00 B8 # length
 12 34 56 78 # xid
 
 fe dc ba 98 76 54 32 10 # cookie
@@ -21,7 +21,7 @@
 00 00 # pad
 
 00 01 # match.type
-00 3F # match.length # 59 bytes OXMs + 4 bytes match header
+00 77 # match.length #
 
 80 00 01 08 # match.oxm_list[0].type_len - IN_PORT
 00 00 00 04 # match.oxm_list[0].value
@@ -37,6 +37,31 @@
 1C CA FE 1C B1 10 1C 00 00 28 00 00 00 00 00 00 # match.oxm_list[3].value
 FF FF FF FF FF F0 FF FF 1C 2C 3C 00 00 00 00 00 # match.oxm_list[3].mask
 
+FF FF # experimenter class
+06 10 # type_len - EXP_ODU_SIG_ID
+FF 00 00 07 # experimenter id
+55 55 # tpn
+00 50 # tslen
+01 01 01 01 01 01 01 01 01 01 00 00 # tsmap
+
+FF FF # experimenter class
+04 01 # type_len - EXP_ODU_SIG_TYPE
+FF 00 00 07 # experimenter id
+08 # value
+
+FF FF # experimenter class
+0A 06 # type_len - EXP_OCH_SIG_ID
+FF 00 00 07 # experimenter id
+02  # gridType
+01  # channelSpacing
+00 04 #  channelNumber
+00 01 #  spectralWidth
+
+FF FF # experimenter class
+08 01 # type_len - EXP_OCH_SIG_TYPE
+FF 00 00 07 # experimenter id
+16 # value
+
 00 # match.pad
 
 00 01 # instructions[0].type
@@ -47,6 +72,7 @@
 00 01 # instructions[1].type
 00 08 # instructions[1].length
 07 # instructions[1].table_id
+
 00 00 00 # pad
 -- python
 ofp.message.flow_delete(
@@ -92,6 +118,10 @@
             .setMasked(MatchField.IPV6_SRC, 
                        IPv6Address.of(0x1CCAFE1CB1101C00l, 0x0028000000000000l),
                        IPv6Address.of(0xFFFFFFFFFFF0FFFFl, 0x1C2C3C0000000000l))
+            .setExact(MatchField.EXP_ODU_SIG_ID, new OduSignalID((short)21845, (short)80,new byte[] {1,1,1,1,1,1,1,1,1,1}))
+            .setExact(MatchField.EXP_ODU_SIGTYPE, U8.of((short) 8 ))
+            .setExact(MatchField.EXP_OCH_SIG_ID, new CircuitSignalID((byte)2,(byte)1,(short)4,(short)1))
+            .setExact(MatchField.EXP_OCH_SIGTYPE, U8.of((short) 22))
         	.build()
     )
     .setInstructions(
diff --git a/test_data/of13/flow_modify.data b/test_data/of13/flow_modify.data
index 6f3ebee..1c02f5a 100644
--- a/test_data/of13/flow_modify.data
+++ b/test_data/of13/flow_modify.data
@@ -1,6 +1,6 @@
 -- binary
 04 0e # version, type
-00 80 # length
+00 B8 # length
 12 34 56 78 # xid
 
 fe dc ba 98 76 54 32 10 # cookie
@@ -21,7 +21,7 @@
 00 00 # pad
 
 00 01 # match.type
-00 3F # match.length # 59 bytes OXMs + 4 bytes match header
+00 77 # match.length #
 
 80 00 01 08 # match.oxm_list[0].type_len - IN_PORT
 00 00 00 04 # match.oxm_list[0].value
@@ -37,6 +37,31 @@
 1C CA FE 1C B1 10 1C 00 00 28 00 00 00 00 00 00 # match.oxm_list[3].value
 FF FF FF FF FF F0 FF FF 1C 2C 3C 00 00 00 00 00 # match.oxm_list[3].mask
 
+FF FF # experimenter class
+06 10 # type_len - EXP_ODU_SIG_ID
+FF 00 00 07 # experimenter id
+55 55 # tpn
+00 50 # tslen
+01 01 01 01 01 01 01 01 01 01 00 00 # tsmap
+
+FF FF # experimenter class
+04 01 # type_len - EXP_ODU_SIG_TYPE
+FF 00 00 07 # experimenter id
+08 # value
+
+FF FF # experimenter class
+0A 06 # type_len - EXP_OCH_SIG_ID
+FF 00 00 07 # experimenter id
+02  # gridType
+01  # channelSpacing
+00 04 #  channelNumber
+00 01 #  spectralWidth
+
+FF FF # experimenter class
+08 01 # type_len - EXP_OCH_SIG_TYPE
+FF 00 00 07 # experimenter id
+16 # value
+
 00 # match.pad
 
 00 01 # instructions[0].type
@@ -69,6 +94,10 @@
             value     ='\x1C\xCA\xFE\x1C\xB1\x10\x1C\x00\x00\x28\x00\x00\x00\x00\x00\x00',
             value_mask='\xFF\xFF\xFF\xFF\xFF\xF0\xFF\xFF\x1C\x2C\x3C\x00\x00\x00\x00\x00')
         ]),
+        ofp.oxm.exp_odu_sig_id(21845,4,10),
+        ofp.oxm.exp_odu_sigtype(8),
+        ofp.oxm.exp_och_sig_id(2,1,4,1),
+        ofp.oxm.exp_och_sigtype(22),
     instructions=[
         ofp.instruction.goto_table(table_id=4),
         ofp.instruction.goto_table(table_id=7)])
@@ -92,6 +121,10 @@
             .setMasked(MatchField.IPV6_SRC, 
                        IPv6Address.of(0x1CCAFE1CB1101C00l, 0x0028000000000000l),
                        IPv6Address.of(0xFFFFFFFFFFF0FFFFl, 0x1C2C3C0000000000l))
+            .setExact(MatchField.EXP_ODU_SIG_ID, new OduSignalID((short)21845, (short)80,new byte[] {1,1,1,1,1,1,1,1,1,1}))
+            .setExact(MatchField.EXP_ODU_SIGTYPE, U8.of((short) 8 ))
+            .setExact(MatchField.EXP_OCH_SIG_ID, new CircuitSignalID((byte)2,(byte)1,(short)4,(short)1))
+            .setExact(MatchField.EXP_OCH_SIGTYPE, U8.of((short) 22))
         	.build()
     )
     .setInstructions(
diff --git a/test_data/of13/match_v3.data b/test_data/of13/match_v3.data
index 8d42019..3b5a4f5 100644
--- a/test_data/of13/match_v3.data
+++ b/test_data/of13/match_v3.data
@@ -1,6 +1,6 @@
 -- binary
 00 01 # type
-00 3C # length
+00 74 # length
 80 00 # oxm_list[0].class
 05 10 # oxm_list[0].type_len - METADATA
 FE DC BA 98 12 14 12 10 # oxm_list[0].value
@@ -15,6 +15,32 @@
 36 10 # oxm_list[4].type_len - IPV6_DST
 12 12 12 12 12 12 12 12 # oxm_list[4].value
 12 12 12 12 12 12 12 12 # ...
+
+FF FF # experimenter class
+06 10 # type_len - EXP_ODU_SIG_ID
+FF 00 00 07 # experimenter id
+55 55 # tpn
+00 50 # tslen
+01 01 01 01 01 01 01 01 01 01 00 00 # tsmap
+
+FF FF # experimenter class
+04 01 # type_len - EXP_ODU_SIG_TYPE
+FF 00 00 07 # experimenter id
+08 # value
+
+FF FF # experimenter class
+0A 06 # type_len - EXP_OCH_SIG_ID
+FF 00 00 07 # experimenter id
+02  # gridType
+01  # channelSpacing
+00 04 #  channelNumber
+00 01 #  spectralWidth
+
+FF FF # experimenter class
+08 01 # type_len - EXP_OCH_SIG_TYPE
+FF 00 00 07 # experimenter id
+16 # value
+
 00 00 00 00 # pad
 -- python
 ofp.match([
@@ -22,6 +48,10 @@
     ofp.oxm.eth_src([1,2,3,4,5,6]),
     ofp.oxm.udp_dst(53),
     ofp.oxm.ipv6_dst("\x12" * 16),
+    ofp.oxm.exp_odu_sig_id(21845,4,10),
+    ofp.oxm.exp_odu_sigtype(8),
+    ofp.oxm.exp_och_sig_id(2,1,4,1),
+    ofp.oxm.exp_och_sigtype(22)
 ])
 -- java
 builder
@@ -30,4 +60,8 @@
        .setExact(MatchField.UDP_DST, TransportPort.of(53))
        .setExact(MatchField.IPV6_DST, IPv6Address.of(new byte[] { 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 
                                                                   0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12, 0x12 }))
+       .setExact(MatchField.EXP_ODU_SIG_ID, new OduSignalID((short)21845, (short)80,new byte[] {1,1,1,1,1,1,1,1,1,1}))
+       .setExact(MatchField.EXP_ODU_SIGTYPE, U8.of((short) 8 ))
+       .setExact(MatchField.EXP_OCH_SIG_ID, new CircuitSignalID((byte)2,(byte)1,(short)4,(short)1))
+       .setExact(MatchField.EXP_OCH_SIGTYPE, U8.of((short) 22))
                                                            
\ No newline at end of file