From patchwork Wed Mar 2 14:56:20 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Quentin Monnet X-Patchwork-Id: 591004 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from archives.nicira.com (archives.nicira.com [96.126.127.54]) by ozlabs.org (Postfix) with ESMTP id D6F2A1402D2 for ; Thu, 3 Mar 2016 01:58:04 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=6wind-com.20150623.gappssmtp.com header.i=@6wind-com.20150623.gappssmtp.com header.b=wW/A0365; dkim-atps=neutral Received: from archives.nicira.com (localhost [127.0.0.1]) by archives.nicira.com (Postfix) with ESMTP id 58C8822C390; Wed, 2 Mar 2016 06:57:24 -0800 (PST) X-Original-To: dev@openvswitch.org Delivered-To: dev@openvswitch.org Received: from mx3v3.cudamail.com (mx3.cudamail.com [64.34.241.5]) by archives.nicira.com (Postfix) with ESMTPS id 1B0E022C382 for ; Wed, 2 Mar 2016 06:57:22 -0800 (PST) Received: from bar6.cudamail.com (localhost [127.0.0.1]) by mx3v3.cudamail.com (Postfix) with ESMTPS id A60DD161B0B for ; Wed, 2 Mar 2016 07:57:21 -0700 (MST) X-ASG-Debug-ID: 1456930639-0b32372d77250ad0001-byXFYA Received: from mx1-pf1.cudamail.com ([192.168.24.1]) by bar6.cudamail.com with ESMTP id 06Kj4liPa1lFXAdH (version=TLSv1 cipher=DHE-RSA-AES256-SHA bits=256 verify=NO) for ; Wed, 02 Mar 2016 07:57:19 -0700 (MST) X-Barracuda-Envelope-From: quentin.monnet@6wind.com X-Barracuda-RBL-Trusted-Forwarder: 192.168.24.1 Received: from unknown (HELO mail-wm0-f49.google.com) (74.125.82.49) by mx1-pf1.cudamail.com with ESMTPS (RC4-SHA encrypted); 2 Mar 2016 14:57:17 -0000 Received-SPF: none (mx1-pf1.cudamail.com: domain at 6wind.com does not designate permitted sender hosts) X-Barracuda-Apparent-Source-IP: 74.125.82.49 X-Barracuda-RBL-IP: 74.125.82.49 Received: by mail-wm0-f49.google.com with SMTP id l68so84026666wml.0 for ; Wed, 02 Mar 2016 06:57:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=from:to:subject:date:message-id:in-reply-to:references; bh=nB3wbns9a6UN8Z85pqqEJ5j6O3SQC6yB68nXlv2wNjU=; b=wW/A0365WxLIkodahyXUjKyySbAQZD8YWGGyx/K6qtTd+w55c/XTPj1Xk190Jkk0u0 Z2YgSbo255WA1WYB+0XlOvjQND/wQgARNlErDfQ/EPb4HTCRkY1alYS59W1ogyBoWpgs Uo3FvBS3Wpbq6hfsL3algnuzeY3GxVmWLVQH72TCLiopKPGd+06CBlu8j6hjYQQNDki6 ZCEPRxFNRdH+lxEADhkEveIMVupRYUoPnNeKtqYyp5+4w5PuhPXjYJt9G/IhriAKV8hG aFPEanq8rAlrHfwcGA4m+1gHYNuh9wS69tkxgvYodfCfC9ydY6sd6tmKp0fPYp7EQ2i9 QMZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=nB3wbns9a6UN8Z85pqqEJ5j6O3SQC6yB68nXlv2wNjU=; b=TerJnVMsl7H/+cUpl9zudGlEoEn/3du4tPmTN5p6+KUmE18Kwcir9oUh2AcUQ85Z2Q iTBWUVDkcRMM7KsZLBmKTDpG0y8/CUZozr60iX8ec/GZTP70m6aNPxyKtZ0dtel3JAgj /oteuxeMp7DOJtgbtoYSL/INqZ/TpZhjKnY4AnoI2IHpCyk5bcM+gbsQpw91mWaOd5Fd rhxl+YQLn/38qScH+ulWCHKtJzE1uGquBVr/E5WJ7OPUndDkh96dhwhVMNgsDAzk8fJX Ep9F6v5SF51YcYpU8sGzvOxRF4FoAxkXKyES+aZgBq6tcesm5XcneFONqMvXvQq5n3uM qyJQ== X-Gm-Message-State: AD7BkJKmjqUTIPR0flt/Dxw2kpVl35RmVoVfg5wfUJzMDX5/W22GRO2LNuiGVoK39027KGA3 X-Received: by 10.28.189.67 with SMTP id n64mr378067wmf.24.1456930636265; Wed, 02 Mar 2016 06:57:16 -0800 (PST) Received: from xspare.dev.6wind.com. (guy78-3-82-239-227-177.fbx.proxad.net. [82.239.227.177]) by smtp.gmail.com with ESMTPSA id az8sm30189181wjc.17.2016.03.02.06.57.14 for (version=TLSv1/SSLv3 cipher=OTHER); Wed, 02 Mar 2016 06:57:15 -0800 (PST) X-CudaMail-Envelope-Sender: quentin.monnet@6wind.com From: Quentin Monnet To: dev@openvswitch.org X-CudaMail-MID: CM-E1-301023589 X-CudaMail-DTE: 030216 X-CudaMail-Originating-IP: 74.125.82.49 Date: Wed, 2 Mar 2016 15:56:20 +0100 X-ASG-Orig-Subj: [##CM-E1-301023589##][PATCH v3 5/7] ofp-actions: color output of flow actions for ovs-ofctl dump-flows Message-Id: <1456930582-8157-6-git-send-email-quentin.monnet@6wind.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1456930582-8157-1-git-send-email-quentin.monnet@6wind.com> References: <1456930582-8157-1-git-send-email-quentin.monnet@6wind.com> X-GBUdb-Analysis: 0, 74.125.82.49, Ugly c=0.444918 p=-0.52 Source Normal X-MessageSniffer-Rules: 0-0-0-32767-c X-Barracuda-Connect: UNKNOWN[192.168.24.1] X-Barracuda-Start-Time: 1456930639 X-Barracuda-Encrypted: DHE-RSA-AES256-SHA X-Barracuda-URL: https://web.cudamail.com:443/cgi-mod/mark.cgi X-Virus-Scanned: by bsmtpd at cudamail.com X-Barracuda-BRTS-Status: 1 X-Barracuda-Spam-Score: 1.10 X-Barracuda-Spam-Status: No, SCORE=1.10 using per-user scores of TAG_LEVEL=3.5 QUARANTINE_LEVEL=1000.0 KILL_LEVEL=4.0 tests=BSF_RULE7568M, BSF_SC5_MJ1963, DKIM_SIGNED, RDNS_NONE X-Barracuda-Spam-Report: Code version 3.2, rules version 3.2.3.27505 Rule breakdown below pts rule name description ---- ---------------------- -------------------------------------------------- 0.00 DKIM_SIGNED Domain Keys Identified Mail: message has a signature 0.50 BSF_RULE7568M Custom Rule 7568M 0.10 RDNS_NONE Delivered to trusted network by a host with no rDNS 0.50 BSF_SC5_MJ1963 Custom Rule MJ1963 Subject: [ovs-dev] [PATCH v3 5/7] ofp-actions: color output of flow actions for ovs-ofctl dump-flows X-BeenThere: dev@openvswitch.org X-Mailman-Version: 2.1.16 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dev-bounces@openvswitch.org Sender: "dev" Add color output for flow actions for ovs-ofctl dump-flows command utility, by inserting color markers in the functions responsible for printing those actions. Signed-off-by: Quentin Monnet --- lib/bundle.c | 13 ++-- lib/learn.c | 49 +++++++----- lib/multipath.c | 9 ++- lib/nx-match.c | 9 ++- lib/ofp-actions.c | 224 ++++++++++++++++++++++++++++++++---------------------- 5 files changed, 183 insertions(+), 121 deletions(-) diff --git a/lib/bundle.c b/lib/bundle.c index 871a724e8a67..b2de19c92963 100644 --- a/lib/bundle.c +++ b/lib/bundle.c @@ -20,6 +20,7 @@ #include #include +#include "colors.h" #include "dynamic-string.h" #include "multipath.h" #include "meta-flow.h" @@ -299,22 +300,22 @@ bundle_format(const struct ofpact_bundle *bundle, struct ds *s) action = bundle->dst.field ? "bundle_load" : "bundle"; - ds_put_format(s, "%s(%s,%"PRIu16",%s,%s,", action, fields, - bundle->basis, algorithm, "ofport"); + ds_put_format(s, "%s%s(%s%s,%"PRIu16",%s,%s,", colors.paren, action, + colors.end, fields, bundle->basis, algorithm, "ofport"); if (bundle->dst.field) { mf_format_subfield(&bundle->dst, s); - ds_put_cstr(s, ","); + ds_put_char(s, ','); } - ds_put_cstr(s, "slaves:"); + ds_put_format(s, "%sslaves:%s", colors.param, colors.end); for (i = 0; i < bundle->n_slaves; i++) { if (i) { - ds_put_cstr(s, ","); + ds_put_char(s, ','); } ofputil_format_port(bundle->slaves[i], s); } - ds_put_cstr(s, ")"); + ds_put_format(s, "%s)%s", colors.paren, colors.end); } diff --git a/lib/learn.c b/lib/learn.c index 66201d5016f0..06da25c33718 100644 --- a/lib/learn.c +++ b/lib/learn.c @@ -19,6 +19,7 @@ #include "learn.h" #include "byte-order.h" +#include "colors.h" #include "dynamic-string.h" #include "match.h" #include "meta-flow.h" @@ -415,30 +416,38 @@ learn_format(const struct ofpact_learn *learn, struct ds *s) match_init_catchall(&match); - ds_put_format(s, "learn(table=%"PRIu8, learn->table_id); + ds_put_format(s, "%slearn(%s%stable=%s%"PRIu8, + colors.learn, colors.end, colors.special, colors.end, + learn->table_id); if (learn->idle_timeout != OFP_FLOW_PERMANENT) { - ds_put_format(s, ",idle_timeout=%"PRIu16, learn->idle_timeout); + ds_put_format(s, ",%sidle_timeout=%s%"PRIu16, + colors.param, colors.end, learn->idle_timeout); } if (learn->hard_timeout != OFP_FLOW_PERMANENT) { - ds_put_format(s, ",hard_timeout=%"PRIu16, learn->hard_timeout); + ds_put_format(s, ",%shard_timeout=%s%"PRIu16, + colors.param, colors.end, learn->hard_timeout); } if (learn->fin_idle_timeout) { - ds_put_format(s, ",fin_idle_timeout=%"PRIu16, learn->fin_idle_timeout); + ds_put_format(s, ",%sfin_idle_timeout=%s%"PRIu16, + colors.param, colors.end, learn->fin_idle_timeout); } if (learn->fin_hard_timeout) { - ds_put_format(s, ",fin_hard_timeout=%"PRIu16, learn->fin_hard_timeout); + ds_put_format(s, "%s,fin_hard_timeout=%s%"PRIu16, + colors.param, colors.end, learn->fin_hard_timeout); } if (learn->priority != OFP_DEFAULT_PRIORITY) { - ds_put_format(s, ",priority=%"PRIu16, learn->priority); + ds_put_format(s, "%s,priority=%s%"PRIu16, + colors.special, colors.end, learn->priority); } if (learn->flags & NX_LEARN_F_SEND_FLOW_REM) { - ds_put_cstr(s, ",send_flow_rem"); + ds_put_format(s, ",%ssend_flow_rem%s", colors.value, colors.end); } if (learn->flags & NX_LEARN_F_DELETE_LEARNED) { - ds_put_cstr(s, ",delete_learned"); + ds_put_format(s, ",%sdelete_learned%s", colors.value, colors.end); } if (learn->cookie != 0) { - ds_put_format(s, ",cookie=%#"PRIx64, ntohll(learn->cookie)); + ds_put_format(s, ",%scookie=%s%#"PRIx64, + colors.param, colors.end, ntohll(learn->cookie)); } for (spec = learn->specs; spec < &learn->specs[learn->n_specs]; spec++) { @@ -454,43 +463,47 @@ learn_format(const struct ofpact_learn *learn, struct ds *s) bitwise_copy(&spec->src_imm, sizeof spec->src_imm, 0, &value, spec->dst.field->n_bytes, 0, spec->dst.field->n_bits); - ds_put_format(s, "%s=", spec->dst.field->name); + ds_put_format(s, "%s%s=%s", colors.param, + spec->dst.field->name, colors.end); mf_format(spec->dst.field, &value, NULL, s); } else { + ds_put_format(s, "%s", colors.param); mf_format_subfield(&spec->dst, s); - ds_put_char(s, '='); + ds_put_format(s, "=%s", colors.end); mf_format_subvalue(&spec->src_imm, s); } break; case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH: + ds_put_format(s, "%s", colors.param); mf_format_subfield(&spec->dst, s); + ds_put_format(s, "%s", colors.end); if (spec->src.field != spec->dst.field || spec->src.ofs != spec->dst.ofs) { - ds_put_char(s, '='); + ds_put_format(s, "%s=%s", colors.param, colors.end); mf_format_subfield(&spec->src, s); } break; case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_LOAD: - ds_put_format(s, "load:"); + ds_put_format(s, "%sload:%s", colors.special, colors.end); mf_format_subvalue(&spec->src_imm, s); - ds_put_cstr(s, "->"); + ds_put_format(s, "%s->%s", colors.special, colors.end); mf_format_subfield(&spec->dst, s); break; case NX_LEARN_SRC_FIELD | NX_LEARN_DST_LOAD: - ds_put_cstr(s, "load:"); + ds_put_format(s, "%sload:%s", colors.special, colors.end); mf_format_subfield(&spec->src, s); - ds_put_cstr(s, "->"); + ds_put_format(s, "%s->%s", colors.special, colors.end); mf_format_subfield(&spec->dst, s); break; case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT: - ds_put_cstr(s, "output:"); + ds_put_format(s, "%soutput:%s", colors.special, colors.end); mf_format_subfield(&spec->src, s); break; } } - ds_put_char(s, ')'); + ds_put_format(s, "%s)%s", colors.learn, colors.end); } diff --git a/lib/multipath.c b/lib/multipath.c index 0a58c062c768..bb837ad3be80 100644 --- a/lib/multipath.c +++ b/lib/multipath.c @@ -21,6 +21,7 @@ #include #include #include +#include "colors.h" #include "dynamic-string.h" #include "nx-match.h" #include "ofp-actions.h" @@ -246,9 +247,9 @@ multipath_format(const struct ofpact_multipath *mp, struct ds *s) algorithm = ""; } - ds_put_format(s, "multipath(%s,%"PRIu16",%s,%d,%"PRIu16",", - fields, mp->basis, algorithm, mp->max_link + 1, - mp->arg); + ds_put_format(s, "%smultipath(%s%s,%"PRIu16",%s,%d,%"PRIu16",", + colors.paren, colors.end, fields, mp->basis, algorithm, + mp->max_link + 1, mp->arg); mf_format_subfield(&mp->dst, s); - ds_put_char(s, ')'); + ds_put_format(s, "%s)%s", colors.paren, colors.end); } diff --git a/lib/nx-match.c b/lib/nx-match.c index 4999b1ac95d7..874e1fb0825f 100644 --- a/lib/nx-match.c +++ b/lib/nx-match.c @@ -21,6 +21,7 @@ #include #include "classifier.h" +#include "colors.h" #include "dynamic-string.h" #include "hmap.h" #include "meta-flow.h" @@ -1595,9 +1596,9 @@ nxm_parse_reg_move(struct ofpact_reg_move *move, const char *s) void nxm_format_reg_move(const struct ofpact_reg_move *move, struct ds *s) { - ds_put_format(s, "move:"); + ds_put_format(s, "%smove:%s", colors.special, colors.end); mf_format_subfield(&move->src, s); - ds_put_cstr(s, "->"); + ds_put_format(s, "%s->%s", colors.special, colors.end); mf_format_subfield(&move->dst, s); } @@ -1685,14 +1686,14 @@ nxm_parse_stack_action(struct ofpact_stack *stack_action, const char *s) void nxm_format_stack_push(const struct ofpact_stack *push, struct ds *s) { - ds_put_cstr(s, "push:"); + ds_put_format(s, "%spush:%s", colors.param, colors.end); mf_format_subfield(&push->subfield, s); } void nxm_format_stack_pop(const struct ofpact_stack *pop, struct ds *s) { - ds_put_cstr(s, "pop:"); + ds_put_format(s, "%spop:%s", colors.param, colors.end); mf_format_subfield(&pop->subfield, s); } diff --git a/lib/ofp-actions.c b/lib/ofp-actions.c index ae961f6cc5bb..1c2e129eb97c 100644 --- a/lib/ofp-actions.c +++ b/lib/ofp-actions.c @@ -20,6 +20,7 @@ #include "ofp-actions.h" #include "bundle.h" #include "byte-order.h" +#include "colors.h" #include "compiler.h" #include "dummy.h" #include "dynamic-string.h" @@ -560,7 +561,8 @@ static void format_OUTPUT(const struct ofpact_output *a, struct ds *s) { if (ofp_to_u16(a->port) < ofp_to_u16(OFPP_MAX)) { - ds_put_format(s, "output:%"PRIu16, a->port); + ds_put_format(s, "%soutput:%s%"PRIu16, + colors.special, colors.end, a->port); } else { ofputil_format_port(a->port, s); if (a->port == OFPP_CONTROLLER) { @@ -601,7 +603,8 @@ parse_GROUP(char *arg, struct ofpbuf *ofpacts, static void format_GROUP(const struct ofpact_group *a, struct ds *s) { - ds_put_format(s, "group:%"PRIu32, a->group_id); + ds_put_format(s, "%sgroup:%s%"PRIu32, + colors.special, colors.end, a->group_id); } /* Action structure for NXAST_CONTROLLER. @@ -871,34 +874,37 @@ format_CONTROLLER(const struct ofpact_controller *a, struct ds *s) { if (a->reason == OFPR_ACTION && !a->controller_id && !a->userdata_len && !a->pause) { - ds_put_format(s, "CONTROLLER:%"PRIu16, a->max_len); + ds_put_format(s, "%sCONTROLLER:%s%"PRIu16, + colors.special, colors.end, a->max_len); } else { enum ofp_packet_in_reason reason = a->reason; - ds_put_cstr(s, "controller("); + ds_put_format(s, "%scontroller(%s", colors.paren, colors.end); if (reason != OFPR_ACTION) { char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE]; - ds_put_format(s, "reason=%s,", + ds_put_format(s, "%sreason=%s%s,", colors.param, colors.end, ofputil_packet_in_reason_to_string( reason, reasonbuf, sizeof reasonbuf)); } if (a->max_len != UINT16_MAX) { - ds_put_format(s, "max_len=%"PRIu16",", a->max_len); + ds_put_format(s, "%smax_len=%s%"PRIu16",", + colors.param, colors.end, a->max_len); } if (a->controller_id != 0) { - ds_put_format(s, "id=%"PRIu16",", a->controller_id); + ds_put_format(s, "%sid=%s%"PRIu16",", + colors.param, colors.end, a->controller_id); } if (a->userdata_len) { - ds_put_cstr(s, "userdata="); + ds_put_format(s, "%suserdata=%s", colors.param, colors.end); format_hex_arg(s, a->userdata, a->userdata_len); ds_put_char(s, ','); } if (a->pause) { - ds_put_cstr(s, "pause,"); + ds_put_format(s, "%spause%s,", colors.value, colors.end); } ds_chomp(s, ','); - ds_put_char(s, ')'); + ds_put_format(s, "%s)%s", colors.paren, colors.end); } } @@ -971,7 +977,7 @@ parse_ENQUEUE(char *arg, struct ofpbuf *ofpacts, static void format_ENQUEUE(const struct ofpact_enqueue *a, struct ds *s) { - ds_put_format(s, "enqueue:"); + ds_put_format(s, "%senqueue:%s", colors.param, colors.end); ofputil_format_port(a->port, s); ds_put_format(s, ":%"PRIu32, a->queue); } @@ -1114,7 +1120,7 @@ parse_OUTPUT_REG(const char *arg, struct ofpbuf *ofpacts, static void format_OUTPUT_REG(const struct ofpact_output_reg *a, struct ds *s) { - ds_put_cstr(s, "output:"); + ds_put_format(s, "%soutput:%s", colors.special, colors.end); mf_format_subfield(&a->src, s); } @@ -1416,9 +1422,9 @@ parse_SET_VLAN_VID(char *arg, struct ofpbuf *ofpacts, static void format_SET_VLAN_VID(const struct ofpact_vlan_vid *a, struct ds *s) { - ds_put_format(s, "%s:%"PRIu16, + ds_put_format(s, "%s%s:%s%"PRIu16, colors.param, a->push_vlan_if_needed ? "mod_vlan_vid" : "set_vlan_vid", - a->vlan_vid); + colors.end, a->vlan_vid); } /* Set PCP actions. */ @@ -1506,9 +1512,9 @@ parse_SET_VLAN_PCP(char *arg, struct ofpbuf *ofpacts, static void format_SET_VLAN_PCP(const struct ofpact_vlan_pcp *a, struct ds *s) { - ds_put_format(s, "%s:%"PRIu8, + ds_put_format(s, "%s%s:%s%"PRIu8, colors.param, a->push_vlan_if_needed ? "mod_vlan_pcp" : "set_vlan_pcp", - a->vlan_pcp); + colors.end, a->vlan_pcp); } /* Strip VLAN actions. */ @@ -1556,9 +1562,10 @@ parse_pop_vlan(struct ofpbuf *ofpacts) static void format_STRIP_VLAN(const struct ofpact_null *a, struct ds *s) { - ds_put_cstr(s, (a->ofpact.raw == OFPAT_RAW11_POP_VLAN - ? "pop_vlan" - : "strip_vlan")); + ds_put_format(s, (a->ofpact.raw == OFPAT_RAW11_POP_VLAN + ? "%spop_vlan%s" + : "%sstrip_vlan%s"), + colors.value, colors.end); } /* Push VLAN action. */ @@ -1615,7 +1622,8 @@ static void format_PUSH_VLAN(const struct ofpact_null *a OVS_UNUSED, struct ds *s) { /* XXX 802.1AD case*/ - ds_put_format(s, "push_vlan:%#"PRIx16, ETH_TYPE_VLAN_8021Q); + ds_put_format(s, "%spush_vlan:%s%#"PRIx16, + colors.param, colors.end, ETH_TYPE_VLAN_8021Q); } /* Action structure for OFPAT10_SET_DL_SRC/DST and OFPAT11_SET_DL_SRC/DST. */ @@ -1697,13 +1705,15 @@ parse_SET_ETH_DST(char *arg, struct ofpbuf *ofpacts, static void format_SET_ETH_SRC(const struct ofpact_mac *a, struct ds *s) { - ds_put_format(s, "mod_dl_src:"ETH_ADDR_FMT, ETH_ADDR_ARGS(a->mac)); + ds_put_format(s, "%smod_dl_src:%s"ETH_ADDR_FMT, + colors.param, colors.end, ETH_ADDR_ARGS(a->mac)); } static void format_SET_ETH_DST(const struct ofpact_mac *a, struct ds *s) { - ds_put_format(s, "mod_dl_dst:"ETH_ADDR_FMT, ETH_ADDR_ARGS(a->mac)); + ds_put_format(s, "%smod_dl_dst:%s"ETH_ADDR_FMT, + colors.param, colors.end, ETH_ADDR_ARGS(a->mac)); } /* Set IPv4 address actions. */ @@ -1773,13 +1783,15 @@ parse_SET_IPV4_DST(char *arg, struct ofpbuf *ofpacts, static void format_SET_IPV4_SRC(const struct ofpact_ipv4 *a, struct ds *s) { - ds_put_format(s, "mod_nw_src:"IP_FMT, IP_ARGS(a->ipv4)); + ds_put_format(s, "%smod_nw_src:%s"IP_FMT, + colors.param, colors.end, IP_ARGS(a->ipv4)); } static void format_SET_IPV4_DST(const struct ofpact_ipv4 *a, struct ds *s) { - ds_put_format(s, "mod_nw_dst:"IP_FMT, IP_ARGS(a->ipv4)); + ds_put_format(s, "%smod_nw_dst:%s"IP_FMT, + colors.param, colors.end, IP_ARGS(a->ipv4)); } /* Set IPv4/v6 TOS actions. */ @@ -1831,7 +1843,7 @@ parse_SET_IP_DSCP(char *arg, struct ofpbuf *ofpacts, static void format_SET_IP_DSCP(const struct ofpact_dscp *a, struct ds *s) { - ds_put_format(s, "mod_nw_tos:%d", a->dscp); + ds_put_format(s, "%smod_nw_tos:%s%d", colors.param, colors.end, a->dscp); } /* Set IPv4/v6 ECN actions. */ @@ -1885,7 +1897,8 @@ parse_SET_IP_ECN(char *arg, struct ofpbuf *ofpacts, static void format_SET_IP_ECN(const struct ofpact_ecn *a, struct ds *s) { - ds_put_format(s, "mod_nw_ecn:%d", a->ecn); + ds_put_format(s, "%smod_nw_ecn:%s%d", + colors.param, colors.end, a->ecn); } /* Set IPv4/v6 TTL actions. */ @@ -1929,7 +1942,7 @@ parse_SET_IP_TTL(char *arg, struct ofpbuf *ofpacts, static void format_SET_IP_TTL(const struct ofpact_ip_ttl *a, struct ds *s) { - ds_put_format(s, "mod_nw_ttl:%d", a->ttl); + ds_put_format(s, "%smod_nw_ttl:%s%d", colors.param, colors.end, a->ttl); } /* Set TCP/UDP/SCTP port actions. */ @@ -2012,13 +2025,13 @@ parse_SET_L4_DST_PORT(char *arg, struct ofpbuf *ofpacts, static void format_SET_L4_SRC_PORT(const struct ofpact_l4_port *a, struct ds *s) { - ds_put_format(s, "mod_tp_src:%d", a->port); + ds_put_format(s, "%smod_tp_src:%s%d", colors.param, colors.end, a->port); } static void format_SET_L4_DST_PORT(const struct ofpact_l4_port *a, struct ds *s) { - ds_put_format(s, "mod_tp_dst:%d", a->port); + ds_put_format(s, "%smod_tp_dst:%s%d", colors.param, colors.end, a->port); } /* Action structure for OFPAT_COPY_FIELD. */ @@ -2901,15 +2914,18 @@ format_SET_FIELD(const struct ofpact_set_field *a, struct ds *s) dst.ofs = dst.n_bits = 0; while (next_load_segment(a, &dst, &value)) { - ds_put_format(s, "load:%#"PRIx64"->", value); + ds_put_format(s, "%sload:%s%#"PRIx64"%s->%s", + colors.special, colors.end, value, + colors.special, colors.end); mf_format_subfield(&dst, s); ds_put_char(s, ','); } ds_chomp(s, ','); } else { - ds_put_cstr(s, "set_field:"); + ds_put_format(s, "%sset_field:%s", colors.special, colors.end); mf_format(a->field, &a->value, &a->mask, s); - ds_put_format(s, "->%s", a->field->name); + ds_put_format(s, "%s->%s%s", + colors.special, colors.end, a->field->name); } } @@ -3194,16 +3210,16 @@ format_DEC_TTL(const struct ofpact_cnt_ids *a, struct ds *s) { size_t i; - ds_put_cstr(s, "dec_ttl"); + ds_put_format(s, "%sdec_ttl%s", colors.paren, colors.end); if (a->ofpact.raw == NXAST_RAW_DEC_TTL_CNT_IDS) { - ds_put_cstr(s, "("); + ds_put_format(s, "%s(%s", colors.paren, colors.end); for (i = 0; i < a->n_controllers; i++) { if (i) { ds_put_cstr(s, ","); } ds_put_format(s, "%"PRIu16, a->cnt_ids[i]); } - ds_put_cstr(s, ")"); + ds_put_format(s, "%s)%s", colors.paren, colors.end); } } @@ -3247,7 +3263,9 @@ parse_SET_MPLS_LABEL(char *arg, struct ofpbuf *ofpacts, static void format_SET_MPLS_LABEL(const struct ofpact_mpls_label *a, struct ds *s) { - ds_put_format(s, "set_mpls_label(%"PRIu32")", ntohl(a->label)); + ds_put_format(s, "%sset_mpls_label(%s%"PRIu32"%s)%s", + colors.paren, colors.end, ntohl(a->label), + colors.paren, colors.end); } /* Set MPLS TC actions. */ @@ -3289,7 +3307,9 @@ parse_SET_MPLS_TC(char *arg, struct ofpbuf *ofpacts, static void format_SET_MPLS_TC(const struct ofpact_mpls_tc *a, struct ds *s) { - ds_put_format(s, "set_mpls_ttl(%"PRIu8")", a->tc); + ds_put_format(s, "%sset_mpls_ttl(%s%"PRIu8"%s)%s", + colors.paren, colors.end, a->tc, + colors.paren, colors.end); } /* Set MPLS TTL actions. */ @@ -3332,7 +3352,9 @@ parse_SET_MPLS_TTL(char *arg, struct ofpbuf *ofpacts, static void format_SET_MPLS_TTL(const struct ofpact_mpls_ttl *a, struct ds *s) { - ds_put_format(s, "set_mpls_ttl(%"PRIu8")", a->ttl); + ds_put_format(s, "%sset_mpls_ttl(%s%"PRIu8"%s)%s", + colors.paren, colors.end, a->ttl, + colors.paren, colors.end); } /* Decrement MPLS TTL actions. */ @@ -3362,7 +3384,7 @@ parse_DEC_MPLS_TTL(char *arg OVS_UNUSED, struct ofpbuf *ofpacts, static void format_DEC_MPLS_TTL(const struct ofpact_null *a OVS_UNUSED, struct ds *s) { - ds_put_cstr(s, "dec_mpls_ttl"); + ds_put_format(s, "%sdec_mpls_ttl%s", colors.value, colors.end); } /* Push MPLS label action. */ @@ -3407,7 +3429,8 @@ parse_PUSH_MPLS(char *arg, struct ofpbuf *ofpacts, static void format_PUSH_MPLS(const struct ofpact_push_mpls *a, struct ds *s) { - ds_put_format(s, "push_mpls:0x%04"PRIx16, ntohs(a->ethertype)); + ds_put_format(s, "%spush_mpls:%s0x%04"PRIx16, + colors.param, colors.end, ntohs(a->ethertype)); } /* Pop MPLS label action. */ @@ -3445,7 +3468,8 @@ parse_POP_MPLS(char *arg, struct ofpbuf *ofpacts, static void format_POP_MPLS(const struct ofpact_pop_mpls *a, struct ds *s) { - ds_put_format(s, "pop_mpls:0x%04"PRIx16, ntohs(a->ethertype)); + ds_put_format(s, "%spop_mpls:%s0x%04"PRIx16, + colors.param, colors.end, ntohs(a->ethertype)); } /* Set tunnel ID actions. */ @@ -3511,10 +3535,10 @@ parse_SET_TUNNEL(char *arg, struct ofpbuf *ofpacts, static void format_SET_TUNNEL(const struct ofpact_tunnel *a, struct ds *s) { - ds_put_format(s, "set_tunnel%s:%#"PRIx64, + ds_put_format(s, "%sset_tunnel%s:%s%#"PRIx64, colors.param, (a->tun_id > UINT32_MAX || a->ofpact.raw == NXAST_RAW_SET_TUNNEL64 ? "64" : ""), - a->tun_id); + colors.end, a->tun_id); } /* Set queue action. */ @@ -3545,7 +3569,8 @@ parse_SET_QUEUE(char *arg, struct ofpbuf *ofpacts, static void format_SET_QUEUE(const struct ofpact_queue *a, struct ds *s) { - ds_put_format(s, "set_queue:%"PRIu32, a->queue_id); + ds_put_format(s, "%sset_queue:%s%"PRIu32, + colors.param, colors.end, a->queue_id); } /* Pop queue action. */ @@ -3575,7 +3600,7 @@ parse_POP_QUEUE(const char *arg OVS_UNUSED, struct ofpbuf *ofpacts, static void format_POP_QUEUE(const struct ofpact_null *a OVS_UNUSED, struct ds *s) { - ds_put_cstr(s, "pop_queue"); + ds_put_format(s, "%spop_queue%s", colors.value, colors.end); } /* Action structure for NXAST_FIN_TIMEOUT. @@ -3664,15 +3689,17 @@ parse_FIN_TIMEOUT(char *arg, struct ofpbuf *ofpacts, static void format_FIN_TIMEOUT(const struct ofpact_fin_timeout *a, struct ds *s) { - ds_put_cstr(s, "fin_timeout("); + ds_put_format(s, "%sfin_timeout(%s", colors.paren, colors.end); if (a->fin_idle_timeout) { - ds_put_format(s, "idle_timeout=%"PRIu16",", a->fin_idle_timeout); + ds_put_format(s, "%sidle_timeout=%s%"PRIu16",", + colors.param, colors.end, a->fin_idle_timeout); } if (a->fin_hard_timeout) { - ds_put_format(s, "hard_timeout=%"PRIu16",", a->fin_hard_timeout); + ds_put_format(s, "%shard_timeout=%s%"PRIu16",", + colors.param, colors.end, a->fin_hard_timeout); } ds_chomp(s, ','); - ds_put_char(s, ')'); + ds_put_format(s, "%s)%s", colors.paren, colors.end); } /* Action structures for NXAST_RESUBMIT and NXAST_RESUBMIT_TABLE. @@ -3823,10 +3850,10 @@ static void format_RESUBMIT(const struct ofpact_resubmit *a, struct ds *s) { if (a->in_port != OFPP_IN_PORT && a->table_id == 255) { - ds_put_cstr(s, "resubmit:"); + ds_put_format(s, "%sresubmit:%s", colors.special, colors.end); ofputil_format_port(a->in_port, s); } else { - ds_put_format(s, "resubmit("); + ds_put_format(s, "%sresubmit(%s", colors.paren, colors.end); if (a->in_port != OFPP_IN_PORT) { ofputil_format_port(a->in_port, s); } @@ -3834,7 +3861,7 @@ format_RESUBMIT(const struct ofpact_resubmit *a, struct ds *s) if (a->table_id != 255) { ds_put_format(s, "%"PRIu8, a->table_id); } - ds_put_char(s, ')'); + ds_put_format(s, "%s)%s", colors.paren, colors.end); } } @@ -4342,8 +4369,10 @@ encode_CONJUNCTION(const struct ofpact_conjunction *oc, static void format_CONJUNCTION(const struct ofpact_conjunction *oc, struct ds *s) { - ds_put_format(s, "conjunction(%"PRIu32",%"PRIu8"/%"PRIu8")", - oc->id, oc->clause + 1, oc->n_clauses); + ds_put_format(s, "%sconjunction(%s%"PRIu32",%"PRIu8"/%"PRIu8"%s)%s", + colors.paren, colors.end, + oc->id, oc->clause + 1, oc->n_clauses, + colors.paren, colors.end); } static char * OVS_WARN_UNUSED_RESULT @@ -4565,7 +4594,7 @@ parse_NOTE(const char *arg, struct ofpbuf *ofpacts, static void format_NOTE(const struct ofpact_note *a, struct ds *s) { - ds_put_cstr(s, "note:"); + ds_put_format(s, "%snote:%s", colors.param, colors.end); format_hex_arg(s, a->data, a->length); } @@ -4596,7 +4625,7 @@ parse_EXIT(char *arg OVS_UNUSED, struct ofpbuf *ofpacts, static void format_EXIT(const struct ofpact_null *a OVS_UNUSED, struct ds *s) { - ds_put_cstr(s, "exit"); + ds_put_format(s, "%sexit%s", colors.special, colors.end); } /* Unroll xlate action. */ @@ -4620,8 +4649,12 @@ parse_UNROLL_XLATE(char *arg OVS_UNUSED, struct ofpbuf *ofpacts OVS_UNUSED, static void format_UNROLL_XLATE(const struct ofpact_unroll_xlate *a, struct ds *s) { - ds_put_format(s, "unroll_xlate(table=%"PRIu8", cookie=%"PRIu64")", - a->rule_table_id, ntohll(a->rule_cookie)); + ds_put_format(s, "%sunroll_xlate(%s%stable=%s%"PRIu8 + ", %scookie=%s%"PRIu64"%s)%s", + colors.paren, colors.end, + colors.special, colors.end, a->rule_table_id, + colors.param, colors.end, ntohll(a->rule_cookie), + colors.paren, colors.end); } /* Action structure for NXAST_SAMPLE. @@ -4725,10 +4758,16 @@ parse_SAMPLE(char *arg, struct ofpbuf *ofpacts, static void format_SAMPLE(const struct ofpact_sample *a, struct ds *s) { - ds_put_format(s, "sample(probability=%"PRIu16",collector_set_id=%"PRIu32 - ",obs_domain_id=%"PRIu32",obs_point_id=%"PRIu32")", - a->probability, a->collector_set_id, - a->obs_domain_id, a->obs_point_id); + ds_put_format(s, "%ssample(%s%sprobability=%s%"PRIu16 + ",%scollector_set_id=%s%"PRIu32 + ",%sobs_domain_id=%s%"PRIu32 + ",%sobs_point_id=%s%"PRIu32"%s)%s", + colors.paren, colors.end, + colors.param, colors.end, a->probability, + colors.param, colors.end, a->collector_set_id, + colors.param, colors.end, a->obs_domain_id, + colors.param, colors.end, a->obs_point_id, + colors.paren, colors.end); } /* debug_recirc instruction. */ @@ -4771,7 +4810,7 @@ parse_DEBUG_RECIRC(char *arg OVS_UNUSED, struct ofpbuf *ofpacts, static void format_DEBUG_RECIRC(const struct ofpact_null *a OVS_UNUSED, struct ds *s) { - ds_put_cstr(s, "debug_recirc"); + ds_put_format(s, "%sdebug_recirc%s", colors.value, colors.end); } /* Action structure for NXAST_CT. @@ -5086,9 +5125,9 @@ static void format_alg(int port, struct ds *s) { if (port == IPPORT_FTP) { - ds_put_format(s, "alg=ftp,"); + ds_put_format(s, "%salg=%sftp,", colors.param, colors.end); } else if (port) { - ds_put_format(s, "alg=%d,", port); + ds_put_format(s, "%salg=%s%d,", colors.param, colors.end, port); } } @@ -5097,19 +5136,21 @@ static void format_NAT(const struct ofpact_nat *a, struct ds *ds); static void format_CT(const struct ofpact_conntrack *a, struct ds *s) { - ds_put_cstr(s, "ct("); + ds_put_format(s, "%sct(%s", colors.paren, colors.end); if (a->flags & NX_CT_F_COMMIT) { - ds_put_cstr(s, "commit,"); + ds_put_format(s, "%scommit%s,", colors.value, colors.end); } if (a->recirc_table != NX_CT_RECIRC_NONE) { - ds_put_format(s, "table=%"PRIu8",", a->recirc_table); + ds_put_format(s, "%stable=%s%"PRIu8",", + colors.special, colors.end, a->recirc_table); } if (a->zone_src.field) { - ds_put_format(s, "zone="); + ds_put_format(s, "%szone=%s", colors.param, colors.end); mf_format_subfield(&a->zone_src, s); ds_put_char(s, ','); } else if (a->zone_imm) { - ds_put_format(s, "zone=%"PRIu16",", a->zone_imm); + ds_put_format(s, "%szone=%s%"PRIu16",", + colors.param, colors.end, a->zone_imm); } /* If the first action is a NAT action, format it outside of the 'exec' * envelope. */ @@ -5122,13 +5163,13 @@ format_CT(const struct ofpact_conntrack *a, struct ds *s) action = ofpact_next(action); } if (actions_len) { - ds_put_cstr(s, "exec("); + ds_put_format(s, "%sexec(%s", colors.paren, colors.end); ofpacts_format(action, actions_len, s); - ds_put_cstr(s, "),"); + ds_put_format(s, "%s),%s", colors.paren, colors.end); } format_alg(a->alg, s); ds_chomp(s, ','); - ds_put_char(s, ')'); + ds_put_format(s, "%s)%s", colors.paren, colors.end); } /* NAT action. */ @@ -5304,14 +5345,15 @@ decode_NXAST_RAW_NAT(const struct nx_action_nat *nan, static void format_NAT(const struct ofpact_nat *a, struct ds *ds) { - ds_put_cstr(ds, "nat"); + ds_put_format(ds, "%snat%s", colors.paren, colors.end); if (a->flags & (NX_NAT_F_SRC | NX_NAT_F_DST)) { - ds_put_char(ds, '('); - ds_put_cstr(ds, a->flags & NX_NAT_F_SRC ? "src" : "dst"); + ds_put_format(ds, "%s(%s", colors.paren, colors.end); + ds_put_format(ds, a->flags & NX_NAT_F_SRC ? "%ssrc%s" : "%sdst%s", + colors.param, colors.end); if (a->range_af != AF_UNSPEC) { - ds_put_cstr(ds, "="); + ds_put_format(ds, "%s=%s", colors.param, colors.end); if (a->range_af == AF_INET) { ds_put_format(ds, IP_FMT, IP_ARGS(a->range.addr.ipv4.min)); @@ -5345,17 +5387,18 @@ format_NAT(const struct ofpact_nat *a, struct ds *ds) ds_put_char(ds, ','); if (a->flags & NX_NAT_F_PERSISTENT) { - ds_put_cstr(ds, "persistent,"); + ds_put_format(ds, "%spersistent%s,", + colors.value, colors.end); } if (a->flags & NX_NAT_F_PROTO_HASH) { - ds_put_cstr(ds, "hash,"); + ds_put_format(ds, "%shash%s,", colors.value, colors.end); } if (a->flags & NX_NAT_F_PROTO_RANDOM) { - ds_put_cstr(ds, "random,"); + ds_put_format(ds, "%srandom%s,", colors.value, colors.end); } } ds_chomp(ds, ','); - ds_put_char(ds, ')'); + ds_put_format(ds, "%s)%s", colors.paren, colors.end); } } @@ -5493,7 +5536,8 @@ parse_METER(char *arg, struct ofpbuf *ofpacts, static void format_METER(const struct ofpact_meter *a, struct ds *s) { - ds_put_format(s, "meter:%"PRIu32, a->meter_id); + ds_put_format(s, "%smeter:%s%"PRIu32, + colors.param, colors.end, a->meter_id); } /* Clear-Actions instruction. */ @@ -5519,7 +5563,7 @@ parse_CLEAR_ACTIONS(char *arg OVS_UNUSED, struct ofpbuf *ofpacts, static void format_CLEAR_ACTIONS(const struct ofpact_null *a OVS_UNUSED, struct ds *s) { - ds_put_cstr(s, "clear_actions"); + ds_put_format(s, "%sclear_actions%s", colors.value, colors.end); } /* Write-Actions instruction. */ @@ -5574,9 +5618,9 @@ parse_WRITE_ACTIONS(char *arg, struct ofpbuf *ofpacts, static void format_WRITE_ACTIONS(const struct ofpact_nest *a, struct ds *s) { - ds_put_cstr(s, "write_actions("); + ds_put_format(s, "%swrite_actions(%s", colors.paren, colors.end); ofpacts_format(a->actions, ofpact_nest_get_action_len(a), s); - ds_put_char(s, ')'); + ds_put_format(s, "%s)%s", colors.paren, colors.end); } /* Action structure for NXAST_WRITE_METADATA. @@ -5658,7 +5702,8 @@ parse_WRITE_METADATA(char *arg, struct ofpbuf *ofpacts, static void format_WRITE_METADATA(const struct ofpact_metadata *a, struct ds *s) { - ds_put_format(s, "write_metadata:%#"PRIx64, ntohll(a->metadata)); + ds_put_format(s, "%swrite_metadata:%s%#"PRIx64, + colors.param, colors.end, ntohll(a->metadata)); if (a->mask != OVS_BE64_MAX) { ds_put_format(s, "/%#"PRIx64, ntohll(a->mask)); } @@ -5700,7 +5745,8 @@ parse_GOTO_TABLE(char *arg, struct ofpbuf *ofpacts, static void format_GOTO_TABLE(const struct ofpact_goto_table *a, struct ds *s) { - ds_put_format(s, "goto_table:%"PRIu8, a->table_id); + ds_put_format(s, "%sgoto_table:%s%"PRIu8, + colors.param, colors.end, a->table_id); } static void @@ -7357,13 +7403,13 @@ ofpacts_format(const struct ofpact *ofpacts, size_t ofpacts_len, struct ds *string) { if (!ofpacts_len) { - ds_put_cstr(string, "drop"); + ds_put_format(string, "%sdrop%s", colors.drop, colors.end); } else { const struct ofpact *a; OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) { if (a != ofpacts) { - ds_put_cstr(string, ","); + ds_put_char(string, ','); } /* XXX write-actions */