#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"
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)
#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 | \
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);
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 *,
};
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);
* 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;
*
* 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 *,
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);
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;
* 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. */
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. */
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;