From patchwork Wed Nov 8 21:09:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Taht X-Patchwork-Id: 835997 X-Patchwork-Delegate: davem@davemloft.net 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=gmail.com header.i=@gmail.com header.b="qvZYx5u4"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yXJrz11C7z9s0Z for ; Thu, 9 Nov 2017 08:12:03 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753231AbdKHVMB (ORCPT ); Wed, 8 Nov 2017 16:12:01 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:54427 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753202AbdKHVKL (ORCPT ); Wed, 8 Nov 2017 16:10:11 -0500 Received: by mail-pf0-f194.google.com with SMTP id n89so2620670pfk.11 for ; Wed, 08 Nov 2017 13:10:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=H8USETst+KqaaFCQOYqfQsRb5FIjeJ6csJqygXEpAIE=; b=qvZYx5u4/qgnkDqtVqatNNuqAIN6nUz4H7hOpN0PokuLZj2KXtWzm2OLq/+pabD8Iu xpI+xrrPtpLGzClBmJnSq0Cw5pqD5jarRr/C+3vDfj4k3LVRXg+3D0rPpH2jfTVXk95Y SWz67ORItFqwN01oPRyr/p2zrMSSgdLawXmk80R2vDT4bBJuro8Rz4TGQx5E+PXtP6Q0 9Np1yI54wzxI2hcyl6aHNsNFoVTeYIAMrIjxaklLvILxS6tDsYHTv6p4WuhpP47Vy0yF CfDK9QEZn4WqPI37aW57GBm7rThURJYx2EUaEPzbBLiz7qXRuQn4IRyQ3FLV1Up6Iss0 4hkg== 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=H8USETst+KqaaFCQOYqfQsRb5FIjeJ6csJqygXEpAIE=; b=NuO025E33T7oGeESpOeYwS1bf2WtGF7gV/nceh4dGTsvU8WS6fBHWIkLxNK+cqMT95 s+SoRe82PRH1Hd/lPUi8zq0j0fpmW+vs9EYNVLvhcezR79ocRurROQkwbipZPjMtuxMr oU8Tj1VbDP40EgTiuNBcl3sBBRR/xbuVNz7zc7GMJgWvAvH0+/H//G3MOSnOYBZmeStn 8w9BU8POO8JtNZU0JhJoexOReoF2yvXPIU7LZYVsdzYsWq3tLCzhjvAOE68Blk1Wypob xTqhNnVA6LW2HdAvZLcXt/hGPwSO+UFdc57OpzcYjIeONQ4xC1Z/4wOBea/93pn48ZQs J+eA== X-Gm-Message-State: AJaThX6FQ3WfrUY5z4BDsv3r3Vd7OJoJUwS3eT1QRBat6FoSMAkrENOU shp2CoiHyEyAZFgEPNh9a0EJVw== X-Google-Smtp-Source: ABhQp+Tv/a+zxGqam5y+aCWXvMrYVEF/XOWtv/v8To0T1ZFhhF1aruV7cp1Q5CnJZLYYIkRb330Pug== X-Received: by 10.159.234.10 with SMTP id be10mr1624553plb.386.1510175410808; Wed, 08 Nov 2017 13:10:10 -0800 (PST) Received: from nemesis.lab.teklibre.com ([2603:3024:1536:86f0:2e0:4cff:fec1:1206]) by smtp.gmail.com with ESMTPSA id s88sm10395079pfe.36.2017.11.08.13.10.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 08 Nov 2017 13:10:09 -0800 (PST) From: Dave Taht To: netdev@vger.kernel.org Cc: stephen@networkplumber.org, Dave Taht Subject: [PATCH v2 net-next 2/3] netem: add uapi to express delay and jitter in nanoseconds Date: Wed, 8 Nov 2017 13:09:58 -0800 Message-Id: <1510175399-7404-3-git-send-email-dave.taht@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510175399-7404-1-git-send-email-dave.taht@gmail.com> References: <1510175399-7404-1-git-send-email-dave.taht@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org netem userspace has long relied on a horrible /proc/net/psched hack to translate the current notion of "ticks" to nanoseconds. Expressing latency and jitter instead, in well defined nanoseconds, increases the dynamic range of emulated delays and jitter in netem. It will also ease a transition where reducing a tick to nsec equivalence would constrain the max delay in prior versions of netem to only 4.3 seconds. Signed-off-by: Dave Taht Reviewed-by: Eric Dumazet --- include/uapi/linux/pkt_sched.h | 2 ++ net/sched/sch_netem.c | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h index 6a2c5ea..8fe6d18 100644 --- a/include/uapi/linux/pkt_sched.h +++ b/include/uapi/linux/pkt_sched.h @@ -537,6 +537,8 @@ enum { TCA_NETEM_ECN, TCA_NETEM_RATE64, TCA_NETEM_PAD, + TCA_NETEM_LATENCY64, + TCA_NETEM_JITTER64, __TCA_NETEM_MAX, }; diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c index 5559ad1..ef63ae4 100644 --- a/net/sched/sch_netem.c +++ b/net/sched/sch_netem.c @@ -819,6 +819,8 @@ static const struct nla_policy netem_policy[TCA_NETEM_MAX + 1] = { [TCA_NETEM_LOSS] = { .type = NLA_NESTED }, [TCA_NETEM_ECN] = { .type = NLA_U32 }, [TCA_NETEM_RATE64] = { .type = NLA_U64 }, + [TCA_NETEM_LATENCY64] = { .type = NLA_S64 }, + [TCA_NETEM_JITTER64] = { .type = NLA_S64 }, }; static int parse_attr(struct nlattr *tb[], int maxtype, struct nlattr *nla, @@ -916,6 +918,12 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt) q->rate = max_t(u64, q->rate, nla_get_u64(tb[TCA_NETEM_RATE64])); + if (tb[TCA_NETEM_LATENCY64]) + q->latency = nla_get_s64(tb[TCA_NETEM_LATENCY64]); + + if (tb[TCA_NETEM_JITTER64]) + q->jitter = nla_get_s64(tb[TCA_NETEM_JITTER64]); + if (tb[TCA_NETEM_ECN]) q->ecn = nla_get_u32(tb[TCA_NETEM_ECN]); @@ -1020,6 +1028,12 @@ static int netem_dump(struct Qdisc *sch, struct sk_buff *skb) if (nla_put(skb, TCA_OPTIONS, sizeof(qopt), &qopt)) goto nla_put_failure; + if (nla_put(skb, TCA_NETEM_LATENCY64, sizeof(q->latency), &q->latency)) + goto nla_put_failure; + + if (nla_put(skb, TCA_NETEM_JITTER64, sizeof(q->jitter), &q->jitter)) + goto nla_put_failure; + cor.delay_corr = q->delay_cor.rho; cor.loss_corr = q->loss_cor.rho; cor.dup_corr = q->dup_cor.rho;