From patchwork Tue Nov 7 20:59:35 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Dave Taht X-Patchwork-Id: 835465 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="UHhHzaG8"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3yWhdK24FHz9s8J for ; Wed, 8 Nov 2017 07:59:49 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933664AbdKGU7s (ORCPT ); Tue, 7 Nov 2017 15:59:48 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:46070 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933309AbdKGU7p (ORCPT ); Tue, 7 Nov 2017 15:59:45 -0500 Received: by mail-pf0-f193.google.com with SMTP id d28so395715pfe.2 for ; Tue, 07 Nov 2017 12:59:45 -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=vaNhS7uY2ypjJQKyRQqES97fiBO6vZt/sgGNx0eC5rI=; b=UHhHzaG8I1G7+/KIs40qE9Va9PzGqpOT3Yk271seoa/932D/MEqXbZoZk1lrkJ55Qu 2oJzeN8rfCZOO3eezOYUCWMBVdzrRob9QpI9UmsLSFoUpRQCxqf3kSqq2zMfm/41+7YG TD2Le6fjUa3L+/5yaBdlsOpM/AU8P0ZasyumpLmNnrJPLgaEZB+Eeu9thQFpPU5rA7O9 ClCIK4pnUuAZB2nYgg9eF3IYoJNgMZo1tiJph755mKM5PB7jmHJfGKmONy0tYGguy+5N Q0L0ax7zZF3Z7y0czucjO0OrFh0vPPGnIQXouN/wTeTpx6F6Em5tZhifNwmTM3h601+n unJA== 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=vaNhS7uY2ypjJQKyRQqES97fiBO6vZt/sgGNx0eC5rI=; b=EsCzlFviZWWLZJEffYC6j+9dCNlZFDklF6ysIcnGK8ZMWyeBQ91BvvuwpNPcHASmi/ JXDZ7AlTlem8GcfEqmlO8qIDp2XeR7np9X/JFaiEAbKp3S1djIpaFNZvVG5I3XEoSx/Y ciyL8glzp3KeiUXkzxlgCrAuvYxDSOB+2mcjz5ctRLKSFT8FrCwT5UVujUdB3IMcksQ0 UBlM3mcju4HKS8N7jn9KSFkOoiR70Y+HZcQ2xp35JcWp+JwZDL4dKN8mTNv0HMTWjXMI EhMumKjib1OVYpxYn+Fl+VnUdUsKNaAFn8ToTQ+ql2tEj+1n4Fs243wmBV0z5TCm54P8 MDsw== X-Gm-Message-State: AJaThX4D2fzj34yck9zwSquutyfmie0eYgKOpU9cCBGbb95m5iNm/mmO 6s1Z2q0XKrDSoB1bZiH3OyZ1IA== X-Google-Smtp-Source: ABhQp+TZRY/LCu/gD0OnJpdrO+cY4V7Wta+jgRBJ82oMifJ2kCyjR5tOol4rRVELC6gEBRFL2zoKAw== X-Received: by 10.159.252.7 with SMTP id n7mr17676pls.355.1510088385139; Tue, 07 Nov 2017 12:59:45 -0800 (PST) Received: from nemesis.lab.teklibre.com ([2603:3024:1536:86f0:2e0:4cff:fec1:1206]) by smtp.gmail.com with ESMTPSA id a81sm4548104pfe.32.2017.11.07.12.59.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 07 Nov 2017 12:59:44 -0800 (PST) From: Dave Taht To: netdev@vger.kernel.org Cc: Dave Taht Subject: [PATCH net-next 2/3] netem: add uapi to express delay and jitter in nanosec Date: Tue, 7 Nov 2017 12:59:35 -0800 Message-Id: <1510088376-5527-3-git-send-email-dave.taht@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1510088376-5527-1-git-send-email-dave.taht@gmail.com> References: <1510088376-5527-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 --- include/uapi/linux/pkt_sched.h | 2 ++ net/sched/sch_netem.c | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h index 5002562..20cfd64 100644 --- a/include/uapi/linux/pkt_sched.h +++ b/include/uapi/linux/pkt_sched.h @@ -536,6 +536,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 443a75d..16c4813 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,14 @@ 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 (PSCHED_TICKS2NS(qopt.latency) != q->latency) + if (nla_put(skb, TCA_NETEM_LATENCY64, sizeof(q->latency), + &q->latency)) + goto nla_put_failure; + if (PSCHED_TICKS2NS(qopt.jitter) != q->jitter) + 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;