DEFINE_OFPACT(SAMPLE, ofpact_sample, ofpact) \
\
/* Instructions */ \
+ DEFINE_OFPACT(METER, ofpact_meter, ofpact) \
/* XXX Write-Actions */ \
- DEFINE_OFPACT(WRITE_METADATA, ofpact_metadata, ofpact) \
DEFINE_OFPACT(CLEAR_ACTIONS, ofpact_null, ofpact) \
+ DEFINE_OFPACT(WRITE_METADATA, ofpact_metadata, ofpact) \
DEFINE_OFPACT(GOTO_TABLE, ofpact_goto_table, ofpact)
/* enum ofpact_type, with a member OFPACT_<ENUM> for each action. */
ovs_be64 mask;
};
+/* OFPACT_METER.
+ *
+ * Used for OFPIT13_METER. */
+struct ofpact_meter {
+ struct ofpact ofpact;
+ uint32_t meter_id;
+};
+
/* OFPACT_RESUBMIT.
*
* Used for NXAST_RESUBMIT, NXAST_RESUBMIT_TABLE. */
uint16_t hard_timeout; /* Max time before discarding (seconds). */
uint16_t priority; /* Priority level of flow entry. */
uint64_t cookie; /* Cookie for new flow. */
- uint16_t flags; /* Either 0 or OFPFF_SEND_FLOW_REM. */
+ enum ofputil_flow_mod_flags flags;
uint8_t table_id; /* Table to insert flow entry. */
uint16_t fin_idle_timeout; /* Idle timeout after FIN, if nonzero. */
uint16_t fin_hard_timeout; /* Hard timeout after FIN, if nonzero. */
struct ofpbuf *ofpacts);
enum ofperr ofpacts_pull_openflow11_instructions(struct ofpbuf *openflow,
unsigned int instructions_len,
- uint8_t table_id,
struct ofpbuf *ofpacts);
enum ofperr ofpacts_check(const struct ofpact[], size_t ofpacts_len,
- const struct flow *, ofp_port_t max_ports);
+ struct flow *, ofp_port_t max_ports,
+ uint8_t table_id);
enum ofperr ofpacts_verify(const struct ofpact ofpacts[], size_t ofpacts_len);
/* Converting ofpacts to OpenFlow. */
ofpact_get_##ENUM(const struct ofpact *ofpact) \
{ \
ovs_assert(ofpact->type == OFPACT_##ENUM); \
- return (struct STRUCT *) ofpact; \
+ return ALIGNED_CAST(struct STRUCT *, ofpact); \
} \
\
static inline struct STRUCT * \
* It is enforced on parser from text string.
*/
#define OVS_INSTRUCTIONS \
+ DEFINE_INST(OFPIT13_METER, \
+ ofp13_instruction_meter, false, \
+ "meter") \
+ \
DEFINE_INST(OFPIT11_APPLY_ACTIONS, \
ofp11_instruction_actions, true, \
"apply_actions") \
#undef DEFINE_INST
};
-
-static inline bool
-ofpact_is_instruction(const struct ofpact *a)
-{
- /* XXX Write-Actions */
- return a->type == OFPACT_CLEAR_ACTIONS
- || a->type == OFPACT_WRITE_METADATA
- || a->type == OFPACT_GOTO_TABLE;
-}
-
-const char *ofpact_instruction_name_from_type(enum ovs_instruction_type type);
-int ofpact_instruction_type_from_name(const char *name);
+const char *ovs_instruction_name_from_type(enum ovs_instruction_type type);
+int ovs_instruction_type_from_name(const char *name);
+enum ovs_instruction_type ovs_instruction_type_from_ofpact_type(
+ enum ofpact_type);
void ofpact_set_field_init(struct ofpact_reg_load *load,
const struct mf_field *mf, const void *src);