#version 4

struct of_calient_flow_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 == 2;     /* OFPEMPFS = 2 */
    uint8_t table_id;          /* Recommended to be set to 0. Ignored */
    pad(3); 
    of_port_no_t out_port;         /* Require matching entries to include this as an output port.
                                  A value of OFPP_ANY indicates no restriction. Ignored */
    uint32_t out_group;        /* Require matching entries to include this as an output group.
                                  A value of OFPP_ANY indicates no restriction. Ignored */
    pad(4);                    /* Align to 64 bits */
    uint64_t cookie;           /* Ignored */
    uint64_t cookie_mask;      /* Ignored */
    of_match_t match;          /* Fields to match. Variable size */
};

enum ofp_calient_cflow_admin_state(wire_type=uint8_t, bitmask=True){
     OFPCAS_InService = 1,      /* when the connection is activated */
     OFPCAS_UnderManagement = 2,/*Default Connection state – (when connection is not activated)*/
};

   
enum ofp_calient_cflow_operational_state(wire_type=uint8_t, bitmask=True){
     OFPCOS_InService = 1,   /* When connection is activated */
     OFPCOS_OutOfService = 2,/*When connection has a critical alarm  ( activated or otherwise) */
     OFPCOS_Ready = 3,       /*When AS state is UnderManagement */
     OFPCOS_Degraded = 4,    /*When connection is activated and has a  Major alarm */
};
                              
enum ofp_calient_cflow_Capability(wire_type=uint8_t, bitmask=True){
    OFPCCS_Ok = 1,          /* Connection has been made successfully */
    OFPCCS_Failed = 2,      /* Connection has Failed */
    OFPCCS_Initializing = 3,/* Connection making is in progress */
};
/*oper_capability,alarm,cflow_name not present in the backend */
struct of_calient_flow_stats_entry {
    uint16_t length;
    uint8_t table_id;        /* Ignored */
    pad(1);
    uint32_t duration_sec;   /* Not supported for now */
    uint32_t duration_nsec;  /* Not supported for now */
    uint16_t priority;       /* Not supported */
    uint16_t idle_timeout;   /* Set to 0 as entries must be explicitly removed */
    uint16_t hard_timeout;   /* Set to 0 as entries must be explicitly removed */
    enum ofp_flow_mod_flags flags;
    pad(4);
    uint64_t cookie;         /* Ignored */
    enum ofp_calient_cflow_admin_state admin_status;      /* AS = IS(Activated)/UMA */
    enum ofp_calient_cflow_operational_state oper_status; /* OS = UMA/OOS */
    enum ofp_calient_cflow_Capability  oper_capability;   /* OC = FAIL/OK/INIT */
    enum ofp_calient_ocs_alarm alarm;                     /* Alarm = NA/MJ/MN/CR */
    of_port_no_t out_port;      
    of_str6_t port_power;
    pad(2);
    of_str6_t connected_port_power;
    pad(2);
    of_str64_t cflow_name;   /* Connection name */
    of_match_t match;
};


struct of_calient_flow_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 == 2;
    list(of_calient_flow_stats_entry_t)entries;
};


