/* 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. */
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. */
};
OFPAT_SET_DL_DST, /* Ethernet destination address. */
OFPAT_SET_NW_SRC, /* IP source address. */
OFPAT_SET_NW_DST, /* IP destination address. */
- OFPAT_SET_NW_TOS, /* IP ToS/DSCP field (6 bits). */
+ 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
};
struct ofp_action_nw_tos {
uint16_t type; /* OFPAT_SET_TW_TOS. */
uint16_t len; /* Length is 8. */
- uint8_t nw_tos; /* IP ToS/DSCP (6 bits). */
+ uint8_t nw_tos; /* IP TOS (DSCP field, 6 bits). */
uint8_t pad[3];
};
OFP_ASSERT(sizeof(struct ofp_action_nw_tos) == 8);
OFPFW_NW_DST_ALL = 32 << OFPFW_NW_DST_SHIFT,
OFPFW_DL_VLAN_PCP = 1 << 20, /* VLAN priority. */
+ OFPFW_NW_TOS = 1 << 21, /* IP ToS (DSCP field, 6 bits). */
/* Wildcard all fields. */
- OFPFW_ALL = ((1 << 21) - 1)
+ OFPFW_ALL = ((1 << 22) - 1)
};
/* The wildcards for ICMP type and code fields use the transport source
uint8_t dl_vlan_pcp; /* Input VLAN priority. */
uint8_t pad1[1]; /* Align to 64-bits. */
uint16_t dl_type; /* Ethernet frame type. */
+ uint8_t nw_tos; /* IP ToS (DSCP field, 6 bits). */
uint8_t nw_proto; /* IP protocol or lower 8 bits of
ARP opcode. */
- uint8_t pad2[3]; /* Align to 64-bits. */
+ uint8_t pad2[2]; /* Align to 64-bits. */
uint32_t nw_src; /* IP source address. */
uint32_t nw_dst; /* IP destination address. */
uint16_t tp_src; /* TCP/UDP source port. */
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
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
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
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;
OFPST_TABLE,
/* Physical port statistics.
- * The request body is empty.
+ * The request body is struct ofp_port_stats_request.
* 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
};
OFP_ASSERT(sizeof(struct ofp_table_stats) == 64);
+/* Body for ofp_stats_request of type OFPST_PORT. */
+struct ofp_port_stats_request {
+ uint16_t port_no; /* OFPST_PORT message may request statistics
+ for a single port (specified with port_no)
+ or for all ports (port_no == OFPP_NONE). */
+ uint8_t pad[6];
+};
+OFP_ASSERT(sizeof(struct ofp_port_stats_request) == 8);
+
/* Body of reply to OFPST_PORT request. If a counter is unsupported, set
* the field to all ones. */
struct ofp_port_stats {