Merge remote-tracking branch 'upstream/master'

Conflicts:
	c_gen/c_test_gen.py
	java_gen/java_type.py
	java_gen/pre-written/pom.xml
	java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchField.java
	java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/protocol/match/MatchFields.java
	loxi_ir/ir_offset.py
diff --git a/c_gen/c_code_gen.py b/c_gen/c_code_gen.py
index 9add81b..896e9ad 100644
--- a/c_gen/c_code_gen.py
+++ b/c_gen/c_code_gen.py
@@ -659,6 +659,7 @@
 
 /* Currently these are categorized as scalars */
 typedef char of_port_name_t[OF_MAX_PORT_NAME_LEN];
+typedef char of_app_code_t[OF_APP_CODE_LEN];
 typedef char of_table_name_t[OF_MAX_TABLE_NAME_LEN];
 typedef char of_desc_str_t[OF_DESC_STR_LEN];
 typedef char of_serial_num_t[OF_SERIAL_NUM_LEN];
diff --git a/c_gen/c_test_gen.py b/c_gen/c_test_gen.py
index 955f34f..05ff8e2 100644
--- a/c_gen/c_test_gen.py
+++ b/c_gen/c_test_gen.py
@@ -107,6 +107,9 @@
         of_bitmap_128_t="bitmap_128",
         of_bitmap_512_t="bitmap_512",
         of_checksum_128_t="checksum_128",
+	#Circuit extensions
+        of_app_code_t="app_code",
+	of_sig_id_t="sig_id",
         )
 
     if m_type.find("of_list_") == 0:
@@ -121,6 +124,7 @@
 string_types = [ "of_port_name_t", "of_table_name_t",
                 "of_desc_str_t", "of_serial_num_t", "of_mac_addr_t",
                 "of_ipv6_t", "of_bitmap_128_t", "of_checksum_128_t",
+                "of_str64_t","of_app_code_t"]
                 "of_str64_t", "of_bitmap_512_t"]
 
 scalar_types = integer_types[:]
diff --git a/c_gen/of_g_legacy.py b/c_gen/of_g_legacy.py
index 9c0722c..caabc1a 100644
--- a/c_gen/of_g_legacy.py
+++ b/c_gen/of_g_legacy.py
@@ -86,7 +86,9 @@
     OF_MAX_PORT_NAME_LEN  = 16,
     OF_ETH_ALEN = 6,
     OF_DESC_STR_LEN   = 256,
-    OF_SERIAL_NUM_LEN = 32
+    OF_SERIAL_NUM_LEN = 32,
+    OF_APP_CODE_LEN = 15, 	
+    OF_SIGID_LEN=6, 	
 )
 
 ## List of mixed data types
@@ -215,6 +217,10 @@
     of_bitmap_128_t = dict(bytes=16, short_name="bitmap_128"),
     of_bitmap_512_t = dict(bytes=64, short_name="bitmap_512"),
     of_checksum_128_t = dict(bytes=16, short_name="checksum_128"),
+    of_app_code_t = dict(bytes=ofp_constants["OF_APP_CODE_LEN"],
+                          short_name="app_code"),
+    of_sig_id_t = dict(bytes=ofp_constants["OF_SIGID_LEN"],
+                          short_name="sig_id"),
 )
 
 of_scalar_types = ["char", "uint8_t", "uint16_t", "uint32_t", "uint64_t",
diff --git a/java_gen/java_type.py b/java_gen/java_type.py
index dbb87eb..900aa6d 100644
--- a/java_gen/java_type.py
+++ b/java_gen/java_type.py
@@ -355,6 +355,7 @@
             default="MacAddress.NONE")
 
 port_name = gen_fixed_length_string_jtype(16)
+app_code = gen_fixed_length_string_jtype(15)
 desc_str = gen_fixed_length_string_jtype(256)
 serial_num = gen_fixed_length_string_jtype(32)
 table_name = gen_fixed_length_string_jtype(32)
@@ -512,6 +513,9 @@
          .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")
+
+sig_id = JType("CircuitSignalID") \
+         .op(version=ANY, read="CircuitSignalID.read6Bytes(bb)", write="$name.write6Bytes(bb)", default="CircuitSignalID.NONE")
 vrf = JType("VRF") \
          .op(version=ANY, read="VRF.read4Bytes(bb)", write="$name.write4Bytes(bb)", default="VRF.ZERO")
 class_id = JType("ClassId") \
@@ -581,6 +585,8 @@
         'of_bitmap_512_t': port_bitmap_512,
         'of_checksum_128_t': u128,
         'of_bsn_vport_t': bsn_vport,
+        'of_app_code_t': app_code,  
+        'of_sig_id_t': sig_id,
         'of_table_desc_t': table_desc,
         }
 
@@ -741,6 +747,10 @@
         'of_bsn_log': { 'data': var_string },
 
         'of_features_reply' : { 'auxiliary_id' : of_aux_id},
+        'of_oxm_och_sigtype' : { 'value' : u8obj },
+        'of_oxm_och_sigtype_basic' : { 'value' : u8obj },
+        'of_oxm_och_sigid' : {'value' : sig_id},
+        'of_oxm_och_sigid_basic' : {'value' : sig_id},  
 
         'of_bundle_add_msg' : { 'data' : of_message },
 }
diff --git a/java_gen/pre-written/pom.xml b/java_gen/pre-written/pom.xml
index 58ddab3..631544e 100644
--- a/java_gen/pre-written/pom.xml
+++ b/java_gen/pre-written/pom.xml
@@ -8,9 +8,9 @@
         <version>7</version>
     </parent>
 
-    <groupId>org.projectfloodlight</groupId>
+    <groupId>org.onosproject</groupId>
     <artifactId>openflowj</artifactId>
-    <version>0.9.0-SNAPSHOT</version>
+    <version>0.3.7.oe</version>
     <packaging>jar</packaging>
 
     <name>OpenFlowJ-Loxi</name>
@@ -224,30 +224,13 @@
                                     <ciBuildId>${env.BUILD_ID}</ciBuildId>
                                     <ciBuildTag>${env.BUILD_TAG}</ciBuildTag>
                                    <ciJobName>${env.JOB_NAME}</ciJobName>
-i                                  <ciNodeName>${env.NODE_NAME}</ciNodeName>
+                                   <ciNodeName>${env.NODE_NAME}</ciNodeName>
                                 </manifestEntries>
                             </manifestSection>
                         </manifestSections>
                     </archive>
                 </configuration>
             </plugin>
-
-            <!--
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-gpg-plugin</artifactId>
-                <version>1.4</version>
-                <executions>
-                    <execution>
-                        <id>sign-artifacts</id>
-                        <phase>verify</phase>
-                        <goals>
-                            <goal>sign</goal>
-                        </goals>
-                    </execution>
-                </executions>
-            </plugin>
-            -->
         </plugins>
         <resources>
             <resource>
@@ -259,4 +242,64 @@
             </resource>
         </resources>
     </build>
+    <profiles>
+      <profile>
+        <id>release</id>
+        <build>
+          <plugins>
+              <plugin>
+                  <groupId>org.apache.maven.plugins</groupId>
+                  <artifactId>maven-source-plugin</artifactId>
+                  <version>2.2.1</version>
+                  <executions>
+                      <execution>
+                          <id>attach-sources</id>
+                          <goals>
+                              <goal>jar-no-fork</goal>
+                          </goals>
+                      </execution>
+                  </executions>
+              </plugin>
+              <plugin>
+                  <groupId>org.apache.maven.plugins</groupId>
+                  <artifactId>maven-javadoc-plugin</artifactId>
+                  <version>2.9.1</version>
+                  <executions>
+                      <execution>
+                          <id>attach-javadocs</id>
+                          <goals>
+                              <goal>jar</goal>
+                          </goals>
+                      </execution>
+                  </executions>
+              </plugin>
+              <plugin>
+                  <groupId>org.apache.maven.plugins</groupId>
+                  <artifactId>maven-gpg-plugin</artifactId>
+                  <version>1.5</version>
+                  <executions>
+                      <execution>
+                          <id>sign-artifacts</id>
+                          <phase>verify</phase>
+                          <goals>
+                              <goal>sign</goal>
+                          </goals>
+                      </execution>
+                  </executions>
+              </plugin>
+              <plugin>
+                  <groupId>org.sonatype.plugins</groupId>
+                  <artifactId>nexus-staging-maven-plugin</artifactId>
+                  <version>1.6.5</version>
+                  <extensions>true</extensions>
+                  <configuration>
+                      <serverId>ossrh</serverId>
+                      <nexusUrl>https://oss.sonatype.org/</nexusUrl>
+                      <autoReleaseAfterClose>false</autoReleaseAfterClose>
+                  </configuration>
+              </plugin>
+          </plugins>
+        </build>
+      </profile>
+    </profiles>
 </project>
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 931211f..e2f172b 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
@@ -28,6 +28,7 @@
 import org.projectfloodlight.openflow.types.UDF;
 import org.projectfloodlight.openflow.types.VRF;
 import org.projectfloodlight.openflow.types.VlanPcp;
+import org.projectfloodlight.openflow.types.CircuitSignalID;
 
 @SuppressWarnings("unchecked")
 public class MatchField<F extends OFValueType<F>> {
@@ -257,6 +258,22 @@
     public final static MatchField<ClassId> BSN_VLAN_XLATE_PORT_GROUP_ID =
             new MatchField<ClassId>("bsn_vlan_xlate_port_group_id", MatchFields.BSN_VLAN_XLATE_PORT_GROUP_ID);
 
+    public final static MatchField<U8> OCH_SIGTYPE =
+            new MatchField<U8>("och_sigtype",
+                                    MatchFields.OCH_SIGTYPE);
+
+    public final static MatchField<U8> OCH_SIGTYPE_BASIC =
+            new MatchField<U8>("och_sigtype_basic",
+                                    MatchFields.OCH_SIGTYPE_BASIC);
+
+    public final static MatchField<CircuitSignalID> OCH_SIGID =
+            new MatchField<CircuitSignalID>("och_sigid",
+                                    MatchFields.OCH_SIGID);
+
+    public final static MatchField<CircuitSignalID> OCH_SIGID_BASIC =
+            new MatchField<CircuitSignalID>("och_sigid_basic",
+                                    MatchFields.OCH_SIGID);
+    
     public final static MatchField<OFBooleanValue> BSN_L2_CACHE_HIT =
             new MatchField<OFBooleanValue>("bsn_l2_cache_hit", MatchFields.BSN_L2_CACHE_HIT);
 
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 3a0ec89..12e2b20 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
@@ -64,4 +64,8 @@
     BSN_TCP_FLAGS,
     BSN_VLAN_XLATE_PORT_GROUP_ID,
     BSN_L2_CACHE_HIT,
+    OCH_SIGTYPE,
+    OCH_SIGTYPE_BASIC,
+    OCH_SIGID,
+    OCH_SIGID_BASIC,
 }
diff --git a/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/CircuitSignalID.java b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/CircuitSignalID.java
new file mode 100644
index 0000000..7a304f6
--- /dev/null
+++ b/java_gen/pre-written/src/main/java/org/projectfloodlight/openflow/types/CircuitSignalID.java
@@ -0,0 +1,137 @@
+package org.projectfloodlight.openflow.types;
+
+import com.google.common.collect.ComparisonChain;
+import org.jboss.netty.buffer.ChannelBuffer;
+import org.projectfloodlight.openflow.exceptions.OFParseError;
+
+import com.google.common.hash.PrimitiveSink;
+
+
+public class CircuitSignalID implements OFValueType<CircuitSignalID> {
+    static final int length = 6;
+
+    private byte gridType;
+    private byte channelSpacing ;
+    private short channelNumber;
+    private short spectralWidth;
+
+    public static final CircuitSignalID NONE = new CircuitSignalID((byte)0,
+                                                                   (byte)0,
+                                                                   (short)0,
+                                                                   (short)0);
+
+
+    public CircuitSignalID(byte gridType, byte channelSpacing,
+                            short channelNumber,
+                            short spectralWidth)
+    {
+        this.gridType = gridType;
+        this.channelSpacing = channelSpacing;
+        this.channelNumber = channelNumber;
+        this.spectralWidth = spectralWidth;
+
+    }
+
+    @Override
+    public int getLength() {
+        return length;
+    }
+
+    public byte getGridType() {
+        return gridType;
+    }
+
+    public byte getChannelSpacing() {
+        return channelSpacing;
+    }
+
+    public short getChannelNumber() {
+        return channelNumber;
+    }
+
+    public short getSpectralWidth() {
+        return spectralWidth;
+    }
+
+    public void write6Bytes(ChannelBuffer c) {
+        c.writeByte(gridType);
+        c.writeByte(channelSpacing);
+        c.writeShort(channelNumber);
+        c.writeShort(spectralWidth);
+    }
+
+    public static CircuitSignalID read6Bytes(ChannelBuffer c) throws OFParseError {
+        return new CircuitSignalID((byte)c.readUnsignedByte(),
+                                   (byte)c.readUnsignedByte(),
+                                   (short)c.readUnsignedShort(),
+                                   (short)c.readUnsignedShort());
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+
+        CircuitSignalID that = (CircuitSignalID) o;
+
+        if (channelNumber != that.channelNumber) return false;
+        if (channelSpacing != that.channelSpacing) return false;
+        if (gridType != that.gridType) return false;
+        if (spectralWidth != that.spectralWidth) return false;
+
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int result = (int) gridType;
+        result = 31 * result + (int) channelSpacing;
+        result = 31 * result + (int) channelNumber;
+        result = 31 * result + (int) spectralWidth;
+        return result;
+    }
+
+    @Override
+    public String toString() {
+        return "CircuitSignalID{" +
+                "gridType=" + gridType +
+                ", channelSpacing=" + channelSpacing +
+                ", channelNumber=" + channelNumber +
+                ", spectralWidth=" + spectralWidth +
+                '}';
+    }
+
+    @Override
+    public CircuitSignalID applyMask(CircuitSignalID mask) {
+        return new CircuitSignalID((byte) (this.gridType & mask.gridType),
+                                   (byte) (this.channelSpacing & mask
+                                           .channelSpacing),
+                                   (short) (this.channelNumber & mask
+                                           .channelNumber),
+                                   (short) (this.spectralWidth & mask
+                                           .spectralWidth));
+    }
+
+
+    @Override
+    public int compareTo(CircuitSignalID o) {
+        return ComparisonChain.start()
+                              .compare(gridType,o.gridType)
+                              .compare(channelSpacing,o.channelSpacing)
+                              .compare(channelNumber,o.channelNumber)
+                              .compare(spectralWidth,o.spectralWidth)
+                              .result();
+    }
+
+
+    @Override
+    public void putTo(PrimitiveSink sink) {
+        sink.putByte(gridType);
+        sink.putByte(channelSpacing);
+        sink.putShort(channelNumber);
+        sink.putShort(spectralWidth);
+    }
+
+
+
+}
diff --git a/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/OFOxmTest.java b/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/OFOxmTest.java
index 8482886..04034cc 100644
--- a/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/OFOxmTest.java
+++ b/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/OFOxmTest.java
@@ -59,4 +59,6 @@
         OFOxm<IPv4Address> canonical = ipv4SrcMasked.getCanonical();
         assertEquals(ipv4SrcMasked, canonical);
     }
+
+
 }
diff --git a/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/match/MatchFieldIteration13Test.java b/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/match/MatchFieldIteration13Test.java
index b654a53..1bd3efe 100644
--- a/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/match/MatchFieldIteration13Test.java
+++ b/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/match/MatchFieldIteration13Test.java
@@ -1,10 +1,22 @@
 package org.projectfloodlight.protocol.match;
 
+import org.junit.Test;
 import org.projectfloodlight.openflow.protocol.OFFactories;
 import org.projectfloodlight.openflow.protocol.OFVersion;
+import org.projectfloodlight.openflow.protocol.match.Match;
+import org.projectfloodlight.openflow.protocol.match.MatchField;
+import org.projectfloodlight.openflow.types.U8;
 
 public class MatchFieldIteration13Test extends MatchFieldIterationBase {
     public MatchFieldIteration13Test() {
         super(OFFactories.getFactory(OFVersion.OF_13));
     }
+
+    @Test
+    public void matchCircuitFields()
+    {
+        Match.Builder builder = factory.buildMatchV3().setExact(MatchField
+                                                                        .OCH_SIGTYPE, U8.ZERO);
+
+    }
 }
diff --git a/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/match/MatchFieldIterationBase.java b/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/match/MatchFieldIterationBase.java
index 9c72e37..892c5a0 100644
--- a/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/match/MatchFieldIterationBase.java
+++ b/java_gen/pre-written/src/test/java/org/projectfloodlight/protocol/match/MatchFieldIterationBase.java
@@ -25,7 +25,7 @@
 
 public class MatchFieldIterationBase {
 
-    private OFFactory factory;
+    protected OFFactory factory;
 
     protected MatchFieldIterationBase(OFFactory factory) {
         this.factory = factory;
diff --git a/loxi_ir/ir_offset.py b/loxi_ir/ir_offset.py
index 5eff8e0..490c6b0 100644
--- a/loxi_ir/ir_offset.py
+++ b/loxi_ir/ir_offset.py
@@ -25,7 +25,8 @@
     OF_MAX_PORT_NAME_LEN  = 16,
     OF_ETH_ALEN = 6,
     OF_DESC_STR_LEN   = 256,
-    OF_SERIAL_NUM_LEN = 32
+    OF_SERIAL_NUM_LEN = 32,
+    OF_APP_CODE_LEN = 15 	
 )
 
 
@@ -109,6 +110,8 @@
     of_octets_t = (0, False),
     of_bitmap_128_t = (16, True),
     of_checksum_128_t = (16, True),
+    of_app_code_t = (15,True),
+    of_sig_id_t = (6, True),
     of_bitmap_512_t = (64, True),
 )
 
diff --git a/openflow_input/circuit b/openflow_input/circuit
new file mode 100644
index 0000000..0f436a4
--- /dev/null
+++ b/openflow_input/circuit
@@ -0,0 +1,184 @@
+#version 4
+
+/* WDM grid types */
+enum ofp_grid_type {
+    OFPGRIDT_RES    = 0,
+    OFPGRIDT_DWDM   = 1,
+    OFPGRIDT_CWDM   = 2,
+    OFPGRIDT_FLEX   = 3,
+};
+
+/* WDM grid channel spacing */
+enum ofp_channel_spacing {
+    OFPCS_RES       = 0,
+    OFPCS_GHZ_100    = 1,
+    OFPCS_GHZ_50     = 2,
+    OFPCS_GHZ_24     = 3,
+    OFPCS_GHZ_12P5   = 4,        /* 12.5 GHZ */
+    OFPCS_GHZ_6P25   = 5,        /* 6.25 GHZ */
+};
+
+/* Layer classes (families) supported for optical transport port. */
+enum ofp_port_optical_transport_layer_class {
+    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*/
+    OFPPOTL_ODUCLT = 4,           /* Class of ODU client layer signal types*/
+};
+
+/* Base port layer signal types */
+enum ofp_otport_signal_type {
+    OFPOTPT_OTSn           = 1,
+    OFPOTPT_OMSn           = 2,
+    OFPOTPT_OPSn           = 3,
+    OFPOTPT_OPSM           = 4,
+    OFPOTPT_OCH            = 5,
+    OFPOTPT_OTU1           = 11,
+    OFPOTPT_OTU2           = 12,
+    OFPOTPT_OTU3           = 13,
+    OFPOTPT_OTU4           = 14,
+};
+
+/* OCH layer signal types */
+enum ofp_och_signal_type {
+    OFPOCHT_FIX_GRID       = 1,
+    OFPOCHT_FLEX_GRID      = 2,
+};
+
+// Not used .. just for info on structure.
+struct ofp_och_signal_id {
+     uint8_t grid;            //Type of WDM grid - OFPGRIDT_*
+     uint8_t cs;              //Channel Spacing - OFPCS_*
+     uint16_t n;             // Used to calculate frequency as in [ITU G.694.1]
+                             // Frequency(THz)= 193.1 THz + n * chan_spacing
+     uint16_t m;             // Used to calculate spectral width [ITU G.694.1]
+                             // Spectral Width (GHz) = m * 12.5
+                            // For fix grid networks, m=1
+};
+
+struct of_oxm_och_sigtype : of_oxm {
+    uint32_t type_len == 0x00085801; 	
+    uint8_t value;
+};
+
+struct of_oxm_och_sigid : of_oxm {
+    uint32_t type_len == 0x00085A06; 
+    of_sig_id_t value;
+};
+
+struct of_oxm_och_sigtype_basic : of_oxm {
+    uint32_t type_len == 0x80005801; 	
+    uint8_t value;
+};
+
+struct of_oxm_och_sigid_basic : of_oxm {
+    uint32_t type_len == 0x80005A06; 
+    of_sig_id_t value;
+};
+
+
+struct of_action_circuit : of_action_experimenter {
+    uint16_t type == 65535;
+    uint16_t len;
+    uint32_t experimenter == 0x748771;
+    uint16_t subtype == 25;
+    uint16_t hlength == 16; // fix length of OXM field
+    of_oxm_t field;
+    pad(2);
+};
+
+
+struct of_circuit_ports_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 == 0x748771;
+    uint32_t subtype == 13;
+};
+
+
+struct of_circuit_ports_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 == 0x748771;
+    uint32_t subtype == 13;
+    list(of_port_optical_t) entries;	
+};
+
+struct of_port_optical {
+    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_port_desc_prop_optical_transport_t) desc; 					
+};
+
+struct of_port_desc_prop_optical_transport {
+   uint16_t type; 
+   uint16_t length;
+   uint8_t port_signal_type; 
+   uint8_t reserved;
+   pad(1);
+   uint8_t port_type;	
+};
+
+struct of_circuit_port_status : of_experimenter {
+    uint8_t version;
+    uint8_t type == 4;
+    uint16_t length;
+    uint32_t xid;
+    uint32_t experimenter == 0x748771;
+    uint32_t exp_type == 12;
+    enum ofp_port_reason reason;
+    pad(7);
+    of_port_no_t port_no;
+    uint16_t lengths;
+    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;
+    uint64_t ignore;	
+};
+
+ 
+
+
+struct of_port_optical_transport_application_code 
+{
+   uint16_t feature_type; 
+   uint8_t oic_type; 
+   of_app_code_t app_code;
+};
+
+
+struct of_port_optical_transport_layer_entry {
+   uint8_t layer_class; 
+   uint8_t signal_type;
+   uint8_t adaptation;
+   pad(5);
+};
+
+
+/* ODU Layer Stack Feature Encoding */
+struct of_port_optical_transport_layer_stack {
+   uint16_t feature_type; 
+   uint16_t length; 
+   pad(4); 
+   list(of_port_optical_transport_layer_entry_t) entries; 
+};
+