From 508fd24615c10bcf6efa79301a42e8a3fd129ed6 Mon Sep 17 00:00:00 2001 From: Justin Pettit Date: Thu, 21 Jan 2010 23:42:47 -0800 Subject: [PATCH] ofproto: Add wire-compatibility for slicing (OpenFlow 1.0) OpenFlow 1.0 adds support for a subset of QoS that's referred to as slicing. Open vSwitch does not support this yet, so send errors if it's used. NOTE: OVS at this point is not wire-compatible with OpenFlow 1.0 until the final commit in this OpenFlow 1.0 set. --- include/openflow/openflow.h | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/include/openflow/openflow.h b/include/openflow/openflow.h index d3a98dc5..9ac23776 100644 --- a/include/openflow/openflow.h +++ b/include/openflow/openflow.h @@ -109,7 +109,11 @@ enum ofp_type { /* Barrier messages. */ OFPT_BARRIER_REQUEST, /* Controller/switch message */ - OFPT_BARRIER_REPLY /* Controller/switch message */ + OFPT_BARRIER_REPLY, /* Controller/switch message */ + + /* Queue Configuration messages. */ + OFPT_QUEUE_GET_CONFIG_REQUEST, /* Controller/switch message */ + OFPT_QUEUE_GET_CONFIG_REPLY /* Controller/switch message */ }; /* Header on all OpenFlow packets. */ @@ -157,6 +161,7 @@ enum ofp_capabilities { OFPC_MULTI_PHY_TX = 1 << 4, /* Supports transmitting through multiple physical interfaces */ OFPC_IP_REASM = 1 << 5, /* Can reassemble IP fragments. */ + OFPC_QUEUE_STATS = 1 << 6, /* Queue statistics. */ OFPC_ARP_MATCH_IP = 1 << 7 /* Match IP addresses in ARP pkts. */ }; @@ -321,6 +326,7 @@ enum ofp_action_type { OFPAT_SET_NW_TOS, /* IP ToS (DSCP field, 6 bits). */ OFPAT_SET_TP_SRC, /* TCP/UDP source port. */ OFPAT_SET_TP_DST, /* TCP/UDP destination port. */ + OFPAT_ENQUEUE, /* Output to queue. */ OFPAT_VENDOR = 0xffff }; @@ -603,7 +609,8 @@ enum ofp_error_type { OFPET_BAD_REQUEST, /* Request was not understood. */ OFPET_BAD_ACTION, /* Error in action description. */ OFPET_FLOW_MOD_FAILED, /* Problem modifying flow entry. */ - OFPET_PORT_MOD_FAILED /* OFPT_PORT_MOD failed. */ + OFPET_PORT_MOD_FAILED, /* OFPT_PORT_MOD failed. */ + OFPET_QUEUE_OP_FAILED /* Queue operation failed. */ }; /* ofp_error_msg 'code' values for OFPET_HELLO_FAILED. 'data' contains an @@ -638,7 +645,8 @@ enum ofp_bad_action_code { OFPBAC_BAD_OUT_PORT, /* Problem validating output action. */ OFPBAC_BAD_ARGUMENT, /* Bad action argument. */ OFPBAC_EPERM, /* Permissions error. */ - OFPBAC_TOO_MANY /* Can't handle this many actions. */ + OFPBAC_TOO_MANY, /* Can't handle this many actions. */ + OFPBAC_BAD_QUEUE /* Problem validating output queue. */ }; /* ofp_error_msg 'code' values for OFPET_FLOW_MOD_FAILED. 'data' contains @@ -650,7 +658,9 @@ enum ofp_flow_mod_failed_code { OFPFMFC_EPERM, /* Permissions error. */ OFPFMFC_BAD_EMERG_TIMEOUT, /* Flow not added because of non-zero idle/hard * timeout. */ - OFPFMFC_BAD_COMMAND /* Unknown command. */ + OFPFMFC_BAD_COMMAND, /* Unknown command. */ + OFPFMFC_UNSUPPORTED /* Unsupported action list - cannot process in + the order specified. */ }; /* ofp_error_msg 'code' values for OFPET_PORT_MOD_FAILED. 'data' contains @@ -660,6 +670,14 @@ enum ofp_port_mod_failed_code { OFPPMFC_BAD_HW_ADDR, /* Specified hardware address is wrong. */ }; +/* ofp_error msg 'code' values for OFPET_QUEUE_OP_FAILED. 'data' contains + * at least the first 64 bytes of the failed request */ +enum ofp_queue_op_failed_code { + OFPQOFC_BAD_PORT, /* Invalid port (or port does not exist). */ + OFPQOFC_BAD_QUEUE, /* Queue does not exist. */ + OFPQOFC_EPERM /* Permissions error. */ +}; + /* OFPT_ERROR: Error message (datapath -> controller). */ struct ofp_error_msg { struct ofp_header header; @@ -697,6 +715,11 @@ enum ofp_stats_types { * The reply body is an array of struct ofp_port_stats. */ OFPST_PORT, + /* Queue statistics for a port + * The request body defines the port + * The reply body is an array of struct ofp_queue_stats */ + OFPST_QUEUE, + /* Vendor extension. * The request and reply bodies begin with a 32-bit vendor ID, which takes * the same form as in "struct ofp_vendor_header". The request and reply -- 2.30.2