This is consists of extending and renaming existing code for NX flow monitor requests.
Signed-off-by: Simon Horman <ho...@verge.net.au> --- v2 * No change --- lib/ofp-print.c | 68 +++++++++++++++++++++++++++++++++++++++++++++++------- tests/ofp-print.at | 12 ++++++++++ 2 files changed, 72 insertions(+), 8 deletions(-) diff --git a/lib/ofp-print.c b/lib/ofp-print.c index 81cac90..40eb16d 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -2184,16 +2184,50 @@ nx_flow_monitor_flags_to_name(uint32_t bit) return NULL; } +static const char * +ofp_flow_monitor_flags_to_name(uint32_t bit) +{ + enum ofp14_flow_monitor_flags fmf = bit; + + switch (fmf) { + case OFPFMF14_INITIAL: return "initial"; + case OFPFMF14_ADD: return "add"; + case OFPFMF14_REMOVED: return "delete"; + case OFPFMF14_MODIFY: return "modify"; + case OFPFMF14_INSTRUCTIONS: return "instructions"; + case OFPFMF14_NO_ABBREV: return "no_abbrev"; + case OFPFMF14_ONLY_OWN: return "only_own"; + } + + return NULL; +} + +static const char * +ofp_flow_monitor_command_to_name(enum ofp14_flow_monitor_command command) +{ + switch (command) { + case OFPFMC14_ADD: + return "ADD"; + case OFPFMC14_MODIFY: + return "MODIFY"; + case OFPFMC14_DELETE: + return "DELETE"; + default: + OVS_NOT_REACHED(); + } +} + static void -ofp_print_nxst_flow_monitor_request(struct ds *string, - const struct ofp_header *oh) +ofp_print_flow_monitor_request(struct ds *string, const struct ofp_header *oh) { struct ofpbuf b; + enum ofpraw raw; + + ofpraw_decode(&raw, oh); ofpbuf_use_const(&b, oh, ntohs(oh->length)); for (;;) { struct ofputil_flow_monitor_request request; - enum nx_flow_monitor_flags nx_flags; int retval; retval = ofputil_decode_flow_monitor_request(&request, &b); @@ -2204,16 +2238,34 @@ ofp_print_nxst_flow_monitor_request(struct ds *string, return; } - ds_put_format(string, "\n id=%"PRIu32" flags=", request.id); - nx_flags = nx_from_ofp14_flow_monitor_flags(request.flags); - ofp_print_bit_names(string, nx_flags, - nx_flow_monitor_flags_to_name, ','); + ds_put_char(string, '\n'); + + if (raw == OFPRAW_OFPST14_FLOW_MONITOR_REQUEST) { + ds_put_format(string, " command=%s", + ofp_flow_monitor_command_to_name(request.command)); + } + + ds_put_format(string, " id=%"PRIu32" flags=", request.id); + if (raw == OFPRAW_OFPST14_FLOW_MONITOR_REQUEST) { + ofp_print_bit_names(string, request.flags, + ofp_flow_monitor_flags_to_name, ','); + } else { + enum nx_flow_monitor_flags nx_flags; + nx_flags = nx_from_ofp14_flow_monitor_flags(request.flags); + ofp_print_bit_names(string, nx_flags, + nx_flow_monitor_flags_to_name, ','); + } if (request.out_port != OFPP_NONE) { ds_put_cstr(string, " out_port="); ofputil_format_port(request.out_port, string); } + if (request.out_group != OFPG_ANY) { + ds_put_cstr(string, " out_group="); + ofputil_format_group(request.out_group, string); + } + if (request.table_id != 0xff) { ds_put_format(string, " table=%"PRIu8, request.table_id); } @@ -3025,7 +3077,7 @@ ofp_to_string__(const struct ofp_header *oh, enum ofpraw raw, break; case OFPTYPE_FLOW_MONITOR_STATS_REQUEST: - ofp_print_nxst_flow_monitor_request(string, msg); + ofp_print_flow_monitor_request(string, msg); break; case OFPTYPE_FLOW_MONITOR_STATS_REPLY: diff --git a/tests/ofp-print.at b/tests/ofp-print.at index cfb604e..15efd73 100644 --- a/tests/ofp-print.at +++ b/tests/ofp-print.at @@ -1975,6 +1975,18 @@ OFPST_PORT_DESC reply (xid=0x0): ]) AT_CLEANUP +AT_SETUP([OFPST_FLOW_MONITOR request - OF1.4]) +AT_KEYWORDS([ofp-print OFPT_STATS_REQUEST]) +AT_CHECK([ovs-ofctl ofp-print "\ +05 12 00 30 00 00 00 02 00 10 00 00 00 00 00 00 \ +00 00 00 01 00 00 00 05 00 00 00 08 00 7f 00 00 \ +00 01 00 0a 80 00 0c 02 10 09 00 00 00 00 00 00 \ +"], [0], [dnl +OFPST_FLOW_MONITOR request (OF1.4) (xid=0x2): + command=ADD id=1 flags=initial,add,delete,modify,instructions,no_abbrev,only_own out_port=5 out_group=8 table=0 dl_vlan=9 +]) +AT_CLEANUP + AT_SETUP([OFPST_PORT_DESC reply - OF1.4]) AT_KEYWORDS([ofp-print OFPT_STATS_REPLY]) AT_CHECK([ovs-ofctl ofp-print "\ -- 2.0.0.rc2 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev