From patchwork Mon Jun 28 15:22:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aljosha Papsch X-Patchwork-Id: 30758 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id B811227BC81; Mon, 28 Jun 2021 16:25:18 +0100 (BST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_PASS,T_DKIM_INVALID, URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.2 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id 1EE7E27BC78 for ; Mon, 28 Jun 2021 16:25:18 +0100 (BST) Received: from localhost ([::1]:59272 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lxt8P-0005q2-2x for patchwork@mira.cbaines.net; Mon, 28 Jun 2021 11:25:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41382) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lxt8A-0005db-RN for guix-patches@gnu.org; Mon, 28 Jun 2021 11:25:02 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:40727) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lxt8A-0006pj-JR for guix-patches@gnu.org; Mon, 28 Jun 2021 11:25:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lxt8A-0001np-HO for guix-patches@gnu.org; Mon, 28 Jun 2021 11:25:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#49255] [PATCH 2/4] gnu: Add wondershaper service. Resent-From: Aljosha Papsch Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Mon, 28 Jun 2021 15:25:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 49255 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 49255@debbugs.gnu.org Cc: Aljosha Papsch X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.16248938586812 (code B ref -1); Mon, 28 Jun 2021 15:25:02 +0000 Received: (at submit) by debbugs.gnu.org; 28 Jun 2021 15:24:18 +0000 Received: from localhost ([127.0.0.1]:52263 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lxt7S-0001lo-1F for submit@debbugs.gnu.org; Mon, 28 Jun 2021 11:24:18 -0400 Received: from lists.gnu.org ([209.51.188.17]:45074) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lxt7O-0001le-Hw for submit@debbugs.gnu.org; Mon, 28 Jun 2021 11:24:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41176) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lxt7N-0004fC-Vw for guix-patches@gnu.org; Mon, 28 Jun 2021 11:24:14 -0400 Received: from mail-fr2deu01on2139.outbound.protection.outlook.com ([40.107.135.139]:33476 helo=DEU01-FR2-obe.outbound.protection.outlook.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lxt7L-0006J0-E2 for guix-patches@gnu.org; Mon, 28 Jun 2021 11:24:13 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=L+znygubRFhsHpVMHr2NrVYMmmEXLG1wfjX2smwHkxQn5Zl1+N/lA5JfOWfHNpEMT8H1c5Q36NUsfIbCrCoR3NvKnwU/s5oeUY2A23iPL/L7cFw8ljr4knHg/h520Opsfs1KzjACU+BvDYD/zO1ZOVhVAzxenp+QmYtt1es+8N8prHAc2MrTo8zb+mQxYzRc09Lf48huxDGZNhUlQZulxpCPMgfM83XM0fUXpxE1oK2ZQ7D/aOeyT35KBd6D8kQOh6oUUQ98prfnCFTJVNi75Z8wmdp6FgU4yOXRJDImdqqna8mHR50n5/Rsw2HWOckW4GG8YONdB8LsbdEloqOqxA== 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=mbxgRyGG5tAFet5ohonPgDlV5l2PqrdmLdenvWm6wnA=; b=QpmihW6qhmW5/bWfS3G6LobFv8xJbFBCBdAk1HASwJe+8WkvDzDa3fpkfJfdM154xCn95FN7wwW3oQKxy9ppyCesPbRU22jpKqwOzIl8Yjf4JZJ2iEtLOV51uNsakQftfcKEqsHRiGXfv0Nj4uwJlOrWvkxm8i3VWl+gt86i0IBHAlYeYMFTJZAez5cQEckktKiGyA3Ycg4/3XmCyNYTdZvRKpF+3LRRQ4dAZTDX+Yddg/+kxbbsLrLKApzz8u0IMN/lExrr+xw2Qnz3uS0nJ9Kjnzko8xgonPKjovM239lmT0/xcTPczjUSX1bzPo+vZicxoRy2w53ZxbSpywa5ZA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=stern-data.com; dmarc=pass action=none header.from=stern-data.com; dkim=pass header.d=stern-data.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sternasset.onmicrosoft.com; s=selector1-sternasset-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mbxgRyGG5tAFet5ohonPgDlV5l2PqrdmLdenvWm6wnA=; b=Z1BFHmsmYMdz6XuaaviTclU6sSN36OBR5Yk3dSPhIxe7NuNAG4ikLSmnDXgJ0XNqm1X4qhLxYnsBbA3zv9qAZXo8Bi8sStWkYeqayKd6gODd0bMcQBcZAqYZMyMX4XBX44zNSgsC79cpgtcgYGEYBX0Pdf2E9CidXhzUORggUqhGoGRaKIC0YkbxFQU7TAkWpxddXfjATMItUgw7J5KK7DYpU957VTRAzFNbuvTVamnsxLKcY2uFvyGWaZPUwy2UwSAzRuseJDNvimCHSuOuk45yawJRGuW56XZMuokm9ZrGL+gZR97tU8q70Sr1fiJ0TT1FNifo4NA59REKgR6kTg== Authentication-Results: gnu.org; dkim=none (message not signed) header.d=none;gnu.org; dmarc=none action=none header.from=stern-data.com; Received: from BE0P281MB0034.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:f::11) by BE0P281MB0211.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:11::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4287.17; Mon, 28 Jun 2021 15:24:09 +0000 Received: from BE0P281MB0034.DEUP281.PROD.OUTLOOK.COM ([fe80::b9ef:9f1:8c7c:cb72]) by BE0P281MB0034.DEUP281.PROD.OUTLOOK.COM ([fe80::b9ef:9f1:8c7c:cb72%7]) with mapi id 15.20.4287.021; Mon, 28 Jun 2021 15:24:09 +0000 From: Aljosha Papsch Date: Mon, 28 Jun 2021 17:22:30 +0200 Message-Id: <20210628152232.31073-3-ep@stern-data.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210628152232.31073-1-ep@stern-data.com> References: <20210628152232.31073-1-ep@stern-data.com> X-ClientProxiedBy: PR3P189CA0076.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::21) To BE0P281MB0034.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:f::11) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from localhost.localdomain (2a02:908:c39:9d60:ec9b:bd9a:f3b7:625d) by PR3P189CA0076.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:b4::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4264.18 via Frontend Transport; Mon, 28 Jun 2021 15:24:09 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ff305126-d42b-4e41-dbdd-08d93a48c6be X-MS-TrafficTypeDiagnostic: BE0P281MB0211: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:4125; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xBFvwaIBlxDPRD6FbtgfBS+dog2DMFvvShJZCswKjhndZQHLEolME/a/EgW8vSyG5iEOS1Izwe6/N1bxZ4rTGrRPOFaWMbT0pMCpUQJz/gyVF3v//JK++31flwAqbNxMLHF4d11/WB482s97RGJWfz+lRQ5S7IYkzwZLOMY8Z5c+MCMn7ZuCITB3PJ1KFEvJDUCFJsv6pAYXhtKeigpsrGsCHtDeEOzY8OCcrZPXmJE1r6FxMACasz3wusk8o+GSCyxACgi9K200+4RMmiwOqFqHMW7Cj9pw6yOtJn036KHhnDZW1ZN1FAVisb5LVg+pZYhc2xkqhXGvs6GMFlgC/5oSa8N+7hEa/mgoXywTxWgkRTjHODn3yiQI3aHsNQM5NOl/GITaKlkyhZ4lj/RjpfJhpWy4ELOnlJ8SXqRpBgaMdZqMMt/RUHBYGD/n39/gCqKPNbEUEAzVAfb3tBMHjOPCEeM8bMfEl+bijvM3oakH+xIgc7QVvOTERKYCcB4BPKSFlz57/q51FP54sAWzW4eKoi4XxCBuO7QUd49kInKhMfjZwvv2qBXdRyb1ymv5jPymi+FW1f7zgW2MIj/XjZ+oRLeI6Bx2E5bu6TA7Cy1+O8zqAfGxHtNQod554lLwZ+fGWtk6mSjflnou9UMnRMV1B3VbMeUph8n9RhBkkgTRyP0GRwWtpFf3OORSTbRDPOKQsILwSQ0BVViSFpWA8aBsSl8sTQ2mk7shoe216qNgoNycU7Y09pwQ8o5+m5ddBVVTUasVprkGN20cS6LrxQ== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BE0P281MB0034.DEUP281.PROD.OUTLOOK.COM; PTR:; CAT:NONE; SFS:(4636009)(396003)(346002)(366004)(376002)(136003)(39830400003)(52116002)(107886003)(83380400001)(8676002)(6666004)(186003)(478600001)(2906002)(86362001)(8936002)(6512007)(6506007)(6916009)(36756003)(4326008)(2616005)(316002)(38100700002)(5660300002)(6486002)(1076003)(66946007)(66556008)(66476007); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 2YKryd35edvsJiKMcCWVNQqk38rDklxy2WopxIf9kldZwEOQ+bphuj7sYpuQ2QqPrnPDovLVgI1+nTEyqq9ErsCxC3UiYBHy29De6EYy8/8X8vf+dYCWvsFtXiLCJTGu4VPmfpw/Ov6/UEov1vQz5PcXV66V43U5uTOFw1dC0fEom0m5/F3UQvV3ou3p22mBVDj2FMYQMPDNvqg62TJqUB/pLTIYCf0D64PoLLNXGmPIsEH5i+KFaIlZ7ZQ1B2zAwX4+MGC+uYT32w+J//FV+exG66tnAGqyDPzsUE+9T20YLXLpvvQhPZbwZDhKXZttfidXu7ZrjFRsyVXprZS1VJxwftBQb2FcLAb1pi/PZdyjhLc6NRlsBxxtOusdtQHOawHZY1cb/zlaOF7uD3fPaeHuF23ETwDnzoe065ynte3ZIjgqbRBH9GyNfIqAdEcDkafjd5CPyc1hciIroFIB6E0L8V4Fs0TVyeTlIGkwdkPH7N63XWCiBjbVbgLR95pIiTBnSJThG2wQ/T2FjvMKVqxDdWR7cd4EMWH6Q1PYR8qhjvQy0UicLDZkkfKhT6U2UQISOxJ2yFQKs/FzPEGDOIJCEz2zm2twTVxJVWmMYMq2SSjAgyxlTzVV7HQbvxDgmH5b9JgKaBtDwj4ExRBuntsvOEGOs45PdMU2GBNyoKTqeok1HxGRRloBqjF0ffdFkbFjFMvZCGoOxpSxOtgbVpPDAnDfy031c44Qe6xhwDvYoADANH9c6VKZCqRj1yz8VYs/D8NhsLf9RwDND4I/d4xd9AGdWzaZP21gjppe9O68fuhoJJoOGFotQOu/3gnmuYTsmIKFFAVHMH4YyiOIOFXOS0gdF1yp+z9O7VIh0fmnbun1FbZoXpLX8UiSbvYdfQEz2/7YcHK//6d8G59CH5Vbt6Ye6vbdpjlmdFip/flsRamrlp2rjSMCKDaX8kczEbmVuf9MLZSDl0Q4+6T/cvtHXos2x0EEbYJJCFvpiz1BFxKXv39LjIclL44yoiNvpjlPEqEpyPr4OgrH7N9iGP9+cRjwK3sqTaRw9jkF7pa5ujgg/8+PBGfYW4GeQbsIW4fHm54OOe8FLH1hqESgeynDTOYDTp3aiNjnGZetX9ZFIQdr2a2YIT+st56GxxMNM93+88SaH8OiitMb8S9+BreX5rQfE3V4WOfLSGmyaH6yF488d6OzxSwrvhEGOjglR19pLu19W5wMfmL2S9PlCp/D5N+78xh5uC2/9qQQT7ZZXcZlNJyLGJ2kukmaPoRbwgwujtiX0cF9OcH4tCGM029m/Zpe0BI2F+vLWZb/JsmaBrfH9qp8EG5RHEx0MKz5hbLoSBIwi5unVw81WguT2r7fsEG/5rFyKMFCNAhE/MoxRfr4CKkqZWJIo6ZxwkZu X-OriginatorOrg: stern-data.com X-MS-Exchange-CrossTenant-Network-Message-Id: ff305126-d42b-4e41-dbdd-08d93a48c6be X-MS-Exchange-CrossTenant-AuthSource: BE0P281MB0034.DEUP281.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Jun 2021 15:24:09.7154 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: e55b1d7b-b6d7-445f-a720-8de54d4464ac X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: EDebUwS4YCAFMYz5FuXvnqor4jvHBSZnOmPENW1UO0Utn1zOw2yv84fIDW8RdcS9y9MEjbBJQo1Rb7gtO93+/A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BE0P281MB0211 Received-SPF: pass client-ip=40.107.135.139; envelope-from=ep@stern-data.com; helo=DEU01-FR2-obe.outbound.protection.outlook.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, MSGID_FROM_MTA_HEADER=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: "Guix-patches" X-getmail-retrieved-from-mailbox: Patches * gnu/services/networking.scm (wondershaper-configuration): New symbol. Configuration for wondershaper-service-type. * gnu/services/networking.scm (wondershaper-configuration?): New symbol. Predicate for wondershaper-configuration. * gnu/services/networking.scm (wondershaper-service-type): New symbol. One-shot service running wondershaper with a generated config file. --- gnu/services/networking.scm | 107 +++++++++++++++++++++++++++++++++++- 1 file changed, 106 insertions(+), 1 deletion(-) diff --git a/gnu/services/networking.scm b/gnu/services/networking.scm index 87b3d754a3..a17f41aa30 100644 --- a/gnu/services/networking.scm +++ b/gnu/services/networking.scm @@ -221,7 +221,11 @@ keepalived-configuration keepalived-configuration? - keepalived-service-type)) + keepalived-service-type + + wondershaper-configuration + wondershaper-configuration? + wondershaper-service-type)) ;;; Commentary: ;;; @@ -2190,4 +2194,105 @@ of the IPFS peer-to-peer storage network."))) "Run @uref{https://www.keepalived.org/, Keepalived} routing software."))) + +;;; +;;; Wondershaper +;;; + +(define %wondershaper-default-download-speed 2048) + +(define-record-type* + wondershaper-configuration make-wondershaper-configuration + wondershaper-configuration? + (wondershaper wondershaper-configuration-wondershaper ; + (default wondershaper)) + (interface wondershaper-configuration-interface ;string + (default "eth0")) + (download-speed wondershaper-configuration-download-speed ;number (kbps) + (default %wondershaper-default-download-speed)) + (upload-speed wondershaper-configuration-upload-speed ;number (kbps) + (default 512)) + (prio-3-rate wondershaper-configuration-prio-3-rate ;number (kbps) + (default (/ (* 20 %wondershaper-default-download-speed) 100))) + (prio-3-ceil wondershaper-configuration-prio-3-ceil + (default (/ (* 90 %wondershaper-default-download-speed) 100))) + (high-prio-dest wondershaper-configuration-high-prio-dest ;list of ip addresses + (default '())) + (no-prio-host-src wondershaper-configuration-no-prio-host-src ;list of ip addresses + (default '())) + (no-prio-host-dest wondershaper-configuration-no-prio-host-dest ;list of ip addresses + (default '())) + (no-prio-port-src wondershaper-configuration-no-prio-port-src ;list of port numbers + (default '())) + (no-prio-port-dest wondershaper-configuration-no-prio-port-dest ;list of port numbers + (default '()))) + +(define wondershaper-config-file + (match-lambda + (($ _ interface download-speed + upload-speed prio-3-rate prio-3-ceil high-prio-dest + no-prio-host-src no-prio-host-dest + no-prio-port-src no-prio-port-dest) + (begin + (define (shell-quote str) + "Return STR wrapped in single quotes, with every single quote in the string escaped." + (let ((quote-char (lambda (chr) + (if (eq? chr #\') + "'\\''" + (string chr))))) + (string-append + "'" + (let loop ((chars (string->list str)) + (result "")) + (match chars + (() result) + ((head tail ...) + (loop tail + (string-append result + (quote-char head)))))) + "'"))) + (define (list->bash-array lst) + (string-append "(" (string-join (map shell-quote lst)) ")")) + (define (format-config) + (string-append + "IFACE=" (shell-quote interface) " +DSPEED=\"" (number->string download-speed) "\" +USPEED=\"" (number->string upload-speed) "\" +PRIO_3_RATE=\"" (number->string prio-3-rate) "\" +PRIO_3_CEIL=\"" (number->string prio-3-ceil) "\" +HIPRIODST=" (list->bash-array high-prio-dest) " +NOPRIOHOSTSRC=" (list->bash-array no-prio-host-src) " +NOPRIOHOSTDST=" (list->bash-array no-prio-host-dest) " +NOPRIOPORTSRC=" (list->bash-array (map number->string no-prio-port-src)) " +NOPRIOPORTDST=" (list->bash-array (map number->string no-prio-port-dest)) " +")) + (computed-file + "wondershaper.conf" + #~(call-with-output-file #$output + (lambda (port) + (display "# Generated by wondershaper-service\n" port) + (display #$(format-config) port)))))))) + +(define (wondershaper-shepherd-service config) + (match config + (($ wondershaper) + (list (shepherd-service + (provision '(wondershaper)) + (documentation "Configure traffic control") + (requirement '(networking)) + (start #~(lambda _ + (invoke #$(file-append wondershaper "/bin/wondershaper") + "-p" "-f" #$(wondershaper-config-file config)))) + (one-shot? #t)))))) + +(define wondershaper-service-type + (service-type + (name 'wondershaper) + (extensions + (list (service-extension shepherd-root-service-type + wondershaper-shepherd-service))) + (default-value (wondershaper-configuration)) + (description "Run @uref{https://github.com/magnific0/wondershaper, +wondershaper}, a small utility script setting up traffic control (tc)."))) + ;;; networking.scm ends here