[ovs-dev] [PATCH 59/63] ofp-util: Allow decoding of Open Flow 1.1 & 1.2 Queue Stats Request Messages
Simon Horman
horms at verge.net.au
Wed Jun 27 08:20:35 UTC 2012
Signed-off-by: Simon Horman <horms at verge.net.au>
---
v5
* Initial Post
---
lib/ofp-util.c | 4 ++++
ofproto/ofproto.c | 33 +++++++++++++++++++++++++++++----
2 files changed, 33 insertions(+), 4 deletions(-)
diff --git a/lib/ofp-util.c b/lib/ofp-util.c
index f430dc3..99d4269 100644
--- a/lib/ofp-util.c
+++ b/lib/ofp-util.c
@@ -901,6 +901,8 @@ static const struct ofputil_msg_type ofputil_msg_types[] = {
OFPST11_REQUEST(OFPST_TABLE, OFPST_TABLE, 0, 0),
OFPST11_REQUEST(OFPST_PORT, OFPST_PORT,
sizeof(struct ofp11_port_stats_request), 0),
+ OFPST11_REQUEST(OFPST_QUEUE, OFPST_QUEUE,
+ sizeof(struct ofp11_queue_stats_request), 0),
OFPST11_REQUEST(OFPST_PORT_DESC, OFPST_PORT_DESC, 0, 0),
#undef OFPST11_REQUEST
@@ -920,6 +922,8 @@ static const struct ofputil_msg_type ofputil_msg_types[] = {
OFPST12_REQUEST(OFPST_TABLE, OFPST_TABLE, 0, 0),
OFPST12_REQUEST(OFPST_PORT, OFPST_PORT,
sizeof(struct ofp11_port_stats_request), 0),
+ OFPST12_REQUEST(OFPST_QUEUE, OFPST_QUEUE,
+ sizeof(struct ofp11_queue_stats_request), 0),
OFPST12_REQUEST(OFPST_PORT_DESC, OFPST_PORT_DESC, 0, 0),
#undef OFPST12_REQUEST
diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 4c5fe9b..9c5c0b2 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -2865,18 +2865,43 @@ handle_queue_stats_request(struct ofconn *ofconn,
const struct ofp_header *rq)
{
struct ofproto *ofproto = ofconn_get_ofproto(ofconn);
- const struct ofp10_queue_stats_request *qsr = ofputil_stats_msg_body(rq);
struct queue_stats_cbdata cbdata;
struct ofport *port;
- unsigned int port_no;
+ uint16_t port_no;
uint32_t queue_id;
COVERAGE_INC(ofproto_queue_req);
ofputil_start_stats_reply(rq, &cbdata.replies);
- port_no = ntohs(qsr->port_no);
- queue_id = ntohl(qsr->queue_id);
+ switch (rq->version) {
+ case OFP12_VERSION:
+ case OFP11_VERSION: {
+ const struct ofp11_queue_stats_request *qsr;
+ enum ofperr error;
+
+ qsr = ofputil_stats_msg_body(rq);
+ error = ofputil_port_from_ofp11(qsr->port_no, &port_no);
+ if (error) {
+ return error;
+ }
+ queue_id = ntohl(qsr->queue_id);
+ break;
+ }
+
+ case OFP10_VERSION: {
+ const struct ofp10_queue_stats_request *qsr;
+
+ qsr = ofputil_stats_msg_body(rq);
+ port_no = ntohs(qsr->port_no);
+ queue_id = ntohl(qsr->queue_id);
+ break;
+ }
+
+ default:
+ NOT_REACHED();
+ }
+
if (port_no == OFPP_ALL) {
HMAP_FOR_EACH (port, hmap_node, &ofproto->ports) {
handle_queue_stats_for_port(port, queue_id, &cbdata);
--
1.7.10.2.484.gcd07cc5
More information about the dev
mailing list