Signed-off-by: Simon Horman <ho...@verge.net.au>

---

v10
* Make use of enum ofp_version

v9
* Omitted

v8
* Omitted

v7
* Omitted

v6
* No change

v5
* Initial Post
---
 ofproto/ofproto.c | 33 +++++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c
index 51937c2..ed1617e 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -2964,9 +2964,8 @@ 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 = ofpmsg_body(rq);
     struct queue_stats_cbdata cbdata;
-    unsigned int port_no;
+    uint16_t port_no;
     struct ofport *port;
     uint32_t queue_id;
     enum ofperr error;
@@ -2975,8 +2974,34 @@ handle_queue_stats_request(struct ofconn *ofconn,
 
     ofpmp_init(&cbdata.replies, rq);
 
-    port_no = ntohs(qsr->port_no);
-    queue_id = ntohl(qsr->queue_id);
+    switch ((enum ofp_version)rq->version) {
+    case OFP12_VERSION:
+    case OFP11_VERSION: {
+        const struct ofp11_queue_stats_request *qsr;
+        enum ofperr error;
+
+        qsr = ofpmsg_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 = ofpmsg_body(rq);
+        port_no = ntohs(qsr->port_no);
+        queue_id = ntohl(qsr->queue_id);
+        break;
+    }
+
+    default:
+        NOT_REACHED();
+    }
+
     if (port_no == OFPP_ALL) {
         error = OFPERR_OFPQOFC_BAD_QUEUE;
         HMAP_FOR_EACH (port, hmap_node, &ofproto->ports) {
-- 
1.7.10.2.484.gcd07cc5

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to