-- 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();
         






