+ const struct ovs_list *buckets,
+ struct ovs_list *replies);
+
+struct ofputil_bundle_ctrl_msg {
+ uint32_t bundle_id;
+ uint16_t type;
+ uint16_t flags;
+};
+
+struct ofputil_bundle_add_msg {
+ uint32_t bundle_id;
+ uint16_t flags;
+ const struct ofp_header *msg;
+};
+
+enum ofptype;
+
+enum ofperr ofputil_decode_bundle_ctrl(const struct ofp_header *,
+ struct ofputil_bundle_ctrl_msg *);
+
+struct ofpbuf *ofputil_encode_bundle_ctrl_request(enum ofp_version,
+ struct ofputil_bundle_ctrl_msg *);
+struct ofpbuf *ofputil_encode_bundle_ctrl_reply(const struct ofp_header *,
+ struct ofputil_bundle_ctrl_msg *);
+
+struct ofpbuf *ofputil_encode_bundle_add(enum ofp_version ofp_version,
+ struct ofputil_bundle_add_msg *msg);
+
+enum ofperr ofputil_decode_bundle_add(const struct ofp_header *,
+ struct ofputil_bundle_add_msg *,
+ enum ofptype *type);
+
+struct ofputil_tlv_map {
+ struct ovs_list list_node;
+
+ uint16_t option_class;
+ uint8_t option_type;
+ uint8_t option_len;
+ uint16_t index;
+};
+
+struct ofputil_tlv_table_mod {
+ uint16_t command;
+ struct ovs_list mappings; /* Contains "struct ofputil_tlv_map"s. */
+};
+
+struct ofputil_tlv_table_reply {
+ uint32_t max_option_space;
+ uint16_t max_fields;
+ struct ovs_list mappings; /* Contains "struct ofputil_tlv_map"s. */
+};
+
+struct ofpbuf *ofputil_encode_tlv_table_mod(enum ofp_version ofp_version,
+ struct ofputil_tlv_table_mod *);
+enum ofperr ofputil_decode_tlv_table_mod(const struct ofp_header *,
+ struct ofputil_tlv_table_mod *);
+struct ofpbuf *ofputil_encode_tlv_table_reply(const struct ofp_header *,
+ struct ofputil_tlv_table_reply *);
+enum ofperr ofputil_decode_tlv_table_reply(const struct ofp_header *,
+ struct ofputil_tlv_table_reply *);
+void ofputil_uninit_tlv_table(struct ovs_list *mappings);
+
+enum ofputil_async_msg_type {
+ /* Standard asynchronous messages. */
+ OAM_PACKET_IN, /* OFPT_PACKET_IN or NXT_PACKET_IN. */
+ OAM_PORT_STATUS, /* OFPT_PORT_STATUS. */
+ OAM_FLOW_REMOVED, /* OFPT_FLOW_REMOVED or NXT_FLOW_REMOVED. */
+ OAM_ROLE_STATUS, /* OFPT_ROLE_STATUS. */
+ OAM_TABLE_STATUS, /* OFPT_TABLE_STATUS. */
+ OAM_REQUESTFORWARD, /* OFPT_REQUESTFORWARD. */
+
+ /* Extension asynchronous messages (none yet--coming soon!). */
+#define OAM_EXTENSIONS 0 /* Bitmap of all extensions. */
+
+ OAM_N_TYPES
+};
+const char *ofputil_async_msg_type_to_string(enum ofputil_async_msg_type);
+
+struct ofputil_async_cfg {
+ uint32_t master[OAM_N_TYPES];
+ uint32_t slave[OAM_N_TYPES];
+};
+#define OFPUTIL_ASYNC_CFG_INIT (struct ofputil_async_cfg) { .master[0] = 0 }
+
+enum ofperr ofputil_decode_set_async_config(const struct ofp_header *,
+ bool loose,
+ const struct ofputil_async_cfg *,
+ struct ofputil_async_cfg *);
+
+struct ofpbuf *ofputil_encode_get_async_reply(
+ const struct ofp_header *, const struct ofputil_async_cfg *);
+struct ofpbuf *ofputil_encode_set_async_config(
+ const struct ofputil_async_cfg *, uint32_t oams, enum ofp_version);
+
+struct ofputil_async_cfg ofputil_async_cfg_default(enum ofp_version);
+
+struct ofputil_requestforward {
+ ovs_be32 xid;
+ enum ofp14_requestforward_reason reason;
+ union {
+ /* reason == OFPRFR_METER_MOD. */
+ struct {
+ struct ofputil_meter_mod *meter_mod;
+ struct ofpbuf bands;
+ };
+
+ /* reason == OFPRFR_GROUP_MOD. */
+ struct ofputil_group_mod *group_mod;
+ };
+};
+
+struct ofpbuf *ofputil_encode_requestforward(
+ const struct ofputil_requestforward *, enum ofputil_protocol);
+enum ofperr ofputil_decode_requestforward(const struct ofp_header *,
+ struct ofputil_requestforward *);
+void ofputil_destroy_requestforward(struct ofputil_requestforward *);