lib/ovs-atomic: Native support for 32-bit 586 with GCC.
[cascardo/ovs.git] / lib / ofp-util.h
index bb3d647..23396bb 100644 (file)
@@ -25,6 +25,7 @@
 #include "flow.h"
 #include "list.h"
 #include "match.h"
+#include "meta-flow.h"
 #include "netdev.h"
 #include "openflow/nicira-ext.h"
 #include "openvswitch/types.h"
@@ -110,7 +111,11 @@ enum ofputil_protocol {
     OFPUTIL_P_OF12_OXM      = 1 << 5,
     OFPUTIL_P_OF13_OXM      = 1 << 6,
     OFPUTIL_P_OF14_OXM      = 1 << 7,
-#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | OFPUTIL_P_OF13_OXM | OFPUTIL_P_OF14_OXM)
+    OFPUTIL_P_OF15_OXM      = 1 << 8,
+#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | \
+                           OFPUTIL_P_OF13_OXM | \
+                           OFPUTIL_P_OF14_OXM | \
+                           OFPUTIL_P_OF15_OXM)
 
 #define OFPUTIL_P_NXM_OF11_UP (OFPUTIL_P_OF10_NXM_ANY | OFPUTIL_P_OF11_STD | \
                                OFPUTIL_P_ANY_OXM)
@@ -121,10 +126,11 @@ enum ofputil_protocol {
 
 #define OFPUTIL_P_OF12_UP (OFPUTIL_P_OF12_OXM | OFPUTIL_P_OF13_UP)
 #define OFPUTIL_P_OF13_UP (OFPUTIL_P_OF13_OXM | OFPUTIL_P_OF14_UP)
-#define OFPUTIL_P_OF14_UP OFPUTIL_P_OF14_OXM
+#define OFPUTIL_P_OF14_UP (OFPUTIL_P_OF14_OXM | OFPUTIL_P_OF15_UP)
+#define OFPUTIL_P_OF15_UP OFPUTIL_P_OF15_OXM
 
     /* All protocols. */
-#define OFPUTIL_P_ANY ((1 << 8) - 1)
+#define OFPUTIL_P_ANY ((1 << 9) - 1)
 
     /* Protocols in which a specific table may be specified in flow_mods. */
 #define OFPUTIL_P_TID (OFPUTIL_P_OF10_STD_TID | \
@@ -165,6 +171,8 @@ void ofputil_format_version_name(struct ds *, enum ofp_version);
 void ofputil_format_version_bitmap(struct ds *msg, uint32_t bitmap);
 void ofputil_format_version_bitmap_names(struct ds *msg, uint32_t bitmap);
 
+enum ofp_version ofputil_version_from_string(const char *s);
+
 uint32_t ofputil_protocols_to_version_bitmap(enum ofputil_protocol);
 enum ofputil_protocol ofputil_protocols_from_version_bitmap(uint32_t bitmap);
 
@@ -300,6 +308,9 @@ struct ofputil_flow_mod {
     enum ofputil_flow_mod_flags flags;
     struct ofpact *ofpacts;  /* Series of "struct ofpact"s. */
     size_t ofpacts_len;      /* Length of ofpacts, in bytes. */
+
+    /* Reason for delete; ignored for non-delete commands */
+    enum ofp_flow_removed_reason delete_reason;
 };
 
 enum ofperr ofputil_decode_flow_mod(struct ofputil_flow_mod *,
@@ -594,7 +605,7 @@ struct ofputil_port_mod {
 };
 
 enum ofperr ofputil_decode_port_mod(const struct ofp_header *,
-                                    struct ofputil_port_mod *);
+                                    struct ofputil_port_mod *, bool loose);
 struct ofpbuf *ofputil_encode_port_mod(const struct ofputil_port_mod *,
                                        enum ofputil_protocol);
 
@@ -640,7 +651,7 @@ struct ofputil_table_features {
          *      instruction. */
         struct ofputil_table_action_features {
             uint32_t actions;     /* Bitmap of supported OFPAT*. */
-            uint64_t set_fields;  /* Bitmap of MFF_* "set-field" supports. */
+            struct mf_bitmap set_fields; /* Fields for "set-field". */
         } write, apply;
     } nonmiss, miss;
 
@@ -663,9 +674,9 @@ struct ofputil_table_features {
      *
      * Other combinations do not make sense.
      */
-    uint64_t match;             /* Fields that may be matched. */
-    uint64_t mask;              /* Subset of 'match' that may have masks. */
-    uint64_t wildcard;          /* Subset of 'match' that may be wildcarded. */
+    struct mf_bitmap match;     /* Fields that may be matched. */
+    struct mf_bitmap mask;      /* Subset of 'match' that may have masks. */
+    struct mf_bitmap wildcard;  /* Subset of 'match' that may be wildcarded. */
 };
 
 int ofputil_decode_table_features(struct ofpbuf *,
@@ -870,7 +881,12 @@ void ofputil_append_flow_update(const struct ofputil_flow_update *,
 uint32_t ofputil_decode_flow_monitor_cancel(const struct ofp_header *);
 struct ofpbuf *ofputil_encode_flow_monitor_cancel(uint32_t id);
 
-/* Encoding OpenFlow stats messages. */
+/* Port desc stats requests and replies. */
+enum ofperr ofputil_decode_port_desc_stats_request(const struct ofp_header *,
+                                                   ofp_port_t *portp);
+struct ofpbuf *ofputil_encode_port_desc_stats_request(
+    enum ofp_version ofp_version, ofp_port_t);
+
 void ofputil_append_port_desc_stats_reply(const struct ofputil_phy_port *pp,
                                           struct list *replies);
 
@@ -1038,6 +1054,11 @@ int ofputil_decode_queue_stats(struct ofputil_queue_stats *qs, struct ofpbuf *ms
 void ofputil_append_queue_stat(struct list *replies,
                                const struct ofputil_queue_stats *oqs);
 
+struct bucket_counter {
+    uint64_t packet_count;   /* Number of packets processed by bucket. */
+    uint64_t byte_count;     /* Number of bytes processed by bucket. */
+};
+
 /* Bucket for use in groups. */
 struct ofputil_bucket {
     struct list list_node;
@@ -1050,6 +1071,8 @@ struct ofputil_bucket {
                                  * failover groups. */
     struct ofpact *ofpacts;     /* Series of "struct ofpact"s. */
     size_t ofpacts_len;         /* Length of ofpacts, in bytes. */
+
+    struct bucket_counter stats;
 };
 
 /* Protocol-independent group_mod. */
@@ -1060,11 +1083,6 @@ struct ofputil_group_mod {
     struct list buckets;          /* Contains "struct ofputil_bucket"s. */
 };
 
-struct bucket_counter {
-    uint64_t packet_count;   /* Number of packets processed by bucket. */
-    uint64_t byte_count;     /* Number of bytes processed by bucket. */
-};
-
 /* Group stats reply, independent of protocol. */
 struct ofputil_group_stats {
     uint32_t group_id;    /* Group identifier. */
@@ -1125,13 +1143,16 @@ enum ofperr ofputil_decode_group_mod(const struct ofp_header *,
 int ofputil_decode_group_stats_reply(struct ofpbuf *,
                                      struct ofputil_group_stats *);
 
+uint32_t ofputil_decode_group_desc_request(const struct ofp_header *);
+struct ofpbuf *ofputil_encode_group_desc_request(enum ofp_version,
+                                                 uint32_t group_id);
+
 int ofputil_decode_group_desc_reply(struct ofputil_group_desc *,
                                     struct ofpbuf *, enum ofp_version);
 
 void ofputil_append_group_desc_reply(const struct ofputil_group_desc *,
                                      struct list *buckets,
                                      struct list *replies);
-struct ofpbuf *ofputil_encode_group_desc_request(enum ofp_version);
 
 struct ofputil_bundle_ctrl_msg {
     uint32_t    bundle_id;