Signed-off-by: Simon Horman <ho...@verge.net.au> ---
v10 * No change v9 * Manual Rebase * Make use of enum ofp_version v8 * Omitted v7 * Omitted v6 * No change v5 * Initial Post --- ofproto/ofproto.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index cbf90c9..00b9bc4 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -2428,13 +2428,34 @@ handle_port_stats_request(struct ofconn *ofconn, const struct ofp_header *request) { struct ofproto *p = ofconn_get_ofproto(ofconn); - const struct ofp10_port_stats_request *psr = ofpmsg_body(request); struct ofport *port; struct list replies; + uint16_t port_no; + + switch ((enum ofp_version)request->version) { + case OFP12_VERSION: + case OFP11_VERSION: { + const struct ofp11_port_stats_request *psr = ofpmsg_body(request); + enum ofperr error = ofputil_port_from_ofp11(psr->port_no, &port_no); + if (error) { + return error; + } + break; + } + + case OFP10_VERSION: { + const struct ofp10_port_stats_request *psr = ofpmsg_body(request); + port_no = ntohs(psr->port_no); + break; + } + + default: + NOT_REACHED(); + } ofpmp_init(&replies, request); - if (psr->port_no != htons(OFPP_NONE)) { - port = ofproto_get_port(p, ntohs(psr->port_no)); + if (port_no != OFPP_NONE) { + port = ofproto_get_port(p, port_no); if (port) { append_port_stat(port, request->version, &replies); } -- 1.7.10.2.484.gcd07cc5 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev