Skip to content

Commit

Permalink
include/openflow: Moved remaining common definitions from openflow-1.0.h
Browse files Browse the repository at this point in the history
 Moved remaining common definitions from openflow-1.0.h to
 openflow-common.h and renamed 1.0 specific definitions with
 the "10" infix. Added hstamp rules for new headers, fixed
 non-ASCII characters in openflow-1.3.h, Commented out
 trailing zero-length data members.

Signed-off-by: Jarno Rajahalme <[email protected]>
Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
Jarno Rajahalme authored and blp committed Dec 3, 2012
1 parent 90ef020 commit 31a9e63
Show file tree
Hide file tree
Showing 12 changed files with 153 additions and 138 deletions.
2 changes: 1 addition & 1 deletion build-aux/check-structs
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ def parseStruct():
forceMatch(';')
if size % alignment:
shortage = alignment - (size % alignment)
if (structName == "struct ofp_packet_in" and
if (structName == "struct ofp10_packet_in" and
shortage == 2 and
memberName == 'data' and
count == 0):
Expand Down
22 changes: 17 additions & 5 deletions include/openflow/automake.mk
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,35 @@ SUFFIXES += .h .hstamp
touch $@

HSTAMP_FILES = \
include/openflow/nicira.hstamp \
include/openflow/nicira-ext.hstamp \
include/openflow/openflow-1.0.hstamp \
include/openflow/openflow-1.1.hstamp \
include/openflow/openflow-1.2.hstamp \
include/openflow/openflow-1.3.hstamp \
include/openflow/openflow-common.hstamp \
include/openflow/openflow.hstamp
CLEANFILES += $(HSTAMP_FILES)
ALL_LOCAL += $(HSTAMP_FILES)
$(HSTAMP_FILES): build-aux/check-structs

include/openflow/openflow-1.0.hstamp: include/openflow/openflow-common.h
include/openflow/openflow-1.1.hstamp: include/openflow/openflow-common.h
include/openflow/openflow-1.0.hstamp: \
include/openflow/openflow-common.h
include/openflow/openflow-1.1.hstamp: \
include/openflow/openflow-common.h
include/openflow/openflow-1.2.hstamp: \
include/openflow/openflow-common.h \
include/openflow/openflow-1.1.h
include/openflow/openflow-1.3.hstamp: \
include/openflow/openflow-common.h \
include/openflow/openflow-1.1.h \
include/openflow/openflow-1.2.h
include/openflow/nicira-ext.hstamp: \
include/openflow/openflow.h \
include/openflow/openflow-common.h \
include/openflow/openflow-1.0.h \
include/openflow/openflow-1.1.h \
include/openflow/openflow-1.2.h \
include/openflow/openflow-common.h \
include/openflow/openflow.h
include/openflow/openflow-1.3.h
endif

EXTRA_DIST += build-aux/check-structs
Expand Down
107 changes: 9 additions & 98 deletions include/openflow/openflow-1.0.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,31 +51,6 @@ enum ofp_port {
OFPP_NONE = 0xffff /* Not associated with a physical port. */
};

#define OFP_DEFAULT_MISS_SEND_LEN 128

enum ofp_config_flags {
/* Handling of IP fragments. */
OFPC_FRAG_NORMAL = 0, /* No special handling for fragments. */
OFPC_FRAG_DROP = 1, /* Drop fragments. */
OFPC_FRAG_REASM = 2, /* Reassemble (only if OFPC_IP_REASM set). */
OFPC_FRAG_NX_MATCH = 3, /* Make first fragments available for matching. */
OFPC_FRAG_MASK = 3,

/* OFPC_INVALID_TTL_TO_CONTROLLER is deprecated in OpenFlow 1.3 */

/* TTL processing - applicable for IP and MPLS packets. */
OFPC_INVALID_TTL_TO_CONTROLLER = 1 << 2, /* Send packets with invalid TTL
to the controller. */
};

/* Switch configuration. */
struct ofp_switch_config {
ovs_be16 flags; /* OFPC_* flags. */
ovs_be16 miss_send_len; /* Max bytes of new flow that datapath should
send to the controller. */
};
OFP_ASSERT(sizeof(struct ofp_switch_config) == 4);

/* OpenFlow 1.0 specific capabilities supported by the datapath (struct
* ofp_switch_features, member capabilities). */
enum ofp10_capabilities {
Expand Down Expand Up @@ -177,7 +152,7 @@ struct ofp10_queue_get_config_reply {
OFP_ASSERT(sizeof(struct ofp10_queue_get_config_reply) == 8);

/* Packet received on port (datapath -> controller). */
struct ofp_packet_in {
struct ofp10_packet_in {
ovs_be32 buffer_id; /* ID assigned by datapath. */
ovs_be16 total_len; /* Full length of frame. */
ovs_be16 in_port; /* Port on which frame was received. */
Expand All @@ -190,7 +165,7 @@ struct ofp_packet_in {
offsetof(struct ofp_packet_in, data) ==
sizeof(struct ofp_packet_in) - 2. */
};
OFP_ASSERT(sizeof(struct ofp_packet_in) == 12);
OFP_ASSERT(sizeof(struct ofp10_packet_in) == 12);

enum ofp10_action_type {
OFPAT10_OUTPUT, /* Output to switch port. */
Expand Down Expand Up @@ -220,30 +195,8 @@ struct ofp10_action_output {
};
OFP_ASSERT(sizeof(struct ofp10_action_output) == 8);

/* Action header for OFPAT10_VENDOR. The rest of the body is vendor-defined. */
struct ofp_action_vendor_header {
ovs_be16 type; /* OFPAT10_VENDOR. */
ovs_be16 len; /* Length is a multiple of 8. */
ovs_be32 vendor; /* Vendor ID, which takes the same form
as in "struct ofp_vendor_header". */
};
OFP_ASSERT(sizeof(struct ofp_action_vendor_header) == 8);

/* Action header that is common to all actions. The length includes the
* header and any padding used to make the action 64-bit aligned.
* NB: The length of an action *must* always be a multiple of eight. */
struct ofp_action_header {
ovs_be16 type; /* One of OFPAT10_*. */
ovs_be16 len; /* Length of action, including this
header. This is the length of action,
including any padding to make it
64-bit aligned. */
uint8_t pad[4];
};
OFP_ASSERT(sizeof(struct ofp_action_header) == 8);

/* OFPAT10_ENQUEUE action struct: send packets to given queue on port. */
struct ofp_action_enqueue {
struct ofp10_action_enqueue {
ovs_be16 type; /* OFPAT10_ENQUEUE. */
ovs_be16 len; /* Len is 16. */
ovs_be16 port; /* Port that queue belongs. Should
Expand All @@ -252,7 +205,7 @@ struct ofp_action_enqueue {
uint8_t pad[6]; /* Pad for 64-bit alignment. */
ovs_be32 queue_id; /* Where to enqueue the packets. */
};
OFP_ASSERT(sizeof(struct ofp_action_enqueue) == 16);
OFP_ASSERT(sizeof(struct ofp10_action_enqueue) == 16);

union ofp_action {
ovs_be16 type;
Expand All @@ -268,7 +221,7 @@ union ofp_action {
OFP_ASSERT(sizeof(union ofp_action) == 8);

/* Send packet (controller -> datapath). */
struct ofp_packet_out {
struct ofp10_packet_out {
ovs_be32 buffer_id; /* ID assigned by datapath or UINT32_MAX. */
ovs_be16 in_port; /* Packet's input port (OFPP_NONE if none). */
ovs_be16 actions_len; /* Size of action array in bytes. */
Expand All @@ -279,10 +232,10 @@ struct ofp_packet_out {
* of the message length.
*/
};
OFP_ASSERT(sizeof(struct ofp_packet_out) == 8);
OFP_ASSERT(sizeof(struct ofp10_packet_out) == 8);

/* Flow wildcards. */
enum ofp_flow_wildcards {
enum ofp10_flow_wildcards {
OFPFW10_IN_PORT = 1 << 0, /* Switch input port. */
OFPFW10_DL_VLAN = 1 << 1, /* VLAN vid. */
OFPFW10_DL_SRC = 1 << 2, /* Ethernet source address. */
Expand Down Expand Up @@ -321,17 +274,6 @@ enum ofp_flow_wildcards {
#define OFPFW10_ICMP_TYPE OFPFW10_TP_SRC
#define OFPFW10_ICMP_CODE OFPFW10_TP_DST

/* Values below this cutoff are 802.3 packets and the two bytes
* following MAC addresses are used as a frame length. Otherwise, the
* two bytes are used as the Ethernet type.
*/
#define OFP_DL_TYPE_ETH2_CUTOFF 0x0600

/* Value of dl_type to indicate that the frame does not include an
* Ethernet type.
*/
#define OFP_DL_TYPE_NOT_ETH_TYPE 0x05ff

/* The VLAN id is 12-bits, so we can use the entire 16 bits to indicate
* special conditions. All ones indicates that 802.1Q header is not present.
*/
Expand All @@ -358,13 +300,6 @@ struct ofp10_match {
};
OFP_ASSERT(sizeof(struct ofp10_match) == 40);

/* Value used in "idle_timeout" and "hard_timeout" to indicate that the entry
* is permanent. */
#define OFP_FLOW_PERMANENT 0

/* By default, choose a priority in the middle. */
#define OFP_DEFAULT_PRIORITY 0x8000

enum ofp10_flow_mod_flags {
OFPFF10_EMERG = 1 << 2 /* Ramark this is for emergency. */
};
Expand Down Expand Up @@ -393,7 +328,7 @@ struct ofp10_flow_mod {
OFP_ASSERT(sizeof(struct ofp10_flow_mod) == 64);

/* Flow removed (datapath -> controller). */
struct ofp_flow_removed {
struct ofp10_flow_removed {
struct ofp10_match match; /* Description of fields. */
ovs_be64 cookie; /* Opaque controller-issued identifier. */

Expand All @@ -409,16 +344,7 @@ struct ofp_flow_removed {
ovs_be64 packet_count;
ovs_be64 byte_count;
};
OFP_ASSERT(sizeof(struct ofp_flow_removed) == 80);

/* OFPT_ERROR: Error message (datapath -> controller). */
struct ofp_error_msg {
ovs_be16 type;
ovs_be16 code;
uint8_t data[0]; /* Variable-length data. Interpreted based
on the type and code. */
};
OFP_ASSERT(sizeof(struct ofp_error_msg) == 4);
OFP_ASSERT(sizeof(struct ofp10_flow_removed) == 80);

/* Statistics request or reply message. */
struct ofp10_stats_msg {
Expand All @@ -429,10 +355,6 @@ struct ofp10_stats_msg {
};
OFP_ASSERT(sizeof(struct ofp10_stats_msg) == 12);

enum ofp_stats_reply_flags {
OFPSF_REPLY_MORE = 1 << 0 /* More replies to follow. */
};

/* Stats request of type OFPST_AGGREGATE or OFPST_FLOW. */
struct ofp10_flow_stats_request {
struct ofp10_match match; /* Fields to match. */
Expand Down Expand Up @@ -548,15 +470,4 @@ struct ofp10_vendor_stats_msg {
};
OFP_ASSERT(sizeof(struct ofp10_vendor_stats_msg) == 16);

/* Vendor extension. */
struct ofp_vendor_header {
struct ofp_header header; /* Type OFPT_VENDOR. */
ovs_be32 vendor; /* Vendor ID:
* - MSB 0: low-order bytes are IEEE OUI.
* - MSB != 0: defined by OpenFlow
* consortium. */
/* Vendor-defined arbitrary additional data. */
};
OFP_ASSERT(sizeof(struct ofp_vendor_header) == 12);

#endif /* openflow/openflow-1.0.h */
2 changes: 1 addition & 1 deletion include/openflow/openflow-1.1.h
Original file line number Diff line number Diff line change
Expand Up @@ -753,7 +753,7 @@ struct ofp11_packet_in {
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,
Expand Down
24 changes: 12 additions & 12 deletions include/openflow/openflow-1.3.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,8 +119,8 @@ enum ofp13_table_config {
/* OpenFlow 1.3 specific flags
* (struct ofp12_flow_mod, member flags). */
enum ofp13_flow_mod_flags {
OFPFF13_NO_PKT_COUNTS = 1 << 3, /* Dont keep track of packet count. */
OFPFF13_NO_BYT_COUNTS = 1 << 4 /* Dont keep track of byte count. */
OFPFF13_NO_PKT_COUNTS = 1 << 3, /* Don't keep track of packet count. */
OFPFF13_NO_BYT_COUNTS = 1 << 4 /* Don't keep track of byte count. */
};

/* Common header for all meter bands */
Expand All @@ -137,7 +137,7 @@ struct ofp13_meter_mod {
ovs_be16 command; /* One of OFPMC_*. */
ovs_be16 flags; /* Set of OFPMF_*. */
ovs_be32 meter_id; /* Meter instance. */
struct ofp13_meter_band_header bands[0]; /* The bands length is inferred
/* struct ofp13_meter_band_header bands[0]; The bands length is inferred
from the length field in the
header. */
};
Expand Down Expand Up @@ -246,7 +246,7 @@ struct ofp13_table_features {
ovs_be32 max_entries; /* Max number of entries supported. */

/* Table Feature Property list */
struct ofp13_table_feature_prop_header properties[0];
/* struct ofp13_table_feature_prop_header properties[0]; */
};
OFP_ASSERT(sizeof(struct ofp13_table_features) == 64);

Expand Down Expand Up @@ -281,8 +281,8 @@ struct ofp13_table_feature_prop_instructions {
* - Exactly (length - 4) bytes containing the instruction ids, then
* - Exactly (length + 7)/8*8 - (length) (between 0 and 7)
* bytes of all-zero bytes */
struct ofp11_instruction instruction_ids[0]; /* List of instructions
without any data */
/* struct ofp11_instruction instruction_ids[0]; List of instructions
without any data */
};
OFP_ASSERT(sizeof(struct ofp13_table_feature_prop_instructions) == 4);

Expand All @@ -295,7 +295,7 @@ struct ofp13_table_feature_prop_next_tables {
* - Exactly (length - 4) bytes containing the table_ids, then
* - Exactly (length + 7)/8*8 - (length) (between 0 and 7)
* bytes of all-zero bytes */
uint8_t next_table_ids[0];
/* uint8_t next_table_ids[0]; */
};
OFP_ASSERT(sizeof(struct ofp13_table_feature_prop_next_tables) == 4);

Expand All @@ -310,7 +310,7 @@ struct ofp13_table_feature_prop_actions {
* - Exactly (length - 4) bytes containing the action_ids, then
* - Exactly (length + 7)/8*8 - (length) (between 0 and 7)
* bytes of all-zero bytes */
struct ofp_action_header action_ids[0]; /* List of actions
/* struct ofp_action_header action_ids[0]; List of actions
without any data */
};
OFP_ASSERT(sizeof(struct ofp13_table_feature_prop_actions) == 4);
Expand All @@ -328,7 +328,7 @@ struct ofp13_table_feature_prop_oxm {
* - Exactly (length - 4) bytes containing the oxm_ids, then
* - Exactly (length + 7)/8*8 - (length) (between 0 and 7)
* bytes of all-zero bytes */
ovs_be32 oxm_ids[0]; /* Array of OXM headers */
/* ovs_be32 oxm_ids[0]; Array of OXM headers */
};
OFP_ASSERT(sizeof(struct ofp13_table_feature_prop_oxm) == 4);

Expand All @@ -344,7 +344,7 @@ struct ofp13_table_feature_prop_experimenter {
* - Exactly (length - 12) bytes containing the experimenter data, then
* - Exactly (length + 7)/8*8 - (length) (between 0 and 7)
* bytes of all-zero bytes */
ovs_be32 experimenter_data[0];
/* ovs_be32 experimenter_data[0]; */
};
OFP_ASSERT(sizeof(struct ofp13_table_feature_prop_experimenter) == 12);

Expand Down Expand Up @@ -402,7 +402,7 @@ struct ofp13_meter_stats {
ovs_be32 duration_sec; /* Time meter has been alive in seconds. */
ovs_be32 duration_nsec; /* Time meter has been alive in nanoseconds
beyond duration_sec. */
struct ofp13_meter_band_stats band_stats[0]; /* The band_stats length is
/* struct ofp13_meter_band_stats band_stats[0]; The band_stats length is
inferred from the length field. */
};
OFP_ASSERT(sizeof(struct ofp13_meter_stats) == 40);
Expand All @@ -412,7 +412,7 @@ struct ofp13_meter_config {
ovs_be16 length; /* Length of this entry. */
ovs_be16 flags; /* Set of OFPMC_* that apply. */
ovs_be32 meter_id; /* Meter instance. */
struct ofp13_meter_band_header bands[0]; /* The bands length is inferred
/* struct ofp13_meter_band_header bands[0]; The bands length is inferred
from the length field. */
};
OFP_ASSERT(sizeof(struct ofp13_meter_config) == 8);
Expand Down
Loading

0 comments on commit 31a9e63

Please sign in to comment.