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