#include "type-props.h"
struct ofpbuf;
+union ofp_action;
/* Port numbers. */
enum ofperr ofputil_port_from_ofp11(ovs_be32 ofp11_port,
/* Protocol-independent flow_mod flags. */
enum ofputil_flow_mod_flags {
+ /* Flags that are maintained with a flow as part of its state.
+ *
+ * (OFPUTIL_FF_EMERG would be here too, if OVS supported it.) */
OFPUTIL_FF_SEND_FLOW_REM = 1 << 0, /* All versions. */
- OFPUTIL_FF_CHECK_OVERLAP = 1 << 1, /* All versions. */
- OFPUTIL_FF_EMERG = 1 << 2, /* OpenFlow 1.0 only. */
- OFPUTIL_FF_RESET_COUNTS = 1 << 3, /* OpenFlow 1.2+. */
- OFPUTIL_FF_NO_PKT_COUNTS = 1 << 4, /* OpenFlow 1.3+. */
- OFPUTIL_FF_NO_BYT_COUNTS = 1 << 5 /* OpenFlow 1.3+. */
+ OFPUTIL_FF_NO_PKT_COUNTS = 1 << 1, /* OpenFlow 1.3+. */
+ OFPUTIL_FF_NO_BYT_COUNTS = 1 << 2, /* OpenFlow 1.3+. */
+#define OFPUTIL_FF_STATE (OFPUTIL_FF_SEND_FLOW_REM \
+ | OFPUTIL_FF_NO_PKT_COUNTS \
+ | OFPUTIL_FF_NO_BYT_COUNTS)
+
+ /* Flags that affect flow_mod behavior but are not part of flow state. */
+ OFPUTIL_FF_CHECK_OVERLAP = 1 << 3, /* All versions. */
+ OFPUTIL_FF_EMERG = 1 << 4, /* OpenFlow 1.0 only. */
+ OFPUTIL_FF_RESET_COUNTS = 1 << 5, /* OpenFlow 1.2+. */
};
/* Protocol-independent flow_mod.
/* Abstract packet-in message. */
struct ofputil_packet_in {
- struct list list_node; /* For queueing packet_ins. */
-
const void *packet;
size_t packet_len;
enum ofp_packet_in_reason reason; /* One of OFPR_*. */
- uint16_t controller_id; /* Controller ID to send to. */
uint8_t table_id;
ovs_be64 cookie;
uint32_t buffer_id;
- int send_len;
uint16_t total_len; /* Full length of frame. */
struct flow_metadata fmd; /* Metadata at creation time. */
struct ofpbuf *ofputil_encode_port_mod(const struct ofputil_port_mod *,
enum ofputil_protocol);
+/* Abstract ofp_table_mod. */
+struct ofputil_table_mod {
+ uint8_t table_id; /* ID of the table, 0xff indicates all tables. */
+ uint32_t config;
+};
+
+enum ofperr ofputil_decode_table_mod(const struct ofp_header *,
+ struct ofputil_table_mod *);
+struct ofpbuf *ofputil_encode_table_mod(const struct ofputil_table_mod *,
+ enum ofputil_protocol);
+
/* Meter band configuration for all supported band types. */
struct ofputil_meter_band {
uint16_t type;
uint32_t duration_sec; /* UINT32_MAX if unknown. */
uint32_t duration_nsec;
uint32_t n_buckets;
- struct bucket_counter bucket_stats[16];
+ struct bucket_counter *bucket_stats;
};
/* Group features reply, independent of protocol. */
struct ofputil_group_stats *);
int ofputil_decode_group_desc_reply(struct ofputil_group_desc *,
- struct ofpbuf *);
+ struct ofpbuf *, enum ofp_version);
void ofputil_append_group_desc_reply(const struct ofputil_group_desc *,
struct list *buckets,