From patchwork Mon Jun 28 12:08:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Niclas Hedam X-Patchwork-Id: 468632 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C87EC2B9F4 for ; Mon, 28 Jun 2021 12:08:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 52F0461C71 for ; Mon, 28 Jun 2021 12:08:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232912AbhF1MKv (ORCPT ); Mon, 28 Jun 2021 08:10:51 -0400 Received: from mail-db8eur05on2105.outbound.protection.outlook.com ([40.107.20.105]:62576 "EHLO EUR05-DB8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S232608AbhF1MKu (ORCPT ); Mon, 28 Jun 2021 08:10:50 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=kaeepFogTjWuLJ7dEgHD8NjX2OxZA3RvyBxjXUGBcjoisHOqUndJl9DgAkNpXmVTiGF2gOr+YMl9bRYaUXuW/srnXOMDje+E/yc14mQ0WP1hlOA/7b/wojv7SoUo4Laa0z2HSd+LLVzyyEEgtSzVo1c35zDh+osNqhFrJcow/w2nHIhUOucBbCDoh3WUcT5UI3CeHw4mNrVFecoMmvtp+9nkfSxnxPUloDF58P3AkUIPMSY6hyBn6txe5SkLzJLFWkTj8vzm/Ow/yM+A5Y1am0MmbPGV/iGn6rWMUNRY1uTi2h8wUDJG9FVLA4k0yTLZa1alN7THfwBO6i7fvltEKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QRBf8mAo8A1MIezso5hth40A5uEQenQugj/eIp4aeJY=; b=J6Vooaw259DomY7+X+R0XNgNBd0U1KV1qIl6E6FwDtEcNXe1VP4yZ6XYebaJ8nlm3QOsTb0654tz5l+yCPq0trl0ipFPA42PvCFVRiTPZJaI6ZdIv9o3HJUFBEM2VfolmjYFU6VEy8nkqhlwjA21ftUMM5sIvIKja/yv77AIL1m03vit2qSWooPStLwXu2meHAigtZe/iW02TWZ+9PCERqJF0Grr+scoue13cRWuc4uTEM61eNQLSzSb09b7sxnvv6qNa04KU/I7ZGtFmivtVg5rTa6HpJkjfjDUDXnI9Ox6/tRndTBNG3TCiyxPmQ6YRnTvPh60ZG4sRtjCOKCJ8g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=itu.dk; dmarc=pass action=none header.from=itu.dk; dkim=pass header.d=itu.dk; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=itu.dk; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QRBf8mAo8A1MIezso5hth40A5uEQenQugj/eIp4aeJY=; b=DKnw9VaxXJGwRMVdeKHj1PVKwP93As6qf47rjxlMYZfLuje3gnyz7CI3bDFXlIz6y/GzX+1IS+OfwbAj1h/5FB1PBlSp7JOUrKk7lBjWrgNLvHE11O3qcr3ViT+JSAIgdpqrzZUdLA1lye10ZN3ReLBxM2Q6X/Wqt7T6wLJpfXyoKZ0DrVUiqlz4s/ZHhPu5FHrW34qzYLDS3kNHbTLDgHSLw/v4JSCntQBE0UsBt5CQjfQCo8jfnwElmYIV5jz0h7UZ4vJZwpq6oAxJyGjlQEu9Kzp+9gFE3jovxJMt+IyTAEOYd661G26lpCQe7KUgoCEKcVl2j1RSM4hp2iDqbg== Received: from AM0PR02MB5777.eurprd02.prod.outlook.com (2603:10a6:208:180::13) by AM9PR02MB6564.eurprd02.prod.outlook.com (2603:10a6:20b:2c9::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4242.21; Mon, 28 Jun 2021 12:08:22 +0000 Received: from AM0PR02MB5777.eurprd02.prod.outlook.com ([fe80::9832:7a6d:cf4e:d511]) by AM0PR02MB5777.eurprd02.prod.outlook.com ([fe80::9832:7a6d:cf4e:d511%9]) with mapi id 15.20.4264.026; Mon, 28 Jun 2021 12:08:22 +0000 From: Niclas Hedam To: "stephen@networkplumber.org" CC: =?utf-8?q?Toke_H=C3=B8iland-J=C3=B8rgensen?= , "netdev@vger.kernel.org" Subject: [PATCH v3] net: sched: Add support for packet bursting. Thread-Topic: [PATCH v3] net: sched: Add support for packet bursting. Thread-Index: AQHXbBZKB2PwikligUmuVj3zphRt3A== Date: Mon, 28 Jun 2021 12:08:22 +0000 Message-ID: <5E66E8DB-E4E5-4658-9179-E3A5BD9E8A31@itu.dk> References: <532A8EEC-59FD-42F2-8568-4C649677B4B0@itu.dk> <877diekybt.fsf@toke.dk> In-Reply-To: <877diekybt.fsf@toke.dk> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: networkplumber.org; dkim=none (message not signed) header.d=none; networkplumber.org; dmarc=none action=none header.from=itu.dk; x-originating-ip: [130.226.132.10] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: f82d13d4-2dcf-45df-2296-08d93a2d6d08 x-ms-traffictypediagnostic: AM9PR02MB6564: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1850; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: nEW1lwvNKGr/A8xP0QU4LPrw5Z/gE6dlVyXgwRheXvOBlbKqJiE/QwkHTVxVTPXOrWCw358XCc7HheV0g9pWqEXoBHtMpJ4d3Boc6lr2tOya0n1nlOm5TU5ivq89hvgXUpnza7e2rhz1lQmK3wNgb1Gd2Fi1x7qq4IXIlHWRwz/xlMuUrBrlOFyuEl+I2xP4AITGUyEheo1du8uhC+1AHQTVVREoimMMsC7izAJJQ51PjVbAyHwJgQNPa2E36R1kjykhc3M1PedFakNxIbH9Sg4jxeogQiR03TPBp1yrLSdMzMNRE9Raasejxk+P712h9UBMljInI61wFgCsFKy/N1l1mmotSC/FNMV60zAPwJyG2VboYFr/7xGqJ3QAWh7z1+nYkQxAF3xewsgKGulL5UmIU5pfdEYNwHjWK36fI7TewJjcQU+VAddji4peAQE/qmeQyFJF34h16uuU4361qlzf/Lzo8i+XZePzOzoLypL7jFSvgDT44NwAbjFd3Vz9lhOPTJbSoQZnk+KvZD5qo31/65UWucgkcFDLxEcvAw9WRHcfAK3tr1EbdzazONR/rOsl4dzyENXzryvQN6vqcs9WMZFozQrMxI4PLGfQnBPLCLD10kE/AT1i9hZg9eFN6N3dQ2F7ytk7twObEj9UBFUVfJpNMFyDGghXqRydQWjuUlSmQoRcQMET7LjDvmYU6IFX0bpPVz9OMcYOWoWNew== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AM0PR02MB5777.eurprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(136003)(39840400004)(346002)(396003)(376002)(6506007)(6486002)(6916009)(5660300002)(6512007)(33656002)(86362001)(122000001)(478600001)(38100700002)(66574015)(91956017)(76116006)(71200400001)(316002)(2616005)(8676002)(66946007)(66476007)(66556008)(64756008)(66446008)(186003)(26005)(83380400001)(2906002)(54906003)(4326008)(786003)(8976002)(8936002)(36756003)(45980500001); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?q?DOjhyN44nJdKGF/88IBzJpfpv?= =?utf-8?q?FMG+McmHuPmPOVmqkVtzqTsrhg8nHMyly0BHy0DH1vAcuMrlZIFMTaJu?= =?utf-8?q?1+JVwIfFWyf2vb/SII5k9OW7onerGqhdvUNXlJhuo2Ylu9S5MdqAFuoJ?= =?utf-8?q?x0sRXgTUiyvtcKXUTTKkzm1Lx4aMj9k172WMmagQ3ZqNuhS74nTNBRDs?= =?utf-8?q?6LcQJunvxlkUCj5id4CYDxK/o2Vv0vHqH4wQ/3QCv20AJk3PHImYjv5F?= =?utf-8?q?ZInh0IvzrlZXsTFXFTVCTaOUeieF5SBfmR/sXLRZDqwEHQA2/kXz89qg?= =?utf-8?q?8ngBWMbqV7JNQ0woWneHql5Pv/5zR9EQsvAiLrTb6+LIozAaEmLtrfLP?= =?utf-8?q?7JwmA4zsFepL0sdmHx36mIAqLdHMRzeVzVLEVqCAjSRJnLFnt5pBT4qu?= =?utf-8?q?J+u7+j+hgPB99wdaxYOSqbi/NtBAj9oh2dx6EWwbwyz6sJnxHNrK2sBU?= =?utf-8?q?Dgtl6I4P4EXQUA4BqGQySPNlAUYQEmNm1gI8aTz3P27IgcpyhA4abVSW?= =?utf-8?q?Ro94g8WAm/KRJRUYcoV6CvmzjsRhGBgs3u2QCn1qzE09oQBfHVSjq8D7?= =?utf-8?q?BBUAzc2mY2seMq9zXDzQI+K4IDs9tnxksSDNvAGv5d7m5luVC+YW4cVk?= =?utf-8?q?GY9GuY8UY2UIiVFCQDJbvhMQH4RWO02jqOXHqdHpmz0mz0viwFL4yfDw?= =?utf-8?q?3iNYmqDauEIdh+B3QTnMj7NDhdQtNWQqz6Z64QI8xNiy0tWRjGFo6vJk?= =?utf-8?q?cAZf3dBDdozU3jTKV550EI0X8LsKK6F5oNzgqcuubdEyEUZ4S6Oyn0uZ?= =?utf-8?q?n/S/eyfTDzFDKEe+VP34uMDUx9bhvGAh9XyXhdVgH79OBc0NndM7nSzy?= =?utf-8?q?PIf7D9iB58vvRTxziVh443de9jGpBC5d/mfoXMYXyPXv3gtVVO16XdlF?= =?utf-8?q?Nn2xpUKhWYUMEpNKWosCWim/KDHNLkdCqMLE2gnz8yHATxn4msmHuiEx?= =?utf-8?q?7sWWDZWAwxDCRnZD2uhwhBwYdppKqaYikZcoanfUgEpIolYd3dc2sHIm?= =?utf-8?q?iO4eHLEzjAXtuVmw7DszzkPIByXhSPNbWbcQUauuXy+Sx2uDGvNrV+YM?= =?utf-8?q?5EwCpzfZcqTnmuqSN+xMIgCELf1zYoMupb4VDYMXm/Wvqh3ncJFdZCNz?= =?utf-8?q?iwYsgJEe5i/KaSucjpP+cFDzrIKdARoPHkpQyqOPqtn8fVRwIDDpDuaK?= =?utf-8?q?Ptw/np6e19+2HlgZB1wBEXoKwE8fa4lj2M5dJnzqcFGYX0HqXkU52dsb?= =?utf-8?q?6qFmvYKljyccHVm+G6iByyBUjY4UNXvEvn/BE4CiaJ8ZGG+gzIAjPd3U?= =?utf-8?q?R0q3JOxVVe1sYEwc+iKoUJX7ogjTVTzNVXJR2MflAL/evm1pSz0Tg=3D?= =?utf-8?q?=3D?= x-ms-exchange-transport-forked: True Content-ID: <8A07643AAF54664F9EA0196EEF365C43@eurprd02.prod.outlook.com> MIME-Version: 1.0 X-OriginatorOrg: itu.dk X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM0PR02MB5777.eurprd02.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: f82d13d4-2dcf-45df-2296-08d93a2d6d08 X-MS-Exchange-CrossTenant-originalarrivaltime: 28 Jun 2021 12:08:22.6287 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: bea229b6-7a08-4086-b44c-71f57f716bdb X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: g7rZznR1XqhbHA7A2MbFM3cett7HqA1orSbSqoIBZ9mdu0tk00LlA+Um08cUjH+9 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM9PR02MB6564 Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This commit implements packet bursting in the NetEm scheduler. This allows system administrators to hold back outgoing packets and release them at a multiple of a time quantum. This feature can be used to prevent timing attacks caused by network latency. Signed-off-by: Niclas Hedam --- v2: add enum at end of list (Cong Wang) v3: fixed formatting of commit diff (Toke Høiland-Jørgensen) include/uapi/linux/pkt_sched.h | 2 ++ net/sched/sch_netem.c | 24 +++++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) -- 2.25.1 diff --git a/include/uapi/linux/pkt_sched.h b/include/uapi/linux/pkt_sched.h index 79a699f106b1..1ba49f141dae 100644 --- a/include/uapi/linux/pkt_sched.h +++ b/include/uapi/linux/pkt_sched.h @@ -603,6 +603,7 @@ enum { TCA_NETEM_JITTER64, TCA_NETEM_SLOT, TCA_NETEM_SLOT_DIST, + TCA_NETEM_BURSTING, __TCA_NETEM_MAX, }; @@ -615,6 +616,7 @@ struct tc_netem_qopt { __u32 gap; /* re-ordering gap (0 for none) */ __u32 duplicate; /* random packet dup (0=none ~0=100%) */ __u32 jitter; /* random jitter in latency (us) */ + __u32 bursting; /* send packets in bursts (us) */ }; struct tc_netem_corr { diff --git a/net/sched/sch_netem.c b/net/sched/sch_netem.c index 0c345e43a09a..52d796287b86 100644 --- a/net/sched/sch_netem.c +++ b/net/sched/sch_netem.c @@ -85,6 +85,7 @@ struct netem_sched_data { s64 latency; s64 jitter; + u32 bursting; u32 loss; u32 ecn; u32 limit; @@ -467,7 +468,7 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, /* If a delay is expected, orphan the skb. (orphaning usually takes * place at TX completion time, so _before_ the link transit delay) */ - if (q->latency || q->jitter || q->rate) + if (q->latency || q->jitter || q->rate || q->bursting) skb_orphan_partial(skb); /* @@ -527,8 +528,17 @@ static int netem_enqueue(struct sk_buff *skb, struct Qdisc *sch, qdisc_qstats_backlog_inc(sch, skb); cb = netem_skb_cb(skb); - if (q->gap == 0 || /* not doing reordering */ - q->counter < q->gap - 1 || /* inside last reordering gap */ + if (q->bursting > 0) { + u64 now; + + now = ktime_get_ns(); + + cb->time_to_send = now - (now % q->bursting) + q->bursting; + + ++q->counter; + tfifo_enqueue(skb, sch); + } else if (q->gap == 0 || /* not doing reordering */ + q->counter < q->gap - 1 || /* inside last reordering gap */ q->reorder < get_crandom(&q->reorder_cor)) { u64 now; s64 delay; @@ -927,6 +937,7 @@ static const struct nla_policy netem_policy[TCA_NETEM_MAX + 1] = { [TCA_NETEM_ECN] = { .type = NLA_U32 }, [TCA_NETEM_RATE64] = { .type = NLA_U64 }, [TCA_NETEM_LATENCY64] = { .type = NLA_S64 }, + [TCA_NETEM_BURSTING] = { .type = NLA_U64 }, [TCA_NETEM_JITTER64] = { .type = NLA_S64 }, [TCA_NETEM_SLOT] = { .len = sizeof(struct tc_netem_slot) }, }; @@ -1001,6 +1012,7 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt, q->latency = PSCHED_TICKS2NS(qopt->latency); q->jitter = PSCHED_TICKS2NS(qopt->jitter); + q->bursting = PSCHED_TICKS2NS(qopt->bursting); q->limit = qopt->limit; q->gap = qopt->gap; q->counter = 0; @@ -1032,6 +1044,9 @@ static int netem_change(struct Qdisc *sch, struct nlattr *opt, if (tb[TCA_NETEM_LATENCY64]) q->latency = nla_get_s64(tb[TCA_NETEM_LATENCY64]); + if (tb[TCA_NETEM_BURSTING]) + q->bursting = nla_get_u64(tb[TCA_NETEM_BURSTING]); + if (tb[TCA_NETEM_JITTER64]) q->jitter = nla_get_s64(tb[TCA_NETEM_JITTER64]); @@ -1150,6 +1165,9 @@ static int netem_dump(struct Qdisc *sch, struct sk_buff *skb) UINT_MAX); qopt.jitter = min_t(psched_tdiff_t, PSCHED_NS2TICKS(q->jitter), UINT_MAX); + qopt.bursting = min_t(psched_tdiff_t, PSCHED_NS2TICKS(q->bursting), + UINT_MAX); + qopt.limit = q->limit; qopt.loss = q->loss; qopt.gap = q->gap;