diff --git a/java_gen/java_type.py b/java_gen/java_type.py
index 7cb39fa..e1fa563 100644
--- a/java_gen/java_type.py
+++ b/java_gen/java_type.py
@@ -515,7 +515,10 @@
          .op(read="OFBufferId.of(bb.readInt())", write="bb.writeInt($name.getInt())", default="OFBufferId.NO_BUFFER")
 lag_id = JType("LagId") \
          .op(version=ANY, read="LagId.read4Bytes(bb)", write="$name.write4Bytes(bb)", default="LagId.NONE")
-
+odu_sig_id = JType("OduSignalID") \
+        .op(read="OduSignalID.readFrom(bb)", \
+            write="$name.writeTo(bb)",
+            default='OduSignalID.DEFAULT')
 sig_id = JType("CircuitSignalID") \
          .op(version=ANY, read="CircuitSignalID.read6Bytes(bb)", write="$name.write6Bytes(bb)", default="CircuitSignalID.NONE")
 vrf = JType("VRF") \
@@ -595,6 +598,8 @@
         'of_app_code_t': app_code,  
         'of_sig_id_t': sig_id,
         'of_table_desc_t': table_desc,
+        'of_odu_sig_id_t': odu_sig_id,
+        'of_och_sig_id_t' : sig_id,
         }
 
 ## Map that defines exceptions from the standard loxi->java mapping scheme
@@ -772,6 +777,9 @@
         'of_oxm_och_sigid_basic' : {'value' : sig_id},  
 
         'of_bundle_add_msg' : { 'data' : of_message },
+
+        'of_oxm_exp_odu_sigtype' : { 'value' : u8obj },
+	'of_oxm_exp_och_sigtype' : { 'value' : u8obj },
 }
 
 
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java
index 3ea9215..55cd59f 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java
@@ -29,6 +29,7 @@
 import org.projectfloodlight.openflow.types.VRF;
 import org.projectfloodlight.openflow.types.VlanPcp;
 import org.projectfloodlight.openflow.types.CircuitSignalID;
+import org.projectfloodlight.openflow.types.OduSignalID;
 
 @SuppressWarnings("unchecked")
 public class MatchField<F extends OFValueType<F>> {
@@ -289,6 +290,18 @@
     public final static MatchField<MacAddress> BSN_INNER_ETH_SRC =
             new MatchField<MacAddress>("bsn_inner_eth_src", MatchFields.BSN_INNER_ETH_SRC);
 
+    public final static MatchField<OduSignalID> EXP_ODU_SIG_ID =
+            new MatchField<OduSignalID>("exp_odu_sig_id", MatchFields.EXP_ODU_SIG_ID);
+    
+    public final static MatchField<U8> EXP_ODU_SIGTYPE =
+            new MatchField<U8>("exp_odu_sigtype", MatchFields.EXP_ODU_SIGTYPE);
+    
+    public final static MatchField<CircuitSignalID> EXP_OCH_SIG_ID =
+            new MatchField<CircuitSignalID>("exp_och_sig_id", MatchFields.EXP_OCH_SIG_ID);
+    
+    public final static MatchField<U8> EXP_OCH_SIGTYPE =
+            new MatchField<U8>("exp_och_sigtype", MatchFields.EXP_OCH_SIGTYPE);
+
     public String getName() {
         return name;
     }
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchFields.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchFields.java
index cd5ba32..abfa786 100644
--- a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchFields.java
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchFields.java
@@ -72,4 +72,8 @@
     OCH_SIGTYPE_BASIC,
     OCH_SIGID,
     OCH_SIGID_BASIC,
+    EXP_ODU_SIG_ID,
+    EXP_ODU_SIGTYPE,
+    EXP_OCH_SIG_ID,
+    EXP_OCH_SIGTYPE,
 }
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OduSignalID.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OduSignalID.java
new file mode 100644
index 0000000..c97c4d0
--- /dev/null
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/OduSignalID.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright  2015, ECI Telecom, Inc.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+
+ * http://www.apache.org/licenses/LICENSE-2.0
+
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+
+ */
+package org.projectfloodlight.openflow.types;
+
+
+import java.util.List;
+
+import org.jboss.netty.buffer.ChannelBuffer;
+
+import com.google.common.collect.ComparisonChain;
+import com.google.common.primitives.UnsignedBytes;
+import com.google.common.hash.PrimitiveSink;
+
+import org.projectfloodlight.openflow.exceptions.OFParseError;
+import org.projectfloodlight.openflow.protocol.*;
+import com.google.common.hash.Funnel;
+import org.projectfloodlight.openflow.util.*;
+import java.util.Arrays;
+
+public class OduSignalID implements OFValueType<OduSignalID> {
+
+    // version: 1.3
+    final static byte WIRE_VERSION  = 4;
+    final static int MINIMUM_LENGTH = 4;
+
+        private final static int DEFAULT_TPN = 0x0;
+        private final static int DEFAULT_TSLEN = 80;
+        private final static byte[] DEFAULT_TSMAP = new byte[10];
+
+    // OF message fields
+    private final int tpn;
+    private final int tslen;
+    private final byte[] tsmap;
+ 
+   // Immutable default instance
+    public final static  OduSignalID DEFAULT = new  OduSignalID(
+        DEFAULT_TPN, DEFAULT_TSLEN, DEFAULT_TSMAP
+    );
+
+    // package private constructor - used by readers, builders, and factory
+     public OduSignalID(int tpn, int tslen, byte[] tsmap) {
+        this.tpn = tpn;
+        this.tslen = tslen;
+        this.tsmap = tsmap;
+    }
+
+    public int getTpn() {
+        return tpn;
+    }
+
+    public int getTslen() {
+        return tslen;
+    }
+
+    public byte[] getTsmap() {
+        return tsmap;
+    }
+
+
+    @Override
+    public int getLength() {
+      return MINIMUM_LENGTH + 12; //  tslen == 80 
+    }
+ 
+    public void writeTo(ChannelBuffer c) {
+        c.writeShort(tpn);
+        c.writeShort(tslen);
+        c.writeBytes(tsmap); // 10 bytes
+        c.writeZero(2); // write bytes for add padding alignment (the size of bytes in tsmap must be divided in 4)   
+    }
+
+     public static OduSignalID readFrom(ChannelBuffer c)   {
+        int tpn = U16.f(c.readShort());
+        int tslen = U16.f(c.readShort());
+        byte[] tsmap = null;
+        tsmap =ChannelUtils.readBytes(c, 10);
+        ChannelUtils.readBytes(c, 2); // skip padding 
+        OduSignalID oduSigId = new  OduSignalID(
+                    tpn,
+                      tslen,
+                      tsmap
+                    );
+          return oduSigId;
+    }
+
+
+    public void putTo(PrimitiveSink sink) {
+        FUNNEL.funnel(this, sink);
+    }
+
+    final static  OduSignalIDFunnel FUNNEL = new  OduSignalIDFunnel();
+    static class  OduSignalIDFunnel implements Funnel< OduSignalID> {
+        private static final long serialVersionUID = 1L;
+        @Override
+        public void funnel( OduSignalID message, PrimitiveSink sink) {
+            sink.putInt(message.tpn);
+            sink.putInt(message.tslen);
+            sink.putBytes(message.tsmap);
+        }
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder b = new StringBuilder(" OduSignalID(");
+        b.append("tpn=").append(tpn);
+        b.append(", ");
+        b.append("tslen=").append(tslen);
+        b.append(", ");
+        b.append("tsmap=").append(Arrays.toString(tsmap));
+        b.append(")");
+        return b.toString();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+         OduSignalID other = (OduSignalID) obj;
+
+        if( tpn != other.tpn)
+            return false;
+        if( tslen != other.tslen)
+            return false;
+        if (!Arrays.equals(tsmap, other.tsmap))
+                return false;
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+
+        result = prime * result + tpn;
+        result = prime * result + tslen;
+        result = prime * result + Arrays.hashCode(tsmap);
+        return result;
+    }
+
+    @Override
+    public OduSignalID applyMask(OduSignalID mask) {
+        byte[] maskTsmap = null;
+        if (this.tsmap!=null && this.tsmap.length > 0) {
+	       maskTsmap = new byte[this.tsmap.length];
+           int i = 0;
+       	   for (byte b : this.tsmap){
+		       maskTsmap[i] =(byte)  (b & mask.tsmap[i++]);
+           }
+        }
+        return new OduSignalID(this.tpn & mask.tpn,
+                                   (short) (this.tslen & mask
+                                           .tslen),
+                                    maskTsmap);
+    }
+
+    @Override
+    public int compareTo(OduSignalID o) {
+        return ComparisonChain.start()
+                              .compare(tpn,o.tpn)
+                              .compare(tslen,o.tslen)
+                              .compare(tsmap,o.tsmap, UnsignedBytes.lexicographicalComparator())
+                              .result();
+    }
+
+}
diff --git a/loxi_ir/ir_offset.py b/loxi_ir/ir_offset.py
index 64c01b6..59d659a 100644
--- a/loxi_ir/ir_offset.py
+++ b/loxi_ir/ir_offset.py
@@ -115,6 +115,8 @@
     of_app_code_t = (15,True),
     of_sig_id_t = (6, True),
     of_bitmap_512_t = (64, True),
+    of_odu_sig_id_t = (16, True),
+    of_och_sig_id_t = (6, True),
 )
 
 def type_dec_to_count_base(m_type):
diff --git a/openflow_input/circuit b/openflow_input/circuit
index 0f436a4..7e02014 100644
--- a/openflow_input/circuit
+++ b/openflow_input/circuit
@@ -19,7 +19,7 @@
 };
 
 /* Layer classes (families) supported for optical transport port. */
-enum ofp_port_optical_transport_layer_class {
+enum ofp_port_optical_transport_layer_class(wire_type=uint8_t){
     OFPPOTL_PORT   = 1,           /* Class of base port layer signal types */
     OFPPOTL_OCH    = 2,           /* Class of OCH layer signal types*/
     OFPPOTL_ODU    = 3,           /* Class of ODU layer signal types*/
diff --git a/openflow_input/optical_tras_ext b/openflow_input/optical_tras_ext
new file mode 100644
index 0000000..ddb08df
--- /dev/null
+++ b/openflow_input/optical_tras_ext
@@ -0,0 +1,212 @@
+/* This file input supports the Optical Transport Protocol Extentions - version 1.0 */
+
+#version 4
+/*Supported signal types for layer class OFPOTPL_ODU */
+enum ofp_odu_signal_type (wire_type=uint8_t) {
+    OFPODUT_ODU1           = 1,
+    OFPODUT_ODU2           = 2,
+    OFPODUT_ODU3           = 3,
+    OFPODUT_ODU4           = 4,
+    OFPODUT_ODU0           = 10,
+    OFPODUT_ODU2E          = 11,
+    OFPODUT_ODUfCBR        = 20,
+    OFPODUT_ODUfGFPfHAO    = 21,
+    OFPODUT_ODUfGFPf       = 22,
+};
+
+
+//enum ofp_experimenter_multipart_type_exp (wire_type=uint32_t){
+  //OFPEMPTE = 1,
+//};
+
+//enum ofp_port_desc_prop_type_exp (wire_type=uint32_t){
+ //OFPPDPT_OPTICAL_TRAMSPORT = 2,
+//};
+
+/* Supported signal types for layer class OFPPOTL_PORT */
+enum ofp_port_optical_transport_signal_type (wire_type=uint8_t) {
+     OFPPOTST_OTSn = 1,
+     OFPPOTST_OMSn = 2,
+     OFPPOTST_OPSn = 3,
+     OFPPOTST_OPSM = 4,
+     OFPPOTST_OCH  = 5,
+     OFPPOTST_OTU1 = 11,
+     OFPPOTST_OTU2 = 12,
+     OFPPOTST_OTU3 = 13,
+     OFPPOTST_OTU4 = 14,
+};
+
+
+/* Features of optical transport ports available in switch. */
+enum ofp_port_optical_transport_feature_type (wire_type=uint16_t) {
+    OFPPOTFT_OPT_INTERFACE_CLASS = 1,  /* Application code/ID encoding */
+    OFPPOTFT_LAYER_STACK         = 2,  /* Supported signal types and adaptations */
+};
+
+
+/*Supported signal types for layer class OFPOTPL_ODUCLT */
+enum ofp_oduclt_signal_type(wire_type=uint8_t) {
+   OFPODUCLT_STM16 	= 1,
+   OFPODUCLT_STM64  	= 2,
+   OFPODUCLT_STM256 	= 3,
+   OFPODUCLT_STM1       = 4,
+   OFPODUCLT_STM4       = 5,
+   OFPODUCLT_GBE1       = 6,
+   OFPODUCLT_GBE10      = 7,
+   OFPODUCLT_GBE40        = 8,
+   OFPODUCLT_GBE100	  = 9,
+   OFPODUCLT_FC100        = 10, 
+   OFPODUCLT_FC200        = 11,
+   OFPODUCLT_FC400        = 12,
+   OFPODUCLT_FC800        = 13,
+   OFPODUCLT_FC1200       = 14,
+   OFPODUCLT_GPON         = 15,
+   OFPODUCLT_XGPON        = 16,
+   OFPODUCLT_IB_SDR       = 17,
+   OFPODUCLT_IB_DDR       = 18,
+   OFPODUCLT_IB_QDR       = 19,
+   OFPODUCLT_SBCON_ESCON  = 20,
+   OFPODUCLT_DVBASI       = 21,
+   OFPODUCLT_SDI          = 22,
+   OFPODUCLT_SDI1G5       = 23,
+   OFPODUCLT_SDI3G        = 24,
+   OFPODUCLT_ATM          = 25,
+   OFPODUCLT_ETH          = 26,
+   OFPODUCLT_MPLS         = 27,
+   OFPODUCLT_IP           = 28,
+};
+
+/* Supported adaptations for optical transport port layer stack*/
+enum ofp_adaptations_type (wire_type=uint8_t){
+   OFPADAPT_OTS_OMS    = 1,
+   OFPADAPT_OMS_OCH    = 2,
+   OFPADAPT_OPS_OCHr   = 3,
+   OFPADAPT_OPSM_OTUk  = 4,
+   OFPADAPT_OCH_OTUk   = 5,
+   OFPADAPT_ODUk_ODUij    = 6,
+   OFPADAPT_ODUk_ODUj21   = 7,
+   OFPADAPT_ODUkh_ODUj21  = 8,
+   OFPADAPT_ODU0_CBRx     = 9,
+   OFPADAPT_ODUk_CBRx     = 10,
+   OFPADAPT_ODUk_CBRxg    = 11,
+   OFPADAPT_ODUk_RSn      = 12,
+   OFPADAPT_ODUk_ATM      = 13,
+   OFPADAPT_ODUk_ETH      = 14,
+   OFPADAPT_ODUkh_ETH     = 15,
+   OFPADAPT_ODUk_ETHPPOS  = 16,
+};
+
+struct of_oxm_exp_odu_sigtype : of_oxm {
+    uint32_t type_len == 0xFFFF0401; 
+    uint32_t experimenter == 0xFF000007;
+    uint8_t  value;
+};
+
+struct of_oxm_exp_odu_sig_id : of_oxm {
+     uint32_t type_len == 0xFFFF0610; 
+     uint32_t experimenter == 0xFF000007;
+     of_odu_sig_id_t value;// size of this struct is 16 bytes 2+2+10+2(pad)   
+}; 
+ 
+//This struct defenition is unnecessury for the openflow java ("make java" command )
+//It is reqiured for wireshark dissector ("make wireshark" command) 
+struct of_odu_sig_id_t { 
+    uint16_t tpn;           //Tributary Port Number 
+    uint16_t length;         // Number of Tributary Slots included in tsmap,
+			    // based on the Server ODU type and TS Granularity
+    of_octets_t tsmap;       //tsmap;
+};
+ 
+struct of_oxm_exp_och_sigtype : of_oxm {
+    uint32_t type_len == 0xFFFF0801; 
+    uint32_t experimenter == 0xFF000007;
+    uint8_t  value;
+};
+ 
+struct of_oxm_exp_och_sig_id : of_oxm {
+     uint32_t type_len == 0xFFFF0A06; 
+     uint32_t experimenter == 0xFF000007;
+     of_och_sig_id_t value;   
+}; 
+
+
+// open flow extention - support port description Extentions for OTN Ports 
+struct of_exp_port_desc_request : of_experimenter_stats_request {
+    uint8_t version;
+    uint8_t type == 18;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 0xffff;
+    enum ofp_stats_request_flags flags;
+    pad(4);
+    uint32_t experimenter == 0xFF000007;
+    uint32_t subtype == 1;//enum ofp_experimenter_multipart_type exp_type == 1;
+};
+
+struct of_exp_port_desc_reply : of_experimenter_stats_reply {
+    uint8_t version;
+    uint8_t type == 19;
+    uint16_t length;
+    uint32_t xid;
+    uint16_t stats_type == 0xffff;
+    enum ofp_stats_reply_flags flags;
+    pad(4);
+    uint32_t experimenter == 0xFF000007;
+    uint32_t subtype == 1;//enum ofp_experimenter_multipart_type subtype == 1;
+    list(of_exp_port_t) entries;
+};
+
+struct of_exp_port {
+  of_port_no_t port_no;
+  uint16_t length;
+  pad(2);
+  of_mac_addr_t hw_addr;
+  pad(2);
+  of_port_name_t name;
+  enum ofp_port_config config;
+  enum ofp_port_state state;
+  list(of_exp_port_desc_prop_optical_transport_t) properties;
+};
+
+struct of_exp_port_des_prop_header {
+  uint16_t type == 2; //enum ofp_port_desc_prop_type_exp type == 2;
+  uint16_t length;
+};
+
+struct of_exp_port_desc_prop_optical_transport // : of_exp_port_des_prop_header 
+{
+  uint16_t type == 2;
+  uint16_t length; // length in bytes of this property
+  enum ofp_port_optical_transport_signal_type  port_signal_type;
+                       //base port layer signal type (enum ofp_port_optical_transport_signal_type) 
+  uint8_t reserved;
+  pad(2);
+  list(of_exp_port_optical_transport_layer_stack_t) features; // list of of_port_optical_transport_feature_header 
+};
+
+struct of_exp_port_optical_transport_feature_header {
+  uint16_t feature_type == ?; // from enum ofp_port_optical_transport_feature_type
+  uint16_t length;
+};
+
+/* OTN Layer Stack Feature Encoding */ //of_port_optical_transport_layer_stack (in circuit ) 
+struct of_exp_port_optical_transport_layer_stack// : of_exp_port_optical_transport_feature_header
+{
+  uint16_t feature_type == 2; /* Set to OFPOTPF_LAYER_STACK */
+  uint16_t length;            /* length of feature excluding padding*/
+  pad(4);                     /* Zero bytes-see above for sizing */
+  list(of_exp_port_optical_transport_layer_entry_t) value; /* 0 or more fields */
+};
+
+/*OTN Layer Stack Entry Encoding */ // can be found in circut of_port_optical_transport_layer_entry
+struct of_exp_port_optical_transport_layer_entry {
+  enum ofp_port_optical_transport_layer_class layer_class;    /* OFPPOTL_* */
+  uint8_t signal_type;    /*OFP(OTP/OCH/ODU/ODUCL)T_*/
+  enum ofp_adaptations_type adaptation;/* OFPADAPT_*/
+  pad(5);         /* Align to 64-bit boundary */
+};
+
+
+
+
+
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
