EXT-350 Signed-off-by: Simon Horman <simon.hor...@netronome.com> --- lib/ofp-print.c | 50 +++++++++++++++++++++++++++++++++++---------- tests/ofp-print.at | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 97 insertions(+), 13 deletions(-)
diff --git a/lib/ofp-print.c b/lib/ofp-print.c index 68f5740..13596f9 100644 --- a/lib/ofp-print.c +++ b/lib/ofp-print.c @@ -2104,7 +2104,7 @@ ofp_header_to_string__(const struct ofp_header *oh, enum ofpraw raw, } static void -ofp_print_bucket_id(struct ds *s, uint32_t bucket_id, +ofp_print_bucket_id(struct ds *s, const char *label, uint32_t bucket_id, enum ofp_version ofp_version) { switch (ofp_version) { @@ -2122,7 +2122,7 @@ ofp_print_bucket_id(struct ds *s, uint32_t bucket_id, OVS_NOT_REACHED(); } - ds_put_cstr(s, "bucket_id:"); + ds_put_cstr(s, label); if (bucket_id >= OFPG15_BUCKET_FIRST) { static const char *id_str[] = { "first", "last", "all" }; @@ -2137,22 +2137,29 @@ ofp_print_bucket_id(struct ds *s, uint32_t bucket_id, static void ofp_print_group(struct ds *s, uint32_t group_id, uint8_t type, - struct list *p_buckets, enum ofp_version ofp_version) + struct list *p_buckets, enum ofp_version ofp_version, + bool suppress_type) { - static const char *type_str[] = { "all", "select", "indirect", - "ff", "unknown" }; struct ofputil_bucket *bucket; - ds_put_format(s, "group_id=%"PRIu32",type=%s", - group_id, type_str[type > 4 ? 4 : type]); + ds_put_format(s, "group_id=%"PRIu32, group_id); + + if (!suppress_type) { + static const char *type_str[] = { "all", "select", "indirect", + "ff", "unknown" }; + ds_put_format(s, ",type=%s", type_str[type > 4 ? 4 : type]); + } + if (!p_buckets) { return; } + ds_put_char(s, ','); + LIST_FOR_EACH (bucket, list_node, p_buckets) { - ds_put_cstr(s, ",bucket="); + ds_put_cstr(s, "bucket="); - ofp_print_bucket_id(s, bucket->bucket_id, ofp_version); + ofp_print_bucket_id(s, "bucket_id:", bucket->bucket_id, ofp_version); if (bucket->weight != 1) { ds_put_format(s, "weight:%"PRIu16",", bucket->weight); } @@ -2165,7 +2172,10 @@ ofp_print_group(struct ds *s, uint32_t group_id, uint8_t type, ds_put_cstr(s, "actions="); ofpacts_format(bucket->ofpacts, bucket->ofpacts_len, s); + ds_put_char(s, ','); } + + ds_chomp(s, ','); } static void @@ -2197,7 +2207,8 @@ ofp_print_group_desc(struct ds *s, const struct ofp_header *oh) ds_put_char(s, '\n'); ds_put_char(s, ' '); - ofp_print_group(s, gd.group_id, gd.type, &gd.buckets, oh->version); + ofp_print_group(s, gd.group_id, gd.type, &gd.buckets, oh->version, + false); ofputil_bucket_list_destroy(&gd.buckets); } } @@ -2306,6 +2317,7 @@ ofp_print_group_mod(struct ds *s, const struct ofp_header *oh) { struct ofputil_group_mod gm; int error; + bool bucket_command = false; error = ofputil_decode_group_mod(oh, &gm); if (error) { @@ -2329,12 +2341,28 @@ ofp_print_group_mod(struct ds *s, const struct ofp_header *oh) ds_put_cstr(s, "DEL"); break; + case OFPGC15_INSERT_BUCKET: + ds_put_cstr(s, "INSERT_BUCKET"); + bucket_command = true; + break; + + case OFPGC15_REMOVE_BUCKET: + ds_put_cstr(s, "REMOVE_BUCKET"); + bucket_command = true; + break; + default: ds_put_format(s, "cmd:%"PRIu16"", gm.command); } ds_put_char(s, ' '); - ofp_print_group(s, gm.group_id, gm.type, &gm.buckets, oh->version); + if (bucket_command) { + ofp_print_bucket_id(s, "command_bucket_id:", + gm.command_bucket_id, oh->version); + } + + ofp_print_group(s, gm.group_id, gm.type, &gm.buckets, oh->version, + bucket_command); ofputil_bucket_list_destroy(&gm.buckets); } diff --git a/tests/ofp-print.at b/tests/ofp-print.at index ee3f95d..1221335 100644 --- a/tests/ofp-print.at +++ b/tests/ofp-print.at @@ -1959,7 +1959,7 @@ AT_CHECK([ovs-ofctl ofp-print "\ ]) AT_CLEANUP -AT_SETUP([OFPST_GROUP_DESC reply]) +AT_SETUP([OFPST_GROUP_DESC reply - OF1.1]) AT_KEYWORDS([ofp-print OFPT_STATS_REQUEST]) AT_CHECK([ovs-ofctl ofp-print "\ 02 13 00 78 00 00 00 02 00 07 00 00 00 00 00 00 \ @@ -1976,6 +1976,26 @@ OFPST_GROUP_DESC reply (OF1.1) (xid=0x2): ]) AT_CLEANUP +AT_SETUP([OFPST_GROUP_DESC reply - OF1.5]) +AT_KEYWORDS([ofp-print OFPT_STATS_REPLY]) +AT_CHECK([ovs-ofctl ofp-print "\ +06 13 00 98 00 00 00 02 00 07 00 00 00 00 00 00 \ +00 88 01 00 00 00 20 00 00 78 00 00 00 00 00 00 \ +00 28 00 10 00 00 00 00 00 00 00 10 00 00 00 01 \ +00 00 00 00 00 00 00 00 00 00 00 08 00 64 00 00 \ +00 01 00 08 00 00 00 01 \ +00 28 00 10 00 00 00 01 00 00 00 10 00 00 00 02 \ +00 00 00 00 00 00 00 00 00 00 00 08 00 c8 00 00 \ +00 01 00 08 00 00 00 02 \ +00 28 00 10 00 00 00 02 00 00 00 10 00 00 00 03 \ +00 00 00 00 00 00 00 00 00 00 00 08 00 c8 00 00 \ +00 01 00 08 00 00 00 03 \ +"], [0], [dnl +OFPST_GROUP_DESC reply (OF1.5) (xid=0x2): + group_id=8192,type=select,bucket=bucket_id:0,weight:100,watch_port:1,actions=output:1,bucket=bucket_id:1,weight:200,watch_port:2,actions=output:2,bucket=bucket_id:2,weight:200,watch_port:3,actions=output:3 +]) +AT_CLEANUP + AT_SETUP([OFPST_GROUP_FEATURES request]) AT_KEYWORDS([ofp-print OFPT_STATS_REQUEST]) AT_CHECK([ovs-ofctl ofp-print "\ @@ -2759,7 +2779,7 @@ NXT_FLOW_MOD (xid=0x2): ADD NXM_NX_TUN_ID(00000000000001c8), NXM_NX_REG0(0000007 ]) AT_CLEANUP -AT_SETUP([OFPT_GROUP_MOD]) +AT_SETUP([OFPT_GROUP_MOD - OF1.1]) AT_KEYWORDS([ofp-print]) AT_CHECK([ovs-ofctl ofp-print "\ 02 0f 00 70 11 22 33 44 00 00 01 00 87 65 43 21 \ @@ -2775,6 +2795,42 @@ OFPT_GROUP_MOD (OF1.1) (xid=0x11223344): ]) AT_CLEANUP +AT_SETUP([OFPT_GROUP_MOD add - OF1.5]) +AT_KEYWORDS([ofp-print]) +AT_CHECK([ovs-ofctl ofp-print "\ +06 0f 00 90 11 22 33 44 00 00 01 00 87 65 43 21 \ +00 78 00 00 ff ff ff ff 00 28 00 10 00 00 00 00 \ +00 00 00 10 00 00 00 01 00 00 00 00 00 00 00 00 \ +00 00 00 08 00 64 00 00 00 01 00 08 00 00 00 01 \ +00 28 00 10 00 00 00 01 00 00 00 10 00 00 00 02 \ +00 00 00 00 00 00 00 00 00 00 00 08 00 c8 00 00 \ +00 01 00 08 00 00 00 02 00 28 00 10 00 00 00 02 \ +00 00 00 10 00 00 00 03 00 00 00 00 00 00 00 00 \ +00 00 00 08 00 c8 00 00 00 01 00 08 00 00 00 03 \ +"], [0], [dnl +OFPT_GROUP_MOD (OF1.5) (xid=0x11223344): + ADD group_id=2271560481,type=select,bucket=bucket_id:0,weight:100,watch_port:1,actions=output:1,bucket=bucket_id:1,weight:200,watch_port:2,actions=output:2,bucket=bucket_id:2,weight:200,watch_port:3,actions=output:3 +]) +AT_CLEANUP + +AT_SETUP([OFPT_GROUP_MOD insert bucket - OF1.5]) +AT_KEYWORDS([ofp-print]) +AT_CHECK([ovs-ofctl ofp-print "\ +06 0f 00 90 11 22 33 44 00 03 01 00 87 65 43 21 \ +00 78 00 00 ff ff ff fd 00 28 00 10 00 00 00 00 \ +00 00 00 10 00 00 00 01 00 00 00 00 00 00 00 00 \ +00 00 00 08 00 64 00 00 00 01 00 08 00 00 00 01 \ +00 28 00 10 00 00 00 01 00 00 00 10 00 00 00 02 \ +00 00 00 00 00 00 00 00 00 00 00 08 00 c8 00 00 \ +00 01 00 08 00 00 00 02 00 28 00 10 00 00 00 02 \ +00 00 00 10 00 00 00 03 00 00 00 00 00 00 00 00 \ +00 00 00 08 00 c8 00 00 00 01 00 08 00 00 00 03 \ +"], [0], [dnl +OFPT_GROUP_MOD (OF1.5) (xid=0x11223344): + INSERT_BUCKET command_bucket_id:first,group_id=2271560481,bucket=bucket_id:0,weight:100,watch_port:1,actions=output:1,bucket=bucket_id:1,weight:200,watch_port:2,actions=output:2,bucket=bucket_id:2,weight:200,watch_port:3,actions=output:3 +]) +AT_CLEANUP + AT_SETUP([NXT_FLOW_REMOVED]) AT_KEYWORDS([ofp-print]) AT_CHECK([ovs-ofctl ofp-print "\ -- 2.1.1 _______________________________________________ dev mailing list dev@openvswitch.org http://openvswitch.org/mailman/listinfo/dev