/*
- * Copyright (c) 2012, 2013 Nicira, Inc.
+ * Copyright (c) 2012, 2013, 2014 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
union mf_subvalue subvalue; /* Least-significant bits are used. */
};
-/* The position in the packet at which to insert an MPLS header.
- *
- * Used NXAST_PUSH_MPLS, OFPAT11_PUSH_MPLS. */
-enum ofpact_mpls_position {
- /* Add the MPLS LSE after the Ethernet header but before any VLAN tags.
- * OpenFlow 1.3+ requires this behavior. */
- OFPACT_MPLS_BEFORE_VLAN,
-
- /* Add the MPLS LSE after the Ethernet header and any VLAN tags.
- * OpenFlow 1.1 and 1.2 require this behavior. */
- OFPACT_MPLS_AFTER_VLAN
-};
-
/* OFPACT_SET_FIELD.
*
* Used for OFPAT12_SET_FIELD. */
struct ofpact_push_mpls {
struct ofpact ofpact;
ovs_be16 ethertype;
- enum ofpact_mpls_position position;
};
/* OFPACT_POP_MPLS
* Used for OFPIT11_WRITE_ACTIONS. */
struct ofpact_nest {
struct ofpact ofpact;
- uint8_t pad[OFPACT_ALIGN(sizeof(struct ofpact)) - sizeof(struct ofpact)];
+ uint8_t pad[PAD_SIZE(sizeof(struct ofpact), OFPACT_ALIGNTO)];
struct ofpact actions[];
};
-BUILD_ASSERT_DECL(offsetof(struct ofpact_nest, actions) == OFPACT_ALIGNTO);
+BUILD_ASSERT_DECL(offsetof(struct ofpact_nest, actions) % OFPACT_ALIGNTO == 0);
static inline size_t
ofpact_nest_get_action_len(const struct ofpact_nest *on)
uint16_t idle_timeout; /* Idle time before discarding (seconds). */
uint16_t hard_timeout; /* Max time before discarding (seconds). */
uint16_t priority; /* Priority level of flow entry. */
+ uint8_t table_id; /* Table to insert flow entry. */
uint64_t cookie; /* Cookie for new flow. */
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. */
enum ofp_version version,
struct ofpbuf *ofpacts);
enum ofperr ofpacts_check(struct ofpact[], size_t ofpacts_len,
- struct flow *, bool enforce_consistency,
- ofp_port_t max_ports,
- uint8_t table_id, uint8_t n_tables);
+ struct flow *, ofp_port_t max_ports,
+ uint8_t table_id, uint8_t n_tables,
+ enum ofputil_protocol *usable_protocols);
+enum ofperr ofpacts_check_consistency(struct ofpact[], size_t ofpacts_len,
+ struct flow *, ofp_port_t max_ports,
+ uint8_t table_id, uint8_t n_tables,
+ enum ofputil_protocol usable_protocols);
enum ofperr ofpacts_verify(const struct ofpact ofpacts[], size_t ofpacts_len);
enum ofperr ofpact_check_output_port(ofp_port_t port, ofp_port_t max_ports);
int ovs_instruction_type_from_name(const char *name);
enum ovs_instruction_type ovs_instruction_type_from_ofpact_type(
enum ofpact_type);
+enum ofperr ovs_instruction_type_from_inst_type(
+ enum ovs_instruction_type *instruction_type, const uint16_t inst_type);
+
#endif /* ofp-actions.h */