From patchwork Fri Jan 12 15:49:23 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jiri Pirko X-Patchwork-Id: 860024 X-Patchwork-Delegate: dsahern@gmail.com Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (2048-bit key; unprotected) header.d=resnulli-us.20150623.gappssmtp.com header.i=@resnulli-us.20150623.gappssmtp.com header.b="xNyPHEaO"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zJ6cz0cKVz9t3B for ; Sat, 13 Jan 2018 02:49:39 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S964809AbeALPtg (ORCPT ); Fri, 12 Jan 2018 10:49:36 -0500 Received: from mail-wr0-f194.google.com ([209.85.128.194]:41482 "EHLO mail-wr0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933998AbeALPt1 (ORCPT ); Fri, 12 Jan 2018 10:49:27 -0500 Received: by mail-wr0-f194.google.com with SMTP id o7so5678833wro.8 for ; Fri, 12 Jan 2018 07:49:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=resnulli-us.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=NtofO55GJAEhLySDiefcDg1oJ+UxEa9LLuQkE4xI3d4=; b=xNyPHEaO915HHaQCNVxV8nBRzm2Kg8E5q0EB0+INFtjiMyi4OmMSecl43/wbTj5uEX c7dYsFj2IqP0Zg3FBttgeHtMefFBZI3VZN1grCj4fk8f7LCMNb/8PkknvY7asOngSRvG 5L4G8okHHkXSxmf9ZVWWzncXw/IvgnFWgKNvYMfBjXYl9rSq4clOrOwu1jG/ZNQC08k8 cPOmQKg/IEGBEU9kSAi3c5yV/OdcFecPhXJbcyUBfua81otfsC8jTN8ItiTmGeKQ0uTI JzRP8jc4VLU1DkKN0Qoxp2TcySPRww51aCwzA/qt/5PVpShnw+/3pjtmqtHNx9SDi7g0 6K9w== 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:in-reply-to :references; bh=NtofO55GJAEhLySDiefcDg1oJ+UxEa9LLuQkE4xI3d4=; b=CbByTfcGUcKacGUN3DpH61fR4eSmKjneQLwAsayn4fOECBIHJveBnMKbiKaVAHmJd9 7OgnBPaFlF9sIKqi+NVP9p4F4nUs7ly0sYj78BzioPxryKahfNy3ASZ/JdANK6OtvezN dILJNNFFzH7Otp9DYI5uBQ+vTfTIKzJ2VapP0EDJ1NS+behhYg6qmsOdylku1wDUo+ZG ll00mE5lNBJh3j3IG9XPVQOmX/+nQCAx/AOGo90G1+W338/DrF14dicakh3O6G5cja3m tNPzJOmI6ajr+I7C/KjWETVRb9kJOFaqF4rXmxQYhszJk1NO0v1juCVv04EoOsPAWm/+ aRnA== X-Gm-Message-State: AKGB3mLSXMGbNghKnbJK2BlPxru/4Af4TOdCc7qbKsfQW6Jau60ibrOK 0uqE+nNlMQ81SWFBvqhDeqpQaoBc X-Google-Smtp-Source: ACJfBosu518TmhoKlATcU9JWIPsdDIqGjMMql8y6M0WokhzGKTktXK2myynqo5/VoxFif+TqivndCw== X-Received: by 10.223.161.92 with SMTP id r28mr22932062wrr.236.1515772165869; Fri, 12 Jan 2018 07:49:25 -0800 (PST) Received: from localhost (jirka.pirko.cz. [84.16.102.26]) by smtp.gmail.com with ESMTPSA id q7sm17842040wrf.31.2018.01.12.07.49.25 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 12 Jan 2018 07:49:25 -0800 (PST) From: Jiri Pirko To: netdev@vger.kernel.org Cc: davem@davemloft.net, jhs@mojatatu.com, xiyou.wangcong@gmail.com, mlxsw@mellanox.com, andrew@lunn.ch, vivien.didelot@savoirfairelinux.com, f.fainelli@gmail.com, michael.chan@broadcom.com, ganeshgr@chelsio.com, saeedm@mellanox.com, matanb@mellanox.com, leonro@mellanox.com, idosch@mellanox.com, jakub.kicinski@netronome.com, simon.horman@netronome.com, pieter.jansenvanvuuren@netronome.com, john.hurley@netronome.com, alexander.h.duyck@intel.com, ogerlitz@mellanox.com, john.fastabend@gmail.com, daniel@iogearbox.net, dsahern@gmail.com Subject: [patch iproute2 net-next v8 3/3] tc: implement ingress/egress block index attributes for qdiscs Date: Fri, 12 Jan 2018 16:49:23 +0100 Message-Id: <20180112154923.1853-3-jiri@resnulli.us> X-Mailer: git-send-email 2.9.5 In-Reply-To: <20180112154704.1694-1-jiri@resnulli.us> References: <20180112154704.1694-1-jiri@resnulli.us> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Jiri Pirko Signed-off-by: Jiri Pirko --- tc/tc_qdisc.c | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tc/tc_qdisc.c b/tc/tc_qdisc.c index 70279b9..8dd3e7e 100644 --- a/tc/tc_qdisc.c +++ b/tc/tc_qdisc.c @@ -31,6 +31,7 @@ static int usage(void) fprintf(stderr, " [ handle QHANDLE ] [ root | ingress | clsact | parent CLASSID ]\n"); fprintf(stderr, " [ estimator INTERVAL TIME_CONSTANT ]\n"); fprintf(stderr, " [ stab [ help | STAB_OPTIONS] ]\n"); + fprintf(stderr, " [ ingress_block BLOCK_INDEX ] [ egress_block BLOCK_INDEX ]\n"); fprintf(stderr, " [ [ QDISC_KIND ] [ help | OPTIONS ] ]\n"); fprintf(stderr, "\n"); fprintf(stderr, " tc qdisc show [ dev STRING ] [ ingress | clsact ] [ invisible ]\n"); @@ -61,6 +62,8 @@ static int tc_qdisc_modify(int cmd, unsigned int flags, int argc, char **argv) .n.nlmsg_type = cmd, .t.tcm_family = AF_UNSPEC, }; + __u32 ingress_block = 0; + __u32 egress_block = 0; while (argc > 0) { if (strcmp(*argv, "dev") == 0) { @@ -121,6 +124,14 @@ static int tc_qdisc_modify(int cmd, unsigned int flags, int argc, char **argv) if (parse_size_table(&argc, &argv, &stab.szopts) < 0) return -1; continue; + } else if (matches(*argv, "ingress_block") == 0) { + NEXT_ARG(); + if (get_u32(&ingress_block, *argv, 0) || !ingress_block) + invarg("invalid ingress block index value", *argv); + } else if (matches(*argv, "egress_block") == 0) { + NEXT_ARG(); + if (get_u32(&egress_block, *argv, 0) || !egress_block) + invarg("invalid egress block index value", *argv); } else if (matches(*argv, "help") == 0) { usage(); } else { @@ -138,6 +149,13 @@ static int tc_qdisc_modify(int cmd, unsigned int flags, int argc, char **argv) if (est.ewma_log) addattr_l(&req.n, sizeof(req), TCA_RATE, &est, sizeof(est)); + if (ingress_block) + addattr32(&req.n, sizeof(req), + TCA_INGRESS_BLOCK, ingress_block); + if (egress_block) + addattr32(&req.n, sizeof(req), + TCA_EGRESS_BLOCK, egress_block); + if (q) { if (q->parse_qopt) { if (q->parse_qopt(q, argc, argv, &req.n, d)) @@ -270,6 +288,24 @@ int print_qdisc(const struct sockaddr_nl *who, (rta_getattr_u8(tb[TCA_HW_OFFLOAD]))) print_bool(PRINT_ANY, "offloaded", "offloaded ", true); + if (tb[TCA_INGRESS_BLOCK] && + RTA_PAYLOAD(tb[TCA_INGRESS_BLOCK]) >= sizeof(__u32)) { + __u32 block = rta_getattr_u32(tb[TCA_INGRESS_BLOCK]); + + if (block) + print_uint(PRINT_ANY, "ingress_block", + "ingress_block %u ", block); + } + + if (tb[TCA_EGRESS_BLOCK] && + RTA_PAYLOAD(tb[TCA_EGRESS_BLOCK]) >= sizeof(__u32)) { + __u32 block = rta_getattr_u32(tb[TCA_EGRESS_BLOCK]); + + if (block) + print_uint(PRINT_ANY, "egress_block", + "egress_block %u ", block); + } + /* pfifo_fast is generic enough to warrant the hardcoding --JHS */ if (strcmp("pfifo_fast", RTA_DATA(tb[TCA_KIND])) == 0) q = get_qdisc_kind("prio");