Merge branch 'mainstream'
[sliver-openvswitch.git] / lib / ofp-util.h
index d354887..77162bf 100644 (file)
@@ -17,7 +17,6 @@
 #ifndef OFP_UTIL_H
 #define OFP_UTIL_H 1
 
-#include <assert.h>
 #include <stdbool.h>
 #include <stddef.h>
 #include <stdint.h>
@@ -86,6 +85,7 @@ enum ofputil_protocol {
      * variant. */
     OFPUTIL_P_OF12_OXM      = 1 << 4,
     OFPUTIL_P_OF13_OXM      = 1 << 5,
+#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | OFPUTIL_P_OF13_OXM)
 
     /* All protocols. */
 #define OFPUTIL_P_ANY ((1 << 6) - 1)
@@ -93,17 +93,16 @@ enum ofputil_protocol {
     /* Protocols in which a specific table may be specified in flow_mods. */
 #define OFPUTIL_P_TID (OFPUTIL_P_OF10_STD_TID | \
                        OFPUTIL_P_OF10_NXM_TID | \
-                       OFPUTIL_P_OF12_OXM | \
-                       OFPUTIL_P_OF13_OXM)
+                       OFPUTIL_P_ANY_OXM)
 };
 
 /* Protocols to use for flow dumps, from most to least preferred. */
 extern enum ofputil_protocol ofputil_flow_dump_protocols[];
 extern size_t ofputil_n_flow_dump_protocols;
 
-enum ofputil_protocol
-ofputil_protocol_from_ofp_version(enum ofp_version version);
-enum ofp_version  ofputil_protocol_to_ofp_version(enum ofputil_protocol);
+enum ofputil_protocol ofputil_protocol_from_ofp_version(enum ofp_version);
+enum ofputil_protocol ofputil_protocols_from_ofp_version(enum ofp_version);
+enum ofp_version ofputil_protocol_to_ofp_version(enum ofputil_protocol);
 
 bool ofputil_protocol_is_valid(enum ofputil_protocol);
 enum ofputil_protocol ofputil_protocol_set_tid(enum ofputil_protocol,
@@ -130,6 +129,9 @@ 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);
 
+uint32_t ofputil_protocols_to_version_bitmap(enum ofputil_protocol);
+enum ofputil_protocol ofputil_protocols_from_version_bitmap(uint32_t bitmap);
+
 /* Bitmap of OpenFlow versions that Open vSwitch supports. */
 #define OFPUTIL_SUPPORTED_VERSIONS \
     ((1u << OFP10_VERSION) | (1u << OFP12_VERSION) | (1u << OFP13_VERSION))
@@ -504,6 +506,19 @@ enum ofperr ofputil_decode_port_mod(const struct ofp_header *,
 struct ofpbuf *ofputil_encode_port_mod(const struct ofputil_port_mod *,
                                        enum ofputil_protocol);
 
+/* Abstract ofp_role_request and reply. */
+struct ofputil_role_request {
+    bool request_current_role_only; /* no role change */
+    bool have_generation_id;
+    enum nx_role role;
+    uint64_t generation_id;
+};
+
+enum ofperr ofputil_decode_role_message(const struct ofp_header *,
+                                        struct ofputil_role_request *);
+struct ofpbuf *ofputil_encode_role_reply(const struct ofp_header *,
+                                         enum nx_role current_role);
+
 /* Abstract table stats.
  *
  * For now we use ofp12_table_stats as a superset of the other protocol