Signed-off-by: Simon Horman <[email protected]>
---
v12
* No change
v11
* No change
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 ffa4dd2..8501af0 100644
--- a/ofproto/ofproto.c
+++ b/ofproto/ofproto.c
@@ -2977,9 +2977,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;
@@ -2988,8 +2987,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
[email protected]
http://openvswitch.org/mailman/listinfo/dev