From patchwork Wed May 17 07:43:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Storm, Christian" X-Patchwork-Id: 1782447 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::53a; helo=mail-ed1-x53a.google.com; envelope-from=swupdate+bncbdd6bwv65qpbbgmlskrqmgqeci75xlq@googlegroups.com; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20221208 header.b=khbZzwsw; dkim-atps=neutral Received: from mail-ed1-x53a.google.com (mail-ed1-x53a.google.com [IPv6:2a00:1450:4864:20::53a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4QLlTb0g11z20dX for ; Wed, 17 May 2023 17:43:29 +1000 (AEST) Received: by mail-ed1-x53a.google.com with SMTP id 4fb4d7f45d1cf-50d89279d95sf10499409a12.1 for ; Wed, 17 May 2023 00:43:29 -0700 (PDT) ARC-Seal: i=3; a=rsa-sha256; t=1684309402; cv=pass; d=google.com; s=arc-20160816; b=D19RUcK1TUhZEgQnVOUTLTouxoU84Wz+luG2rcIPVRRkicNim+fecqHHN37a37iiBa mMsBz2LWs3kekNElDmFzW5OgCXjQoOzaCkxfMevuDkwKa1q5vihLGowMXakj8OvHu8M7 YfOnP6bz561+vB5h5RMAa9C8ZJVSnx2OP7QJwhHPNuf+EKm2gDtJdCN1LjEFbaAl6VbC Og73PqcjDeOGiIsxFcW3832jKEfB5wr0pfnZHHJICFhCcXAc0xImUqa8RDk22a3JVUUx jMUn9PzxhsH1OQ5l3CsCVHBc3qTxXREOICUdPdgTzJZiTWHRI8wifVzFcs4uLP0bM/2s wUsQ== ARC-Message-Signature: i=3; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=hWZhfRWgnSGVE60d/T1Bz8p3MBxmBN2OMo/OaQoF/7k=; b=0eTrXaqzQAurmUcefGplV6La+EhBOU8G8B9srMuqdX5Mqn9tvEJDyB1Y+MDSXzq6A5 S2VbMAEGJ/iz4nRl0lf6Bi2W+JfSsAQv6BD5gd5zsIbA9Nm2Hh2OuIC2QQTkSUpR+mZ5 oF7JU9yX99jdzTtQpCQbZ/j2YScORZgUxw5lLa2fEtpv8wmod6NjRffuVXk4WZad7yD6 JjMMXXtf5y9bE2I1X1RFQ+3aFWlYK6Zzu1bnVHt7hZTLZyb2kB03j5resv385DacdoHU SJXx63H6DtTW95TJhNZrW7JLAVxSADReuQfgLktEm5ZMRodMSVlMFWrKSWzRQDQSHEj8 B9Pw== ARC-Authentication-Results: i=3; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b=QyuJeuS0; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of christian.storm@siemens.com designates 2a01:111:f400:7e1b::62f as permitted sender) smtp.mailfrom=christian.storm@siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20221208; t=1684309402; x=1686901402; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from:from:to :cc:subject:date:message-id:reply-to; bh=hWZhfRWgnSGVE60d/T1Bz8p3MBxmBN2OMo/OaQoF/7k=; b=khbZzwswkRHp8LGvfzqwwgJt4sXJ69ReBX1PHGjDTZY+4N41T0XmzNgh0D67ye4gN5 bgi0kYbga2NnBkQlT/HB5a8tc7UNE/qMD8GmfUy8o1GQfx98m8p4pbXE3vRWyGQ045D4 TVRtuKg8Hp1+BPLpSGg9j4JuI2DOYTXmNfQ2tlfcd1CbwuCXYMd2dQXw6Wwa14i7jusw nSoO/XZxUfHOirnAkmj0gG8aMFOu0EsJLPkUrYx1j+pIUjzpL9YaqvMh2Im1kGJz9qjL jdzVTllJoT8WoxRh+L4s4D6bTcudg59j2EL7kL1WmfQm7mHPupCoVOoldfHTLZ6t8v+s TSQA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684309402; x=1686901402; h=list-unsubscribe:list-subscribe:list-archive:list-help:list-post :x-spam-checked-in-group:list-id:mailing-list:precedence:reply-to :x-original-authentication-results:x-original-sender:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :x-beenthere:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=hWZhfRWgnSGVE60d/T1Bz8p3MBxmBN2OMo/OaQoF/7k=; b=djmdO6JjqYL4mk5TL+8vAO3ha2eZCrt0GkPszzhQ79gvu43JzbmLf5zoEhZlLsPA2M 42Uz7aKo7dug1hTPT5Z6n5ewucQFNcpdk5fp5gLxIWLm8bRwpXjMisynIDhmAuNzLvC6 fsENt3tbnxAYTIk05g35uHo7NFrpExPP02MIRcPoPxKd2Y5zcBJQC5o/YbdzLT1HSh4D iNnt2RFk9B4sJbPsvMxdRkboyufbuWjW1y/smMPEhszdy9eM01GMt63XQf8+dMIqDQpE 3QDASTr2ZZ3RX+rtPlJ3vw1JWn6TdQzrkHePdq6IIIDzlgVah/JhelcUuTnupLt/bR11 opnw== X-Gm-Message-State: AC+VfDxwxYUjs2P/aSJpjIE16dPR6bVtJmARRQPCEFf/XPYhbuod3X/1 L2fDaH4lOjKK0B1G/GEhbU4= X-Google-Smtp-Source: ACHHUZ6CN+pi1LQE9KWvN7J28z9jzp1mOtE2FmVXKdjXni6o6GmYlL2ixObMJtwHf3bwms+MGX2CIQ== X-Received: by 2002:a50:9fc6:0:b0:50b:c4d7:6d78 with SMTP id c64-20020a509fc6000000b0050bc4d76d78mr625646edf.3.1684309401695; Wed, 17 May 2023 00:43:21 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:aa7:c552:0:b0:50d:9cf2:645e with SMTP id s18-20020aa7c552000000b0050d9cf2645els133484edr.1.-pod-prod-05-eu; Wed, 17 May 2023 00:43:20 -0700 (PDT) X-Received: by 2002:aa7:c45a:0:b0:50b:d221:248a with SMTP id n26-20020aa7c45a000000b0050bd221248amr1271510edr.19.1684309400097; Wed, 17 May 2023 00:43:20 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1684309400; cv=pass; d=google.com; s=arc-20160816; b=vgJ6GbuZbCGmbPtzWAeaWDvxNbjQ6vTTrdA5mIgi6X5uPIk0sY3hooc1o/bTKRDGfU ur9RAllbBHtagpNIc3AE30Ft06GAQzoeaYfo0LfXo9QGM6Xviq7DZY2zUk6ItGbjPWjy SWPEY+yvDtYvqD5IbZ9MWl1ce1tfCdFCosIdictchzd0NNvvqeL5Bzq4GWU8tKHZ/3K/ WXsCPyG7HHaB8gt5tUC/Tiw9kcBw03IRBOIgs4KRmd3XPb0tOSD85kkjnBH7LuuKS8bN +tlCc1Es8cQLpHKv6H4uH4G3Eb5v+sYGYzdGckvDSdGXic7XIZ3PmodBOz3EMpaVPm9f wfYw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=mime-version:content-transfer-encoding:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=NCtFBuk4Ylj6YPgSi6zzz4gONJ8mzvsdk2Yr5mWrAaE=; b=pXnMrHKvJvzHIMYN0AjryJwCe2ozyu1Jg++lMfQU30nqGDiW/abBa6CWZVNPRqdpwI aDgSz8KnOWd0CvLrWfGk71VVKlHd7cztj0OzaH/u6k8lCnsruT6yjD5DZmw8HsRAkTA/ mBKovO9iyye/sDbJ/4eHu8qY15ncYYCsSRsEfSIJaZVPPOG7VKjrtDedPNS+tsG88mLw 3xsn6GpjivtSgnrpekgstdN6zylPJQ0gETYdq8xDCIJ/K2Keg8xRqCfydv8/a70R5XZX B1KRta/aUMsPNf8ZnN9/DXXT0S64RL7VV+OZrvJEK0xHeuq20/1lB9w1B0TrarDZiSRf o3yw== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b=QyuJeuS0; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of christian.storm@siemens.com designates 2a01:111:f400:7e1b::62f as permitted sender) smtp.mailfrom=christian.storm@siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from EUR05-AM6-obe.outbound.protection.outlook.com (mail-am6eur05on2062f.outbound.protection.outlook.com. [2a01:111:f400:7e1b::62f]) by gmr-mx.google.com with ESMTPS id n15-20020a05640205cf00b0050a31d1615bsi1572132edx.1.2023.05.17.00.43.19 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 17 May 2023 00:43:20 -0700 (PDT) Received-SPF: pass (google.com: domain of christian.storm@siemens.com designates 2a01:111:f400:7e1b::62f as permitted sender) client-ip=2a01:111:f400:7e1b::62f; ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PCW/zeWR9iT1UbqTgOjWu4CUmCusSatSp2UdyOsnpu+z414AoGige7mj2K+PWA4W/eAcWau0iC6FycG5ngEKaow+uz3SoaJnkiag02gLYRTRfD6AmgeYJu00+i16JSJ1bY/UDoYynBZICUjk5KowuD9VsY+Uf1tlmjRFY4v3A+egjSl38njzfoWF6uQm2qNOXnSuXHa0sBMD3sJh5pOHclWekrdWtSnjWd/9viOAa6LAn5NLOh7uDcAvWLPu/Pv2k/8ywpioEvXvOo/vOwlTEB/twvrgX4SKMSEyXP54Oo4qhAdQb53s1gN2fmh4jDLOL0qBrkG/sfqKjPZyWONRMQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=NCtFBuk4Ylj6YPgSi6zzz4gONJ8mzvsdk2Yr5mWrAaE=; b=O9CRxi2/P/kLX4Wva6lgJHFUwX+jU85A3t3FsMdQAlNnv7PSq1TPO6C1jYv/FQfyXYGSH1kKX6n81yfKq4kONc8wi4kg752pHix+fxgPvxff0qMi9UoDlSGiizNmM7H78H9qsCrmQSEx/TILHNeJwdJnV/2TbM06El/Z8EZF9ynaSrNusIPt01iH9O9kH1SQuvf29W5dh8Lzd4xtSV1EG84ElRIiA1f/wGhUtr7vYspSfkTuGHsmTikMXIQ7ppYQp2FhpwNq1c/BB9nvCMDfYrpprHhhy0Gm9HNst0wfKkTrXSgv9P49buP9PIWNOkyTfkb/UILXEmeOZWHr3e2cwg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=siemens.com; dmarc=pass action=none header.from=siemens.com; dkim=pass header.d=siemens.com; arc=none Received: from DB9PR10MB5404.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:333::17) by DB9PR10MB5354.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:338::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6387.32; Wed, 17 May 2023 07:43:18 +0000 Received: from DB9PR10MB5404.EURPRD10.PROD.OUTLOOK.COM ([fe80::6bed:3b93:4756:c9f3]) by DB9PR10MB5404.EURPRD10.PROD.OUTLOOK.COM ([fe80::6bed:3b93:4756:c9f3%5]) with mapi id 15.20.6387.032; Wed, 17 May 2023 07:43:18 +0000 X-Patchwork-Original-From: "'Christian Storm' via swupdate" From: "Storm, Christian" To: swupdate@googlegroups.com Cc: Christian Storm Subject: [swupdate] [PATCH V2] suricatta: Suricatta module run-time selection Date: Wed, 17 May 2023 09:43:26 +0200 Message-Id: <20230517074326.10649-1-christian.storm@siemens.com> X-Mailer: git-send-email 2.40.1 In-Reply-To: <20230509080726.23738-1-christian.storm@siemens.com> References: <20230509080726.23738-1-christian.storm@siemens.com> X-ClientProxiedBy: FR3P281CA0062.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:4b::11) To DB9PR10MB5404.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:10:333::17) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DB9PR10MB5404:EE_|DB9PR10MB5354:EE_ X-MS-Office365-Filtering-Correlation-Id: 9cb45a7e-4789-490f-3567-08db56aa618d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: xlZf0njIlKdb0Ly70GsmnEn9ZCNGhkb5u5Rgxvo0uKfDKjfj5pgYJ9aOjevkXrPNjyYFOjeqXWhhozaUDQffFoconbkpX5DNALWaHlKyQMnX9sC6k+aXm3Tse9ta8IzNFy69ruzZiEas7Havix+mQfL7ThbVpLVyRUVBrNUZmS22ahhLC5p0nTaDmEzaOi/KYf0tcZvDWUP4x9GiE0srnt+AW8WYGnIVyeacY4Ij8u3IV5qhOx+bridF/fIkOWCo2CHhdCBQklyo7tMVUA4f1x0/zRct4a/lcYt3ko+RtC1edUynzXo5v5mn0qj2emBC66ZwoPgIdDGJ9AHYTOd0Y2oXMbYWDB22F+kUaiXBcheRWJzWeVU9RKFxteT7clLBq4DL5sfoSgg0hUn1+w8kOl2SATcCrJu+ZfQ/bp6H2ycWlZKCzGR1nWH62HdsFrQtVsclOAvUxoqnE1e21b6yOgUt3LrcbXqGMEXm2X6bCiP33w4KOqYM9n7vJZVQ0S1fyy0Qd3Bwnr59as5FINUBjOgSEJT4MqSoji8T7sY9qg4= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR10MB5404.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230028)(4636009)(376002)(39860400002)(396003)(366004)(136003)(346002)(451199021)(6486002)(36756003)(86362001)(6666004)(4326008)(66476007)(6916009)(66946007)(66556008)(316002)(478600001)(8936002)(44832011)(5660300002)(41300700001)(8676002)(2906002)(30864003)(38100700002)(82960400001)(1076003)(186003)(6506007)(6512007)(2616005)(107886003)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: yfEfahnX1VeWIa9iZMQokimxoX5J+pQL3PWiCq2u5Nm6f/gA6woeMf2+6///MuLgrTh1/dd/CpA8l2xTa0sOx9YCYgGO3vRv6d8BaU8/9krftcD3lkrRUam5u04q9LqyNmFPhEcihrP2M+hwnhZNWmT0XI4lInwM1r1Mw92jwJ8H0t6Z9GBFom7J1oIXJc5AdnVKRv7rXD9GOadoOAYHRSqN4qr3t58kzafmA6jQS0mm5TAeOEavGAN6fRSllfgsYAR1J+HL/xiWOIw4F6yGqs26Ms2RNsKcKQ+nTYWFQhoUHtygAsk3gJR7Xb2s9dkq0R2B0XzT1cLmEiAwpmTqiAfN2lyb1+zu7JwX4pH9meOh7jbPqqBl/E1szp0/yZ4cBs7dNdfABAaus1PAxt8AfY5ccPo9F0wLkpZTzZh56eGPAn3fgdbUocJto0sBNZEiNAnRWpEcosmt/su8f0WLOUZFB0rykiEKoHLMeE9+GIjMjVhcZlR9+6xB/MNUFQiw5HCKal1VnFU1yu/HhZZ8l+1+Dx6f9wg68GVpwqHGk+cVgRPxtJEK1CUoPTZecOFfB8QdkbUzEb3KdEXTk5dIOgWHRlp2WEF5gW+7WmO6y7bJ8IcB+svJ/N8OuAvKad2597kslA/Wi7VthGR96C2szj2dAwP/wlpn4xXzmqKEd1cM24uadXUJ17Bz7m264wH/hpYUFXCMR0wJQIyMFLy6SVIDoQ07hmKvis288RzeDFaOroFFsvMWH80tX2qbAKiZu2jlm0Q8s3/sdiojh7MYhpM11OzozWqNR7U3k9f6pXVrT1cvgIfHjIAaot9wOtpEjGW8gqKCO/h0yApv4w3Pfs9ZK+h3s7yg/jxYo4X2AzL+sfx9VOxMCFvi0qsacF1I7PGOAV+CQRbWJjW3NNv28uFcwZyqpGYr7qgBhDylfDNIyrXowEIneHYOEE0tTOp1wj5L3yhSRXBFVXtW7BTZOHVspGqqK1igkOWEGGwpudHEU5yIRytXa1g+fprNGv5SysmY4/N891WkHXYc5mz1eeYNsE62hn9wwyOj9G9W7mkZ8CZpgxJcxV509X5n+yUIjXbiyZJpNETvrY0TNPoMxIjPY03CTHbnZ9zsN9AGG+uXiUAijCeBAUYTptYcC7r7xWqa4ZPaG3qeHXojaTkik8n9b2S750OyVx9dIkaQKcQ6qZbKM1/439HFzbqNjsAj293bIZDeEgg7jgFEQOHgMMGiY8Gx5BiDymCh3/zSKRnhDCVQZ7AotYIFTEnGT3hpE4TgRRUsxlfsMNjVYzu615h7icLDeufNzpnkCjbE90o94m+tiL78XARJBg5mk77sC37z/Gc96kjMuToQxPstQXVkzgMKbPqENO+HzN1OiFQv0wX/TPB9c86RVT1tZY3cBkLrt8FkyzrYrvPQPrvawcE6ayWG0XO3U1Kd7KEc8odyhFV1kca5f9q0pLRl6ki+66BNkLjNn0jR1HCY+4YJ+7XG62O53F+x546sD0iwSOOaWM+jVA4LTFti7cl5pf4KTaJHsqO/jwUjE0PVxJDEHdIXORrC1WzEKMxqR+m/9IPib8/wCvP/bg+hFySKwoVK4CKZD6RNouiu42C3w8vZ4Oe/m7eza72XfGh7QoQ5htN1pkDrX3G9Gs4q271Kl3DhODNyKNUtkUds2je89hHE6Q== X-OriginatorOrg: siemens.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9cb45a7e-4789-490f-3567-08db56aa618d X-MS-Exchange-CrossTenant-AuthSource: DB9PR10MB5404.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 May 2023 07:43:18.6816 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 38ae3bcd-9579-4fd4-adda-b42e1495d55a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: CgjS29HW9ixjjtVXPfCdHcqMkhesiZzFilFoJ2Qe9ipOgkXE0POH2oJZBZkqybcVESh968QWea7W3M+iI1r7UsD4aWzGd4b3X1CwHBFzNSQ= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB9PR10MB5354 X-Original-Sender: christian.storm@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=selector2 header.b=QyuJeuS0; arc=pass (i=1 spf=pass spfdomain=siemens.com dkim=pass dkdomain=siemens.com dmarc=pass fromdomain=siemens.com); spf=pass (google.com: domain of christian.storm@siemens.com designates 2a01:111:f400:7e1b::62f as permitted sender) smtp.mailfrom=christian.storm@siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: Christian Storm Reply-To: Christian Storm Precedence: list Mailing-list: list swupdate@googlegroups.com; contact swupdate+owners@googlegroups.com List-ID: X-Spam-Checked-In-Group: swupdate@googlegroups.com X-Google-Group-Id: 605343134186 List-Post: , List-Help: , List-Archive: , List-Unsubscribe: , Allow to compile-in multiple suricatta modules and choose one at run-time with sane fallback to a single compiled-in one. Defaults to hawkBit for backwards compatibility. This feature enables distributions to ship SWUpdate with multiple suricatta modules enabled, shifting the selection to run-time rather than compile-time. Signed-off-by: Christian Storm --- Changes in V2: * Added "See swupdate --help for options." to fatal exit in case multiple suricatta modules are available but none selected. * Fixed Coverity false positive CID 453970 in V1's suricatta.c:328 Makefile | 4 +- include/suricatta/server.h | 24 ++------- suricatta/Config.in | 30 ++++------- suricatta/Makefile | 11 ++-- suricatta/suricatta.c | 100 +++++++++++++++++++++++++++++++++---- 5 files changed, 115 insertions(+), 54 deletions(-) diff --git a/Makefile b/Makefile index 9f6a33a6..41abd303 100644 --- a/Makefile +++ b/Makefile @@ -362,8 +362,8 @@ include $(srctree)/Makefile.flags # This allow a user to issue only 'make' to build a kernel including modules # Defaults to vmlinux, but the arch makefile usually adds further targets -objs-y := core handlers bootloader -libs-y := corelib mongoose parser suricatta fs +objs-y := core handlers bootloader suricatta +libs-y := corelib mongoose parser fs bindings-y := bindings tools-y := tools diff --git a/include/suricatta/server.h b/include/suricatta/server.h index 07981df6..451211e9 100644 --- a/include/suricatta/server.h +++ b/include/suricatta/server.h @@ -16,17 +16,7 @@ * Cf. `server_hawkbit.c` for an example implementation targeted towards the * [hawkBit](https://projects.eclipse.org/projects/iot.hawkbit) server. */ - -extern server_op_res_t server_has_pending_action(int *action_id); -extern server_op_res_t server_install_update(void); -extern server_op_res_t server_send_target_data(void); -extern unsigned int server_get_polling_interval(void); -extern server_op_res_t server_start(const char *cfgfname, int argc, char *argv[]); -extern server_op_res_t server_stop(void); -extern server_op_res_t server_ipc(ipc_message *msg); -extern void server_print_help(void); - -static struct server_t { +typedef struct { server_op_res_t (*has_pending_action)(int *action_id); server_op_res_t (*install_update)(void); server_op_res_t (*send_target_data)(void); @@ -35,12 +25,6 @@ static struct server_t { server_op_res_t (*stop)(void); server_op_res_t (*ipc)(ipc_message *msg); void (*help)(void); -} server = {.has_pending_action = &server_has_pending_action, - .install_update = &server_install_update, - .send_target_data = &server_send_target_data, - .get_polling_interval = &server_get_polling_interval, - .start = &server_start, - .stop = &server_stop, - .ipc = &server_ipc, - .help = &server_print_help, -}; +} server_t; + +bool register_server(const char *name, server_t *server); diff --git a/suricatta/Config.in b/suricatta/Config.in index 29dc7386..0fde4401 100644 --- a/suricatta/Config.in +++ b/suricatta/Config.in @@ -5,6 +5,7 @@ menuconfig SURICATTA bool "Suricatta" depends on HAVE_LIBCURL + select CHANNEL_CURL help Suricatta is a daemon mode of SWUpdate. @@ -34,17 +35,10 @@ endmenu menu "Server" -choice - prompt "Server Type" - default SURICATTA_HAWKBIT - help - Choose the server type. Currently, just hawkBit is - supported. - config SURICATTA_HAWKBIT bool "hawkBit support" + default y depends on HAVE_JSON_C - select CHANNEL_CURL select JSON help Support for hawkBit server. @@ -55,9 +49,10 @@ comment "hawkBit support needs json-c" config SURICATTA_LUA bool "Suricatta Lua module" - depends on HAVE_LIBCURL depends on HAVE_LUA - select CHANNEL_CURL + depends on HAVE_JSON_C + select LUA + select JSON help Support for Suricatta modules in Lua. @@ -65,7 +60,10 @@ config SURICATTA_LUA provides JSON as Lua Tables to the Lua realm and enables channel result parsing to JSON per default. To enable, select 'libjson' in 'Parser Features'. - + +comment "Suricatta Lua module support needs Lua and json-c" + depends on !HAVE_LUA || !HAVE_JSON_C + config EMBEDDED_SURICATTA_LUA bool "Embed Suricatta Lua module in SWUpdate binary" depends on SURICATTA_LUA @@ -90,23 +88,17 @@ config EMBEDDED_SURICATTA_LUA_SOURCE Path to the Suricatta Lua module source code file to be embedded into the SWUpdate binary. -comment "Suricatta Lua module support needs libcurl and Lua" - depends on !HAVE_LIBCURL || !HAVE_LUA - -comment "Suricatta Lua module JSON support needs json-c" - depends on SURICATTA_LUA && !JSON - config SURICATTA_GENERAL bool "General HTTP support" depends on HAVE_JSON_C - select CHANNEL_CURL select JSON help Support for Simple HTTP coded server The server uses HTTP return codes to detect if an update is available. See documentation for more details. -endchoice +comment "General HTTP support needs json-c" + depends on !HAVE_JSON_C endmenu diff --git a/suricatta/Makefile b/suricatta/Makefile index 8fbb1ce9..f5b2bbdf 100644 --- a/suricatta/Makefile +++ b/suricatta/Makefile @@ -1,11 +1,14 @@ # Copyright (C) 2014-2018 Stefano Babic # # SPDX-License-Identifier: GPL-2.0-only -lib-$(CONFIG_SURICATTA) += suricatta.o common.o +obj-$(CONFIG_SURICATTA) += suricatta.o common.o ifneq ($(CONFIG_SURICATTA_HAWKBIT),) -lib-$(CONFIG_SURICATTA) += server_hawkbit.o +obj-$(CONFIG_SURICATTA) += server_hawkbit.o endif ifneq ($(CONFIG_SURICATTA_LUA),) -lib-$(CONFIG_SURICATTA) += server_lua.o +obj-$(CONFIG_SURICATTA) += server_lua.o endif -lib-$(CONFIG_SURICATTA_GENERAL) += server_general.o +ifneq ($(CONFIG_SURICATTA_GENERAL),) +obj-$(CONFIG_SURICATTA_GENERAL) += server_general.o +endif + diff --git a/suricatta/suricatta.c b/suricatta/suricatta.c index b10da933..32a044ee 100644 --- a/suricatta/suricatta.c +++ b/suricatta/suricatta.c @@ -30,9 +30,50 @@ static bool trigger = false; static struct option long_options[] = { {"enable", no_argument, NULL, 'e'}, {"disable", no_argument, NULL, 'd'}, + {"server", required_argument, NULL, 'S'}, {NULL, 0, NULL, 0}}; static sem_t suricatta_enable_sema; +typedef struct { + const char *name; + server_t *funcs; +} server_entry; + +static int servers_count = 0; +static server_entry *servers = NULL; +static server_t *server = NULL; + +bool register_server(const char *name, server_t *srv) +{ + if (!name || !srv) { + return false; + } + server_entry *tmp = realloc(servers, + (servers_count + 1) * sizeof(server_entry)); + if (!tmp) { + return false; + } + tmp[servers_count].name = name; + tmp[servers_count].funcs = srv; + servers_count++; + servers = tmp; + return true; +} + +static bool set_server(const char *name) +{ + if (!name || !strlen(name)) { + return false; + } + for (unsigned int i = 0; i < servers_count; i++) { + if (strcmp(name, servers[i].name) == 0) { + server = servers[i].funcs; + return true; + } + } + return false; +} + void suricatta_print_help(void) { fprintf( @@ -40,8 +81,17 @@ void suricatta_print_help(void) "\tsuricatta arguments (mandatory arguments are marked with '*'):\n" "\t -e, --enable Daemon enabled at startup (default).\n" "\t -d, --disable Daemon disabled at startup.\n" + "\t -S, --server Suricatta module to run.\n" ); - server.help(); + if (servers_count == 0) { + fprintf(stdout, "\tNo compiled-in suricatta modules!\n"); + return; + } + for (unsigned int i = 0; i < servers_count; i++) { + fprintf(stdout, "\tOptions for suricatta module '%s':\n", + servers[i].name); + (servers[i].funcs)->help(); + } } static server_op_res_t suricatta_enable(ipc_message *msg) @@ -103,7 +153,7 @@ static server_op_res_t suricatta_ipc(int fd) result = suricatta_enable(&msg); break; default: - result = server.ipc(&msg); + result = server->ipc(&msg); break; } @@ -120,6 +170,12 @@ static int suricatta_settings(void *elem, void __attribute__ ((__unused__)) *da get_field(LIBCFG_PARSER, elem, "enable", &enable); + char cfg_server[128]; + GET_FIELD_STRING_RESET(LIBCFG_PARSER, elem, "server", cfg_server); + if (strlen(cfg_server) && set_server(cfg_server)) { + TRACE("Suricatta module '%s' selected by configuration file.", cfg_server); + } + return 0; } @@ -227,9 +283,16 @@ int start_suricatta(const char *cfgfname, int argc, char *argv[]) optind = 1; opterr = 0; - while ((choice = getopt_long(argc, argv, "de", + while ((choice = getopt_long(argc, argv, "deS:", long_options, NULL)) != -1) { switch (choice) { + case 'S': + if (!set_server(optarg)) { + ERROR("Suricatta module '%s' not registered.", optarg); + exit(EXIT_FAILURE); + } + TRACE("Suricatta module '%s' selected by command line option.", optarg); + break; case 'e': enable = true; break; @@ -240,6 +303,25 @@ int start_suricatta(const char *cfgfname, int argc, char *argv[]) break; } } + if (!server) { + if (servers_count == 0) { + ERROR("No compiled-in suricatta modules!"); + exit(EXIT_FAILURE); + } + if (servers_count == 1) { + if (!set_server(servers[0].name)) { + ERROR("Internal Error: One suricatta module " + "available but not found?!"); + exit(EXIT_FAILURE); + } + TRACE("Default suricatta module '%s' selected.", servers[0].name); + + } else { + ERROR("Multiple suricatta modules available but none " + "selected. See swupdate --help for options."); + exit(EXIT_FAILURE); + } + } if (sem_init(&suricatta_enable_sema, 0, 0)) { ERROR("Initialising suricatta enable semaphore failed"); @@ -254,7 +336,7 @@ int start_suricatta(const char *cfgfname, int argc, char *argv[]) /* * Now start a specific implementation of the server */ - if (server.start(cfgfname, argc, serverargv) != SERVER_OK) { + if (server->start(cfgfname, argc, serverargv) != SERVER_OK) { exit(EXIT_FAILURE); } free(serverargv); @@ -263,13 +345,13 @@ int start_suricatta(const char *cfgfname, int argc, char *argv[]) while (true) { if (enable || trigger) { trigger = false; - switch (server.has_pending_action(&action_id)) { + switch (server->has_pending_action(&action_id)) { case SERVER_UPDATE_AVAILABLE: DEBUG("About to process available update."); - server.install_update(); + server->install_update(); break; case SERVER_ID_REQUESTED: - server.send_target_data(); + server->send_target_data(); trigger = true; break; case SERVER_EINIT: @@ -281,9 +363,9 @@ int start_suricatta(const char *cfgfname, int argc, char *argv[]) } } - for (int wait_seconds = server.get_polling_interval(); + for (int wait_seconds = server->get_polling_interval(); wait_seconds > 0; - wait_seconds = min(wait_seconds, (int)server.get_polling_interval())) { + wait_seconds = min(wait_seconds, (int)server->get_polling_interval())) { wait_seconds = suricatta_wait(wait_seconds); }