From patchwork Thu Mar 29 22:12:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roman Mashak X-Patchwork-Id: 893047 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=mojatatu.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=mojatatu-com.20150623.gappssmtp.com header.i=@mojatatu-com.20150623.gappssmtp.com header.b="CTvIVUHs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40BzWy41Nwz9s24 for ; Fri, 30 Mar 2018 09:12:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752704AbeC2WMo (ORCPT ); Thu, 29 Mar 2018 18:12:44 -0400 Received: from mail-io0-f194.google.com ([209.85.223.194]:37380 "EHLO mail-io0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751209AbeC2WMm (ORCPT ); Thu, 29 Mar 2018 18:12:42 -0400 Received: by mail-io0-f194.google.com with SMTP id y128so9340224iod.4 for ; Thu, 29 Mar 2018 15:12:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=mojatatu-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=vAVjcXt8hAWe5fZQ+IMA+MARbqzllqmAL300mAysk7U=; b=CTvIVUHsTeCFyVzYofZb+IO/7d1SNDaBCkVeNV0mGaBsNkt6MW/EkoX3ZR1N2Nholn EpodUwHmbgvOHVuR61w0rkv5nyUWAVwqVHJ8CjPqqVLOdicAKFXdgonG5+gKXE9uidtO 7PgEv/zQEBaVOPq64EJh5wsBJlIEmPJ9BVHLrQOZ3sJY5sg0Qz06INhvx4Goq20qFZYb F+2UMDp3mB/xawCv18awr1A2+35rOTmPQQD2H0aV1WMDDX5QKCNF8EQfg/k9b/PbWc69 g4iwtOzmRA9+u7Xdf135AeRqUMFU4SD/QHYCebsuwpZiHdJKUX7TdBx6rqVR8kf22iTv pMPA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=vAVjcXt8hAWe5fZQ+IMA+MARbqzllqmAL300mAysk7U=; b=FFwe1gjqxvKR2t3oCTcYd9zkpPtnLPq3FUV+1XmM1hfKNygaPW2CcnRTB7AqY+cT6W 37PH0T7uLHCCTBPwMMS5rhUwwwQ36tZpG3qOPG591K6EzI+akL5uKGSCLdvxIxop8+vJ 90jUuRNkrylKpW6uPIQMtt6QT5MJpFEmqqjOinMEUrWP6TlLVqIyO1hVOxPT8vq30cHY HhSXE0xSBMVra3ll5K+8S2YqJYnC6GJ1cw4k7ORZAHbLGp6Jh75TstzabJNjx7Z+dC7J oiuOyoQsSamjhdvxL6/0rKQDtmbBDGVwunh5CpLaDpRDMgUl6CPjgTqSs51bn4HVXJZX p/iw== X-Gm-Message-State: AElRT7GLM0htynk4HYpRDJ306HrxVvMRbyTrOwUvuRv2wd/UA44BQSIa G/x8BNNP4KrM98p008L+eaLV/w== X-Google-Smtp-Source: AG47ELtuFGUhDi1mNYyFebJ5iZW9uIV6YuWjYWrKI9zuCKcbvJLUe665Z9WBCpctoe9SBGCD9pgDPQ== X-Received: by 10.107.135.82 with SMTP id j79mr50523587iod.14.1522361561383; Thu, 29 Mar 2018 15:12:41 -0700 (PDT) Received: from mojatatu.com ([64.26.149.125]) by smtp.gmail.com with ESMTPSA id s142-v6sm1690666itb.4.2018.03.29.15.12.40 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 29 Mar 2018 15:12:40 -0700 (PDT) From: Roman Mashak To: dsahern@gmail.com Cc: stephen@networkplumber.org, netdev@vger.kernel.org, kernel@mojatatu.com, jhs@mojatatu.com, xiyou.wangcong@gmail.com, jiri@resnulli.us, Roman Mashak Subject: [PATCH iproute2-next 1/1] tc: add online mode Date: Thu, 29 Mar 2018 18:12:35 -0400 Message-Id: <1522361555-1913-1-git-send-email-mrv@mojatatu.com> X-Mailer: git-send-email 2.7.4 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add initial support for oneline mode in tc; actions, filters and qdiscs will be gradually updated in the follow-up patches. Signed-off-by: Roman Mashak --- man/man8/tc.8 | 15 ++++++++++++++- tc/tc.c | 8 +++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/man/man8/tc.8 b/man/man8/tc.8 index 3dc30ee489e5..840880fbdba6 100644 --- a/man/man8/tc.8 +++ b/man/man8/tc.8 @@ -95,7 +95,8 @@ tc \- show / manipulate traffic control settings \fB[ \fB-n\fR[\fIetns\fR] name \fB] \fR| \fB[ \fB-nm \fR| \fB-nam\fR[\fIes\fR] \fB] \fR| \fB[ \fR{ \fB-cf \fR| \fB-c\fR[\fIonf\fR] \fR} \fB[ filename ] \fB] \fR -\fB[ -t\fR[imestamp\fR] \fB\] \fR| \fB[ -t\fR[short\fR] \fB]\fR } +\fB[ -t\fR[imestamp\fR] \fB\] \fR| \fB[ -t\fR[short\fR] \fR| \fB[ +-o\fR[neline\fR] \fB]\fR } .ti 8 .IR FORMAT " := {" @@ -649,6 +650,18 @@ don't terminate tc on errors in batch mode. If there were any errors during execution of the commands, the application return code will be non zero. .TP +.BR "\-o" , " \-oneline" +output each record on a single line, replacing line feeds +with the +.B '\e' +character. This is convenient when you want to count records +with +.BR wc (1) +or to +.BR grep (1) +the output. + +.TP .BR "\-n" , " \-net" , " \-netns " switches .B tc diff --git a/tc/tc.c b/tc/tc.c index a31f075d1ffe..68475c156057 100644 --- a/tc/tc.c +++ b/tc/tc.c @@ -42,6 +42,8 @@ int force; bool use_names; int json; int color; +int oneline; +const char *_SL_; static char *conf_file; @@ -191,7 +193,7 @@ static void usage(void) "where OBJECT := { qdisc | class | filter | action | monitor | exec }\n" " OPTIONS := { -s[tatistics] | -d[etails] | -r[aw] | -b[atch] [filename] | -n[etns] name |\n" " -nm | -nam[es] | { -cf | -conf } path } |\n" - " -j[son] -p[retty] -c[olor]\n"); + " -o[neline] -j[son] -p[retty] -c[olor]\n"); } static int do_cmd(int argc, char **argv, void *buf, size_t buflen) @@ -487,6 +489,8 @@ int main(int argc, char **argv) ++timestamp_short; } else if (matches(argv[1], "-json") == 0) { ++json; + } else if (matches(argv[1], "-oneline") == 0) { + ++oneline; } else { fprintf(stderr, "Option \"%s\" is unknown, try \"tc -help\".\n", argv[1]); return -1; @@ -494,6 +498,8 @@ int main(int argc, char **argv) argc--; argv++; } + _SL_ = oneline ? "\\" : "\n"; + if (color & !json) enable_color();