From patchwork Fri Jul 9 13:54:07 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aljosha Papsch X-Patchwork-Id: 31257 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 D017C27BC81; Fri, 9 Jul 2021 14:57:29 +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,RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL,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 47C3727BC78 for ; Fri, 9 Jul 2021 14:57:29 +0100 (BST) Received: from localhost ([::1]:45702 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1m1r0S-0008BZ-Dr for patchwork@mira.cbaines.net; Fri, 09 Jul 2021 09:57:28 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:41876) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1m1qz5-0007Lk-4k for guix-patches@gnu.org; Fri, 09 Jul 2021 09:56:03 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:47926) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1m1qz4-0006Bf-Tt for guix-patches@gnu.org; Fri, 09 Jul 2021 09:56:02 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1m1qz4-00074U-Tu for guix-patches@gnu.org; Fri, 09 Jul 2021 09:56:02 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#49258] [PATCH 2/4] gnu: Add wondershaper service. Resent-From: Aljosha Papsch Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Fri, 09 Jul 2021 13:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 49258 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 49258@debbugs.gnu.org Cc: Aljosha Papsch Received: via spool by 49258-submit@debbugs.gnu.org id=B49258.162583891726534 (code B ref 49258); Fri, 09 Jul 2021 13:56:02 +0000 Received: (at 49258) by debbugs.gnu.org; 9 Jul 2021 13:55:17 +0000 Received: from localhost ([127.0.0.1]:58844 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m1qyK-0006tH-Pa for submit@debbugs.gnu.org; Fri, 09 Jul 2021 09:55:17 -0400 Received: from mail-fr2deu01on2110.outbound.protection.outlook.com ([40.107.135.110]:64480 helo=DEU01-FR2-obe.outbound.protection.outlook.com) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1m1qyH-0006p1-Ll for 49258@debbugs.gnu.org; Fri, 09 Jul 2021 09:55:14 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=oPirDiWvX0F3iqrCsv5JQCJ05vSyps/QQh07k19FxECiH1xRRVOpSjSjXHZsjl/xQfdzHhp/NSo9uOaxE1a79TNQ3XRRWe4B9yxsXpuQuEc8WA2t3RHskHrdU4bMpOww1n2rfOT5zMkvCo484AlxFPLoBYUiiz3ltj706WX4hrj7q/piY3fDc6rkybPrmvDyHYr7HW15XkUUH6KDDeXXrl6SeSVsXupng4/Mgm1Qp1N1vKk964ZoYc6ucoFsjAPHlOrU06BCDmQz2UZ8NLiVhIwl1g9u7DRFEr2DYV9749jYzpR1ADChRC44miqzB6G817d8dnS56p2XvqMzl74AtQ== 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=qTJPmNlv5H6W/nLdyWF3iBZdq+X3P0nvtqnjah1Eq9s=; b=N0dkiv1KGc4taGrChy+CVBvfJ2LwxsC7EgEgE8sNsiTqC9Wwiu+qikNf2bX78M26kxbwmXZ0Bv66mz4M3BsarEwGabFAOBunn91d1kLyq1dFmALu5J3xLuzwDLaLUHqWuTLQtACOCz4EcxLS0MDKDxrNsX6HiyCpc5cUshkb+JKGRkE+UduIZ3jxd7EycE/4NTW7XWEuwtAwQfvBsJzlF1vbSUFb3koQKNhruPR7l0ZaM7M606zIKNNH2nBRTT/6UzG2uOqYx2JE+8o7M5HtqT5sAnMRXnbiJNcToJQMRTp5AqCwxj8h77/NZOubba44+ibpULUNzIZNN0KdEZUQnA== 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=qTJPmNlv5H6W/nLdyWF3iBZdq+X3P0nvtqnjah1Eq9s=; b=tSIJ6uDANRcJZIAHMkAEAPkA1/iNVjU2KWyqeqWpS6Ukk/QC9J/oJ8sKw3bMI2I/YebvMGx5XFY73LSQeydLb4iB+cbMKZG11gFLCfE6WjRAIhngQJVpukJ1EvrKH2+T1PwsL5s6jaVl+XpGkC8KWUojop681hYm6hU5INOvYZX5/p0B+E+ydQe41JSspOJ+LsM/newAwPaw4dupRecdmxdTkastFZvPGytYIkpOczo1FiW/lPVI4Ws6kMP+SYMf0ajKyqUNnr63jIU7mOA9WEnoGtLYifwRxIKgdnqQqpPot/jOMT01fU8IcZPVvsTSJhSzYAPdnJ3r3xVTn3ce/w== Authentication-Results: debbugs.gnu.org; dkim=none (message not signed) header.d=none;debbugs.gnu.org; dmarc=none action=none header.from=stern-data.com; Received: from BE0P281MB0034.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:f::11) by BEXP281MB0136.DEUP281.PROD.OUTLOOK.COM (2603:10a6:b10:6::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4331.10; Fri, 9 Jul 2021 13:55:05 +0000 Received: from BE0P281MB0034.DEUP281.PROD.OUTLOOK.COM ([fe80::b9ef:9f1:8c7c:cb72]) by BE0P281MB0034.DEUP281.PROD.OUTLOOK.COM ([fe80::b9ef:9f1:8c7c:cb72%9]) with mapi id 15.20.4331.014; Fri, 9 Jul 2021 13:55:05 +0000 From: Aljosha Papsch Date: Fri, 9 Jul 2021 15:54:07 +0200 Message-Id: <20210709135409.54308-3-ep@stern-data.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210709135409.54308-1-ep@stern-data.com> References: <20210709135409.54308-1-ep@stern-data.com> X-ClientProxiedBy: AM3PR05CA0113.eurprd05.prod.outlook.com (2603:10a6:207:2::15) 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 AM3PR05CA0113.eurprd05.prod.outlook.com (2603:10a6:207:2::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.20 via Frontend Transport; Fri, 9 Jul 2021 13:55:05 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: b981ff73-63b6-42de-de85-08d942e12815 X-MS-TrafficTypeDiagnostic: BEXP281MB0136: 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: OSPXQcPmxDZta2CW3k3bLaYX2qU0U7Asc2c/SHDJcttDUU0KGjHaQA3ZNW5Y9V0UwX6wG550N8aAbWn1qpzTEh18brtUhKFC4/ueI8EszQ0nPftwYYzQFT/r3BDU5Rn+6jdZxDcidBz+ilBzhTVJQdKn7tNMAu30V84UxUsXxevN/uFIjNM86n0Itkxf25Vqne8TqFkCc2wEugvVCZtWG5DbofSuAOYnMlcKOHAhX4OnpcaBxPeOzuITyZGKGwJ0R3ojvvRscNHH5J+96ESRsu3QG9CPDa3CKYlCTo1udiWOyEwP6zbtRi4hN8t2lyFq808wszI7G/QNb2tA1AjUV2z1w2JJcPF67T/VCmom42cD8/s1kgF0rGydVA6RJDxVj1pRNPs+wSREOK8ONOrMQaruVUduhgbBJRcmRPXRJNf9Zv7Sm9k6GLAvX2YM9mUZir38z2ZtvevjMNx/OYrMlbxYs7m4zlXfylCc5t4/sSrHqAaKR0dDjGC+YtbQBgmwt6sb/bxajs/mQIbdaoyJeeKr0j+nJSdXZ3ic3fb3feHKugiCvFI4GTVFyURKw37u1Xd1dHicg5uNGVdIbB6SioaEK15kRi0Gdz8amlU1Ed05eDk5TTvqiQ/fx6vlFPnrsKIlitSzof99WWyS8Zh4agFhoDXH7uDiCYs3qa/j/fcXJqKG6ts+I1tBqlXvk31tQoF6rjPCrxM2x6UM5Yqa9qQPSOccFdRFBACChWzpUHU= 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)(366004)(396003)(346002)(136003)(376002)(39830400003)(6916009)(52116002)(66946007)(83380400001)(186003)(5660300002)(6486002)(66476007)(6506007)(2906002)(107886003)(2616005)(478600001)(38100700002)(6512007)(4326008)(66556008)(36756003)(316002)(8936002)(8676002)(86362001)(1076003); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: YYzPgWTEUJLUnF7DF+M2Tz1aChXjnVJpRFTXcz0kkUnDzBC83s6g77d8Ib3frKvi3ig2rYJLLzxczfPAiV4sUi/LZhsNm+a/tWylz9tdJSRDZTCXh56VxHSkJOrJN4ElZofMIZAVXSflUIRpXWrPxsrJmdjwFOHCVtgEkhr3zHOAwEQrtMkPs9A+LUGtlK7KJF3XO9aevLRGty3lyx21hK4b0mU9lTBCjSerD+558c3MaA+/cMOt/O3d3uIZgXCrpMI3uiYdM9Ckhmf8W81YRc3tUQMfR9eshW0T6KbHpFFLbeVhW9sftdBBdNCLoAcpOG+lr9V/HsIGgvwMVLAffd5bTw8GeR2Kru3lit+0np1ek11YNbxXinT7F0FL6vLoq+NcunRPGfL7eXDEL0eRu7zoFG0IRbzcwSzgtJnc8IgRwSfHv3u/kK5Daj6Rs65mCw6TyAgHUjMEwcq9c8O9kDGK+ozRUt6/thcP7N/2VBT8gVXhZouRdwlpYHO2gTuYhyS50kiizrmttR29vJHi49zCEM2H/MFa3HllBtFk/Adj1ZK0ue+VwCKi2OAeK+NdHo7ycLaZesoryVbqDurcR3It2NY04iptKhLqtH3aMmn7oWk3Xnrssrwic3Qikn6Eund5x7k0bTspwXLQp14RehhxJxHPn+F2F2dR2I1aiCjh6yM1jxwQJfQcYRZxB1sUBHY04r8qLekv/sL8vc+IVE2+17YheYzOtK+x3FdFYsMK7Y8JCrDoIMNOAsvZnvEjhY+4P4go4HtIm25pX4dd9ybaCeuYGb/kHQEIHfd7YAmGnCmJg3xfMqW23V5Jko36pCrf2V71dO91bOofzooSclQw5JTJ6nqfwdoV1jTWwMd96+y6X/bSZpD9ZzrWxL7kptGBXaeld8OlOWEKAskx46algK/51GIi+gA9D2T/risRCKyRSUlLmOgY4e1lXf5y5h+din+X7nF/ICSfphDrkPNkNWmA5B/LIV4meb8DgAeQcttAK50b24iORuM3c01AiCjEkbORYQG6HvFGAgMzAiJG4UAocijWw8OX83GVfyuRvgyUrv2muHPpAQ2MN5/xbpVj1S82VprrszSjDUjI2TOuNqLqzDmW8QyQGPTNVBnXX6YOY+L5p3+ul5+Zod3zBfLP2rlhRFuVm1hvGK2uln/CHWRmFKKp6/5iCmn0ABK+SXkItmMUvVLZucy3epCV1fvMlJ0NfhqPPb0UMXIvy7Y61Rf7trPngO0ojNQLdFxv/x7727lxiS8uMafxRX1q1kGx5WxkSAFnJUG6JCE67njRBbtrS5l4gCM54wG+wlOZjmH9Jt3B8daVuJyBJW+ysbU/vHRAUtFu/0cGhGf+IreBp6HoGejCE+t4oBwymJKh0p+fJyVF2BNgNG33Q2W0 X-OriginatorOrg: stern-data.com X-MS-Exchange-CrossTenant-Network-Message-Id: b981ff73-63b6-42de-de85-08d942e12815 X-MS-Exchange-CrossTenant-AuthSource: BE0P281MB0034.DEUP281.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Jul 2021 13:55:05.8367 (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: pUKGxLIOR+9S5mUhL2Xxp1IQFZBxFWcS7b0ZHFEVzBtNOa0FhBHTl+IT2kNsEOXl2z1TnHB3JHQ8K2UvX3JPFA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BEXP281MB0136 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 1ae58041d3..1d3e061758 100644 --- a/gnu/services/networking.scm +++ b/gnu/services/networking.scm @@ -218,7 +218,11 @@ keepalived-configuration keepalived-configuration? - keepalived-service-type)) + keepalived-service-type + + wondershaper-configuration + wondershaper-configuration? + wondershaper-service-type)) ;;; Commentary: ;;; @@ -2151,4 +2155,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