ofp-msgs: Fix definitions of OF1.4 OFPT_GET_ASYNC_REPLY and OFPT_SET_ASYNC.
[cascardo/ovs.git] / include / openflow / openflow-1.4.h
index 08f98f9..daf6cf4 100644 (file)
@@ -37,7 +37,7 @@
 #ifndef OPENFLOW_14_H
 #define OPENFLOW_14_H 1
 
-#include "openflow/openflow-1.3.h"
+#include <openflow/openflow-1.3.h>
 
 
 /* ## ---------- ## */
@@ -72,7 +72,7 @@ struct ofp14_port {
     ovs_be32 port_no;
     ovs_be16 length;
     uint8_t pad[2];
-    uint8_t hw_addr[OFP_ETH_ALEN];
+    struct eth_addr hw_addr;
     uint8_t pad2[2];                  /* Align to 64 bits. */
     char name[OFP_MAX_PORT_NAME_LEN]; /* Null-terminated */
 
@@ -106,7 +106,7 @@ OFP_ASSERT(sizeof(struct ofp14_port_mod_prop_ethernet) == 8);
 struct ofp14_port_mod {
     ovs_be32 port_no;
     uint8_t pad[4];
-    uint8_t hw_addr[OFP_ETH_ALEN];
+    struct eth_addr hw_addr;
     uint8_t pad2[2];
     ovs_be32 config;        /* Bitmap of OFPPC_* flags. */
     ovs_be32 mask;          /* Bitmap of OFPPC_* flags to be changed. */
@@ -114,6 +114,126 @@ struct ofp14_port_mod {
 };
 OFP_ASSERT(sizeof(struct ofp14_port_mod) == 24);
 
+/* ## --------------- ## */
+/* ## ofp14_table_mod ## */
+/* ## --------------- ## */
+
+enum ofp14_table_mod_prop_type {
+    OFPTMPT14_EVICTION               = 0x2,    /* Eviction property. */
+    OFPTMPT14_VACANCY                = 0x3,    /* Vacancy property. */
+    OFPTMPT14_EXPERIMENTER           = 0xFFFF, /* Experimenter property. */
+};
+
+enum ofp14_table_mod_prop_eviction_flag {
+    OFPTMPEF14_OTHER           = 1 << 0,     /* Using other factors. */
+    OFPTMPEF14_IMPORTANCE      = 1 << 1,     /* Using flow entry importance. */
+    OFPTMPEF14_LIFETIME        = 1 << 2,     /* Using flow entry lifetime. */
+};
+
+/* What changed about the table */
+enum ofp14_table_reason {
+    OFPTR_VACANCY_DOWN = 3,    /* Vacancy down threshold event. */
+    OFPTR_VACANCY_UP   = 4,    /* Vacancy up threshold event. */
+    OFPTR_N_REASONS            /* Denotes number of reasons. */
+};
+
+struct ofp14_table_mod_prop_eviction {
+    ovs_be16         type;    /* OFPTMPT14_EVICTION. */
+    ovs_be16         length;  /* Length in bytes of this property. */
+    ovs_be32         flags;   /* Bitmap of OFPTMPEF14_* flags */
+};
+OFP_ASSERT(sizeof(struct ofp14_table_mod_prop_eviction) == 8);
+
+struct ofp14_table_mod_prop_vacancy {
+    ovs_be16         type;   /* OFPTMPT14_VACANCY. */
+    ovs_be16         length; /* Length in bytes of this property. */
+    uint8_t vacancy_down;    /* Vacancy threshold when space decreases (%). */
+    uint8_t vacancy_up;      /* Vacancy threshold when space increases (%). */
+    uint8_t vacancy;      /* Current vacancy (%) - only in ofp14_table_desc. */
+    uint8_t pad[1];          /* Align to 64 bits. */
+};
+OFP_ASSERT(sizeof(struct ofp14_table_mod_prop_vacancy) == 8);
+
+struct ofp14_table_mod {
+    uint8_t table_id;     /* ID of the table, OFPTT_ALL indicates all tables */
+    uint8_t pad[3];         /* Pad to 32 bits */
+    ovs_be32 config;        /* Bitmap of OFPTC_* flags */
+    /* Followed by 0 or more OFPTMPT14_* properties. */
+};
+OFP_ASSERT(sizeof(struct ofp14_table_mod) == 8);
+
+/* Body of reply to OFPMP_TABLE_DESC request. */
+struct ofp14_table_desc {
+    ovs_be16 length;       /* Length is padded to 64 bits. */
+    uint8_t table_id;      /* Identifier of table. Lower numbered tables
+                              are consulted first. */
+    uint8_t pad[1];        /* Align to 32-bits. */
+    ovs_be32 config;       /* Bitmap of OFPTC_* values. */
+    /* Followed by 0 or more OFPTMPT14_* properties. */
+};
+OFP_ASSERT(sizeof(struct ofp14_table_desc) == 8);
+
+/* ## ---------------- ## */
+/* ## ofp14_port_stats ## */
+/* ## ---------------- ## */
+
+enum ofp14_port_stats_prop_type {
+    OFPPSPT14_ETHERNET          = 0,      /* Ethernet property. */
+    OFPPSPT14_OPTICAL           = 1,      /* Optical property. */
+    OFPPSPT14_EXPERIMENTER      = 0xFFFF, /* Experimenter property. */
+};
+
+struct ofp14_port_stats_prop_ethernet {
+    ovs_be16         type;    /* OFPPSPT14_ETHERNET. */
+    ovs_be16         length;  /* Length in bytes of this property. */
+    uint8_t          pad[4];  /* Align to 64 bits. */
+
+    ovs_be64 rx_frame_err;   /* Number of frame alignment errors. */
+    ovs_be64 rx_over_err;    /* Number of packets with RX overrun. */
+    ovs_be64 rx_crc_err;     /* Number of CRC errors. */
+    ovs_be64 collisions;     /* Number of collisions. */
+};
+OFP_ASSERT(sizeof(struct ofp14_port_stats_prop_ethernet) == 40);
+
+struct ofp14_port_stats {
+    ovs_be16 length;         /* Length of this entry. */
+    uint8_t pad[2];          /* Align to 64 bits. */
+    ovs_be32 port_no;
+    ovs_be32 duration_sec;   /* Time port has been alive in seconds. */
+    ovs_be32 duration_nsec;  /* Time port has been alive in nanoseconds beyond
+                                duration_sec. */
+    ovs_be64 rx_packets;     /* Number of received packets. */
+    ovs_be64 tx_packets;     /* Number of transmitted packets. */
+    ovs_be64 rx_bytes;       /* Number of received bytes. */
+    ovs_be64 tx_bytes;       /* Number of transmitted bytes. */
+
+    ovs_be64 rx_dropped;     /* Number of packets dropped by RX. */
+    ovs_be64 tx_dropped;     /* Number of packets dropped by TX. */
+    ovs_be64 rx_errors;      /* Number of receive errors.  This is a super-set
+                                of more specific receive errors and should be
+                                greater than or equal to the sum of all
+                                rx_*_err values in properties. */
+    ovs_be64 tx_errors;      /* Number of transmit errors.  This is a super-set
+                                of more specific transmit errors and should be
+                                greater than or equal to the sum of all
+                                tx_*_err values (none currently defined.) */
+    /* Followed by 0 or more OFPPSPT14_* properties. */
+};
+OFP_ASSERT(sizeof(struct ofp14_port_stats) == 80);
+
+
+/* ## ----------------- ## */
+/* ## ofp14_queue_stats ## */
+/* ## ----------------- ## */
+
+struct ofp14_queue_stats {
+    ovs_be16 length;         /* Length of this entry. */
+    uint8_t pad[6];          /* Align to 64 bits. */
+    struct ofp13_queue_stats qs;
+    /* Followed by 0 or more properties (none yet defined). */
+};
+OFP_ASSERT(sizeof(struct ofp14_queue_stats) == 48);
+
 
 /* ## -------------- ## */
 /* ## Miscellaneous. ## */
@@ -125,16 +245,12 @@ struct ofp14_async_config_prop_header {
     ovs_be16    length;     /* Length in bytes of this property. */
 };
 OFP_ASSERT(sizeof(struct ofp14_async_config_prop_header) == 4);
-
-/* Asynchronous message configuration.
- * OFPT_GET_ASYNC_REPLY or OFPT_SET_ASYNC.
- */
-struct ofp14_async_config {
-    struct ofp_header header;
-    /* Async config Property list - 0 or more */
-    struct ofp14_async_config_prop_header properties[0];
+/* Request forward reason */
+enum ofp14_requestforward_reason {
+    OFPRFR_GROUP_MOD = 0,      /* Forward group mod requests. */
+    OFPRFR_METER_MOD = 1,      /* Forward meter mod requests. */
+    OFPRFR_N_REASONS           /* Denotes number of reasons. */
 };
-OFP_ASSERT(sizeof(struct ofp14_async_config) == 8);
 
 /* Async Config property types.
 * Low order bit cleared indicates a property for the slave role.
@@ -207,6 +323,7 @@ enum ofp14_controller_role_reason {
     OFPCRR_MASTER_REQUEST = 0,  /* Another controller asked to be master. */
     OFPCRR_CONFIG         = 1,  /* Configuration changed on the switch. */
     OFPCRR_EXPERIMENTER   = 2,  /* Experimenter data changed. */
+    OFPCRR_N_REASONS            /* Denotes number of reasons. */
 };
 
 /* Role property types.
@@ -230,6 +347,12 @@ struct ofp14_role_prop_experimenter {
 };
 OFP_ASSERT(sizeof(struct ofp14_role_prop_experimenter) == 12);
 
+/* Group/Meter request forwarding. */
+struct ofp14_requestforward {
+    struct ofp_header request;  /* Request being forwarded. */
+};
+OFP_ASSERT(sizeof(struct ofp14_requestforward) == 8);
+
 /* Bundle control message types */
 enum ofp14_bundle_ctrl_type {
     OFPBCT_OPEN_REQUEST    = 0,
@@ -264,4 +387,51 @@ struct ofp14_bundle_ctrl_msg {
 };
 OFP_ASSERT(sizeof(struct ofp14_bundle_ctrl_msg) == 8);
 
+/* Body for ofp14_multipart_request of type OFPMP_FLOW_MONITOR.
+ *
+ * The OFPMP_FLOW_MONITOR request's body consists of an array of zero or more
+ * instances of this structure. The request arranges to monitor the flows
+ * that match the specified criteria, which are interpreted in the same way as
+ * for OFPMP_FLOW.
+ *
+ * 'id' identifies a particular monitor for the purpose of allowing it to be
+ * canceled later with OFPFMC_DELETE. 'id' must be unique among
+ * existing monitors that have not already been canceled.
+ */
+struct ofp14_flow_monitor_request {
+    ovs_be32 monitor_id;        /* Controller-assigned ID for this monitor. */
+    ovs_be32 out_port;          /* Required output port, if not OFPP_ANY. */
+    ovs_be32 out_group;         /* Required output port, if not OFPG_ANY. */
+    ovs_be16 flags;             /* OFPMF14_*. */
+    uint8_t table_id;           /* One table's ID or OFPTT_ALL (all tables). */
+    uint8_t command;            /* One of OFPFMC14_*. */
+    /* Followed by an ofp11_match structure. */
+};
+OFP_ASSERT(sizeof(struct ofp14_flow_monitor_request) == 16);
+
+/* Flow monitor commands */
+enum ofp14_flow_monitor_command {
+    OFPFMC14_ADD = 0, /* New flow monitor. */
+    OFPFMC14_MODIFY = 1, /* Modify existing flow monitor. */
+    OFPFMC14_DELETE = 2, /* Delete/cancel existing flow monitor. */
+};
+
+/* 'flags' bits in struct of_flow_monitor_request. */
+enum ofp14_flow_monitor_flags {
+    /* When to send updates. */
+    /* Common to NX and OpenFlow 1.4 */
+    OFPFMF14_INITIAL = 1 << 0,     /* Initially matching flows. */
+    OFPFMF14_ADD = 1 << 1,         /* New matching flows as they are added. */
+    OFPFMF14_REMOVED = 1 << 2,     /* Old matching flows as they are removed. */
+    OFPFMF14_MODIFY = 1 << 3,      /* Matching flows as they are changed. */
+
+    /* What to include in updates. */
+    /* Common to NX and OpenFlow 1.4 */
+    OFPFMF14_INSTRUCTIONS = 1 << 4, /* If set, instructions are included. */
+    OFPFMF14_NO_ABBREV = 1 << 5,    /* If set, include own changes in full. */
+    /* OpenFlow 1.4 */
+    OFPFMF14_ONLY_OWN = 1 << 6,     /* If set, don't include other controllers.
+                                     */
+};
+
 #endif /* openflow/openflow-1.4.h */