#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(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*/
    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; 
};

