*/
/*
- * Copyright (c) 2008, 2009, 2010, 2011 Nicira Networks.
+ * Copyright (c) 2008, 2009, 2010, 2011 Nicira, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* types. */
enum ofp11_type {
/* Controller command messages. */
- OFPT11_PACKET_OUT = 13, /* Controller/switch message */
- OFPT11_FLOW_MOD, /* Controller/switch message */
- OFPT11_GROUP_MOD, /* Controller/switch message */
+ OFPT11_GROUP_MOD = 15, /* Controller/switch message */
OFPT11_PORT_MOD, /* Controller/switch message */
OFPT11_TABLE_MOD, /* Controller/switch message */
/* Flow wildcards. */
enum ofp11_flow_wildcards {
- OFPFW11_IN_PORT = 1 << 0, /* Switch input port. */
- OFPFW11_DL_VLAN = 1 << 1, /* VLAN vid. */
- OFPFW11_DL_SRC = 1 << 2, /* Ethernet source address. */
- OFPFW11_DL_DST = 1 << 3, /* Ethernet destination address. */
- OFPFW11_DL_TYPE = 1 << 4, /* Ethernet frame type. */
- OFPFW11_NW_PROTO = 1 << 5, /* IP protocol. */
- OFPFW11_TP_SRC = 1 << 6, /* TCP/UDP source port. */
- OFPFW11_TP_DST = 1 << 7, /* TCP/UDP destination port. */
- OFPFW11_MPLS_LABEL = 1 << 8, /* MPLS label. */
- OFPFW11_MPLS_TC = 1 << 9, /* MPLS TC. */
+ OFPFW11_IN_PORT = 1 << 0, /* Switch input port. */
+ OFPFW11_DL_VLAN = 1 << 1, /* VLAN id. */
+ OFPFW11_DL_VLAN_PCP = 1 << 2, /* VLAN priority. */
+ OFPFW11_DL_TYPE = 1 << 3, /* Ethernet frame type. */
+ OFPFW11_NW_TOS = 1 << 4, /* IP ToS (DSCP field, 6 bits). */
+ OFPFW11_NW_PROTO = 1 << 5, /* IP protocol. */
+ OFPFW11_TP_SRC = 1 << 6, /* TCP/UDP/SCTP source port. */
+ OFPFW11_TP_DST = 1 << 7, /* TCP/UDP/SCTP destination port. */
+ OFPFW11_MPLS_LABEL = 1 << 8, /* MPLS label. */
+ OFPFW11_MPLS_TC = 1 << 9, /* MPLS TC. */
/* Wildcard all fields. */
- OFPFW11_ALL = ((1 << 10) - 1)
+ OFPFW11_ALL = ((1 << 10) - 1)
};
/* The VLAN id is 12-bits, so we can use the entire 16 bits to indicate
OFPIT11_EXPERIMENTER = 0xFFFF /* Experimenter instruction */
};
+#define OFP11_INSTRUCTION_ALIGN 8
+
+/* Generic ofp_instruction structure. */
+struct ofp11_instruction {
+ ovs_be16 type; /* Instruction type */
+ ovs_be16 len; /* Length of this struct in bytes. */
+ uint8_t pad[4]; /* Align to 64-bits */
+};
+OFP_ASSERT(sizeof(struct ofp11_instruction) == 8);
+
/* Instruction structure for OFPIT_GOTO_TABLE */
struct ofp11_instruction_goto_table {
ovs_be16 type; /* OFPIT_GOTO_TABLE */
};
OFP_ASSERT(sizeof(struct ofp11_instruction_actions) == 8);
+/* Instruction structure for experimental instructions */
+struct ofp11_instruction_experimenter {
+ ovs_be16 type; /* OFPIT11_EXPERIMENTER */
+ ovs_be16 len; /* Length of this struct in bytes */
+ ovs_be32 experimenter; /* Experimenter ID which takes the same form
+ as in struct ofp_vendor_header. */
+ /* Experimenter-defined arbitrary additional data. */
+};
+OFP_ASSERT(sizeof(struct ofp11_instruction_experimenter) == 8);
+
/* Action structure for OFPAT_OUTPUT, which sends packets out 'port'.
* When the 'port' is the OFPP_CONTROLLER, 'max_len' indicates the max
* number of bytes to send. A 'max_len' of zero means no bytes of the
indicates no restriction. */
ovs_be32 out_group; /* For OFPFC_DELETE* commands, require
matching entries to include this as an
- output group. A value of OFPG_ANY
+ output group. A value of OFPG11_ANY
indicates no restriction. */
ovs_be16 flags; /* One of OFPFF_*. */
uint8_t pad[2];
OFPGT11_FF /* Fast failover group. */
};
+/* Group numbering. Groups can use any number up to OFPG_MAX. */
+enum ofp11_group {
+ /* Last usable group number. */
+ OFPG11_MAX = 0xffffff00,
+
+ /* Fake groups. */
+ OFPG11_ALL = 0xfffffffc, /* Represents all groups for group delete
+ commands. */
+ OFPG11_ANY = 0xffffffff /* Wildcard group used only for flow stats
+ requests. Selects all flows regardless
+ of group (including flows with no
+ group). */
+};
+
/* Bucket for use in groups. */
struct ofp11_bucket {
ovs_be16 len; /* Length the bucket in bytes, including
as an output port. A value of OFPP_ANY
indicates no restriction. */
ovs_be32 out_group; /* Require matching entries to include this
- as an output group. A value of OFPG_ANY
+ as an output group. A value of OFPG11_ANY
indicates no restriction. */
uint8_t pad2[4]; /* Align to 64 bits. */
ovs_be64 cookie; /* Require matching entries to contain this