Support encoding of EXT-187: flow entry notification extension (ONF flow monitor) requests.
Signed-off-by: Simon Horman <ho...@verge.net.au> --- v2 * First post --- lib/ofp-util.c | 29 ++++++++++++++++++++++++++++- ofproto/ofproto.c | 21 +++++++++++++-------- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/lib/ofp-util.c b/lib/ofp-util.c index a7d5b4a..407e807 100644 --- a/lib/ofp-util.c +++ b/lib/ofp-util.c @@ -5444,6 +5444,32 @@ ofputil_append_nx_flow_monitor_request( } static void +ofputil_append_onf13_flow_monitor_request( + const struct ofputil_flow_monitor_request *rq, struct ofpbuf *msg) +{ + struct onf13_flow_monitor_request *onffmr; + size_t start_ofs; + int match_len; + + if (!ofpbuf_size(msg)) { + ofpraw_put(OFPRAW_ONFST13_FLOW_MONITOR_REQUEST, OFP13_VERSION, msg); + } + + start_ofs = ofpbuf_size(msg); + ofpbuf_put_zeros(msg, sizeof *onffmr); + /* nx_put_match() is use to put an OXM match without an + * ofp_match_header */ + match_len = nx_put_match(msg, &rq->match, htonll(0), htonll(0)); + + onffmr = ofpbuf_at_assert(msg, start_ofs, sizeof *onffmr); + onffmr->id = htonl(rq->id); + onffmr->flags = htons(nx_from_ofp14_flow_monitor_flags(rq->flags)); + onffmr->out_port = ofputil_port_to_ofp11(rq->out_port); + onffmr->match_len = htons(match_len); + onffmr->table_id = rq->table_id; +} + +static void ofputil_append_of14_flow_monitor_request( const struct ofputil_flow_monitor_request *rq, enum ofp_version version, struct ofpbuf *msg) @@ -5476,12 +5502,13 @@ ofputil_append_flow_monitor_request( switch (version) { case OFP10_VERSION: return ofputil_append_nx_flow_monitor_request(rq, msg); + case OFP13_VERSION: + return ofputil_append_onf13_flow_monitor_request(rq, msg); case OFP14_VERSION: case OFP15_VERSION: return ofputil_append_of14_flow_monitor_request(rq, version, msg); case OFP11_VERSION: case OFP12_VERSION: - case OFP13_VERSION: /* XXX: Use OF extension! */ default: OVS_NOT_REACHED(); } diff --git a/ofproto/ofproto.c b/ofproto/ofproto.c index 88ac5b5..a9a9d91 100644 --- a/ofproto/ofproto.c +++ b/ofproto/ofproto.c @@ -4757,16 +4757,18 @@ static void ofproto_compose_paused_or_resumed(enum ofp_version ofp_version, struct list *msgs, bool paused) { + struct ofpbuf *msg; + enum ofpraw raw; + switch (ofp_version) { - case OFP10_VERSION: { - struct ofpbuf *msg; - enum ofpraw raw; + case OFP10_VERSION: raw = paused ? OFPRAW_NXT_FLOW_MONITOR_PAUSED : OFPRAW_NXT_FLOW_MONITOR_RESUMED; - msg = ofpraw_alloc_xid(raw, ofp_version, htonl(0), 0); - list_push_back(msgs, &msg->list_node); break; - } + case OFP13_VERSION: + raw = paused ? OFPRAW_ONF13_FLOW_MONITOR_PAUSED + : OFPRAW_ONF13_FLOW_MONITOR_RESUMED; + break; case OFP14_VERSION: case OFP15_VERSION: { struct ofputil_flow_update fu; @@ -4775,14 +4777,17 @@ ofproto_compose_paused_or_resumed(enum ofp_version ofp_version, ofputil_start_flow_update(ofp_version, msgs); } ofputil_append_flow_update(&fu, msgs); - break; + return; } case OFP11_VERSION: case OFP12_VERSION: - case OFP13_VERSION: /* XXX: Use ONF extension */ default: OVS_NOT_REACHED(); } + + /* Create and send message for NX/ONF13 */ + msg = ofpraw_alloc_xid(raw, ofp_version, htonl(0), 0); + list_push_back(msgs, &msg->list_node); } void -- 2.0.0.rc2 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev