#version 4

struct of_calient_port_desc_stats_request : of_calient_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 == 0x0080F958;
    uint32_t subtype == 1;
};


struct of_calient_port_desc_prop {
    uint16_t type == ?; /* One of OFPPDPT_*. */
    uint16_t length;    /* Length in bytes of this property. */
};


enum ofp_calient_optical_port_admin_state(wire_type=uint8_t, bitmask=True){
    OFPAS_IN_SERVICE = 1,     /*Circuit Port in Service*/
    OFPAS_OUT_OF_SERVICE = 2, /*Circuit Port out of Service*/
    OFPAS_OOS_NP = 3          /*Circuit Port out of Service, not provisioned*/
};

enum ofp_calient_optical_port_oper_state(wire_type=uint8_t, bitmask=True){
    OFPOS_IN_SERVICE = 8,     /*Circuit Port in Service*/
    OFPOS_OUT_OF_SERVICE = 16 /*Circuit Port out of Service*/
};

enum ofp_calient_optical_port_oper_capability(wire_type=uint8_t, bitmask=True){
    OFPCS_NoHardware = 1,  /* when port is not in connection */
    OFPCS_Ok = 2,          /* port is in Connection which is made successfully */
    OFPCS_Failed = 3,      /* when port is in Connection which is Failed */
    OFPCS_Initializing = 4,/* when port is in Connection which is being made */
};





struct of_calient_port_desc_prop_optical : of_calient_port_desc_prop{
    uint16_t type == 2; /* OFPPDPT_OPTICAL_CIRCUIT */
    uint16_t length;    /* Length in bytes of this property. */
    enum ofp_calient_optical_port_admin_state in_admin_status;
    enum ofp_calient_optical_port_oper_state  in_oper_status;
    enum ofp_calient_optical_port_oper_capability in_oper_capability;/* currently not present in backend */
    enum ofp_calient_optical_port_admin_state out_admin_status;
    enum ofp_calient_optical_port_oper_state  out_oper_status;
    enum ofp_calient_optical_port_oper_capability out_oper_capability;
    of_str6_t inport_power;       /* Input Port Power */
    of_str6_t outport_power;      /* Output Port Power */
    pad(2);
    uint64_t in_peer_node;        /* Peer node datapath id connected to the input optical port */
    uint64_t out_peer_node;       /* Peer node datapath id connected to the output optical port */
    uint16_t in_peer_port;        /* Peer port number connected to the input optical port */
    uint16_t out_peer_port;       /* Peer port number connected to the output optical port */
    pad(4);
    of_str32_t in_circuit_id;     /* Circuit Id associated with the input port */
    of_str32_t out_circuit_id;    /* Circuit id associated with the output port */
    of_str64_t in_alias;          /* Alias(name) for the input port */
    of_str64_t out_alias;         /* Alias(name) for the output port */
};

struct of_calient_port_desc_stats_entry {
    uint16_t length;
    pad(2);
    of_port_no_t port_no;
    of_mac_addr_t hw_addr;
    pad(2);
    of_port_name_t name; /* Not used.NULL */
    uint32_t config;     /* Not used. Always 0. */
    uint32_t state;      /* Not used. Always 0. */
    list(of_calient_port_desc_prop_t) properties;
};

struct of_calient_port_desc_stats_reply : of_calient_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 == 0x0080F958;
    uint32_t subtype == 1;
    list(of_calient_port_desc_stats_entry_t)port_desc;
};


struct of_calient_port_status : of_experimenter{
  uint8_t version;
  uint8_t type == 4;
  uint16_t length;
  uint32_t xid;
  uint32_t experimenter == 0x0080F958;
  uint32_t subtype == 1;
  enum ofp_port_reason reason;
  pad(7);
  of_calient_port_desc_stats_entry_t desc;
   };

