#define OFPP11_MAX 0xffffff00
#define OFPP11_OFFSET (OFPP11_MAX - OFPP_MAX)
+/* Reserved wildcard port used only for flow mod (delete) and flow stats
+ * requests. Selects all flows regardless of output port
+ * (including flows with no output port)
+ *
+ * Define it via OFPP_NONE (0xFFFF) so that OFPP_ANY is still an enum ofp_port
+ */
+#define OFPP_ANY OFPP_NONE
+
/* OpenFlow 1.1 port config flags are just the common flags. */
#define OFPPC11_ALL \
(OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
ovs_be32 curr_speed; /* Current port bitrate in kbps. */
ovs_be32 max_speed; /* Max port bitrate in kbps */
};
+OFP_ASSERT(sizeof(struct ofp11_port) == 64);
/* Modify behavior of the physical port */
struct ofp11_port_mod {
OFPAT11_PUSH_VLAN, /* Push a new VLAN tag */
OFPAT11_POP_VLAN, /* Pop the outer VLAN tag */
- OFPAT11_PUSH_MPLS, /* Push a new MPLS tag */
- OFPAT11_POP_MPLS, /* Pop the outer MPLS tag */
+ OFPAT11_PUSH_MPLS, /* Push a new MPLS Label Stack Entry */
+ OFPAT11_POP_MPLS, /* Pop the outer MPLS Label Stack Entry */
OFPAT11_SET_QUEUE, /* Set queue id when outputting to a port */
OFPAT11_GROUP, /* Apply group. */
OFPAT11_SET_NW_TTL, /* IP TTL. */
OFPIT11_EXPERIMENTER = 0xFFFF /* Experimenter instruction */
};
+#define OFPIT11_ALL (OFPIT11_GOTO_TABLE | OFPIT11_WRITE_METADATA | \
+ OFPIT11_WRITE_ACTIONS | OFPIT11_APPLY_ACTIONS | \
+ OFPIT11_CLEAR_ACTIONS)
+
#define OFP11_INSTRUCTION_ALIGN 8
/* Generic ofp_instruction structure. */
when this is not an exact-match entry. */
ovs_be16 idle_timeout; /* Number of seconds idle before expiration. */
ovs_be16 hard_timeout; /* Number of seconds before expiration. */
- uint8_t pad2[6]; /* Align to 64-bits. */
+ ovs_be16 flags; /* OF 1.3: Set of OFPFF*. */
+ uint8_t pad2[4]; /* Align to 64-bits. */
ovs_be64 cookie; /* Opaque controller-issued identifier. */
ovs_be64 packet_count; /* Number of packets in flow. */
ovs_be64 byte_count; /* Number of bytes in flow. */
/* Body for ofp_stats_request of type OFPST_AGGREGATE. */
/* Identical to ofp11_flow_stats_request */
+/* Flow match fields. */
+enum ofp11_flow_match_fields {
+ OFPFMF11_IN_PORT = 1 << 0, /* Switch input port. */
+ OFPFMF11_DL_VLAN = 1 << 1, /* VLAN id. */
+ OFPFMF11_DL_VLAN_PCP = 1 << 2, /* VLAN priority. */
+ OFPFMF11_DL_TYPE = 1 << 3, /* Ethernet frame type. */
+ OFPFMF11_NW_TOS = 1 << 4, /* IP ToS (DSCP field, 6 bits). */
+ OFPFMF11_NW_PROTO = 1 << 5, /* IP protocol. */
+ OFPFMF11_TP_SRC = 1 << 6, /* TCP/UDP/SCTP source port. */
+ OFPFMF11_TP_DST = 1 << 7, /* TCP/UDP/SCTP destination port. */
+ OFPFMF11_MPLS_LABEL = 1 << 8, /* MPLS label. */
+ OFPFMF11_MPLS_TC = 1 << 9, /* MPLS TC. */
+ OFPFMF11_TYPE = 1 << 10, /* Match type. */
+ OFPFMF11_DL_SRC = 1 << 11, /* Ethernet source address. */
+ OFPFMF11_DL_DST = 1 << 12, /* Ethernet destination address. */
+ OFPFMF11_NW_SRC = 1 << 13, /* IP source address. */
+ OFPFMF11_NW_DST = 1 << 14, /* IP destination address. */
+ OFPFMF11_METADATA = 1 << 15, /* Metadata passed between tables. */
+};
+
/* Body of reply to OFPST_TABLE request. */
struct ofp11_table_stats {
uint8_t table_id; /* Identifier of table. Lower numbered tables
ovs_be16 total_len; /* Full length of frame. */
uint8_t reason; /* Reason packet is being sent (one of OFPR_*) */
uint8_t table_id; /* ID of the table that was looked up */
- uint8_t data[0]; /* Ethernet frame, halfway through 32-bit word,
+ /* uint8_t data[0]; Ethernet frame, halfway through 32-bit word,
so the IP header is 32-bit aligned. The
amount of data is inferred from the length
field in the header. Because of padding,