From patchwork Tue Mar 9 16:40:30 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Storm, Christian" X-Patchwork-Id: 1450021 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::23a; helo=mail-lj1-x23a.google.com; envelope-from=swupdate+bncbdd6bwv65qpbbaokt2bamgqeb2rs25q@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.a=rsa-sha256 header.s=20161025 header.b=XHvZYqOv; dkim-atps=neutral Received: from mail-lj1-x23a.google.com (mail-lj1-x23a.google.com [IPv6:2a00:1450:4864:20::23a]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4Dw1DG57Kfz9sCD for ; Wed, 10 Mar 2021 03:40:43 +1100 (AEDT) Received: by mail-lj1-x23a.google.com with SMTP id x11sf5926418ljm.5 for ; Tue, 09 Mar 2021 08:40:43 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1615308034; cv=pass; d=google.com; s=arc-20160816; b=Xc0i5Wu9pH5EMW8y5L7yifaqRkHRlKwX/78O60+Qp5LGterASYEI4mVAGgGnPotSi3 SWznjsAr5TScE+XoVyuI6M837MJZopBaVJZWJxpnNFIZHd13dPR0Bb600YKJIGB31oDI beXo6UBuYHh34sodaB4jtmNe35oHVAEOINiTn/EXK0iSfSqOxGtsxM3VJUJSBLO8tFt1 Xhmm0Z/goACWGRg4m5JzrGowObrMtWfgVx6PcNGodk4v7brCENVH+vkjfeGkjFLPaFkj rqDd5LYFxQT2bW//VyoPUWvLoy8I1CU8ncgDeUZeWuMFy7ZdkNOAy/2nACs9LXlX4vUm t6gw== ARC-Message-Signature: i=2; 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:mime-version:message-id:date :subject:cc:to:from:sender:dkim-signature; bh=QJuNU8n58YCUPVhIS5Iq+nCrk5dAphds7ki9lxMuthE=; b=e4EiCtudEwCqrjjwqayIHvw+XZsox5ER98U/NRXX2LrjAwWFyGFAfNTPSdwXwUqY9q 8Y5o4wH0Nwa4+nbUjEhMrhkR8d7yfXYVpozVaCb4vskdTtGx0ydg9uCzqyTX76TL5Tg/ xnGynJL/vvfJadQf3N0Qyd1U6qmtRGA2nj33nw3M2MJ0x4xGmEuX76gLhcBP4vzQl6fu uAfTqgqH2zJ2oxezEYy6j9lUKLAB8+VF6R7fL6WgYGOCMfGNCett6vRkkz39zWbi2iWy Zgfo2lJlrb9z19DWT0HcF1d0igPjlhsDyO7j3T/ngCO1FguaZ6tZ7RlADjTO6B9TMjBy KgMg== ARC-Authentication-Results: i=2; gmr-mx.google.com; spf=pass (google.com: domain of christian.storm@siemens.com designates 192.35.17.28 as permitted sender) smtp.mailfrom=christian.storm@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:mime-version :x-original-sender:x-original-authentication-results:precedence :mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=QJuNU8n58YCUPVhIS5Iq+nCrk5dAphds7ki9lxMuthE=; b=XHvZYqOv/xO2q5AtljKzuYJ/QJkJhykxXuy0qzsAqeQ7nkYoBcDRrMKmekT1GDE/O8 J9X9JW4ijBPyjYDdnNFsJ/uj6temW+C/yc1h8PLr8XkqL1vZuwf67710GHzoWs4/enqV WfRNqZngTjt7k2IHeSemKf8fEST7ljNKYLfvZ9SijJ5p2XePpuwhX90pVfB0DQ9y9ztE lc29R3mXAqkQvHyngh7bJFWNkhKvWQ2dv/IVKHZYj4MUk0hl3cVpxZg15Vp3i04tPj5b N2O+dAfN8MklMe4GA/UjaBeofzsG11N9nfs9ZG4cSsozPYee1shUZ6Q9z9ypBKWerv3H smTw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:from:to:cc:subject:date:message-id :mime-version:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:x-spam-checked-in-group:list-post :list-help:list-archive:list-subscribe:list-unsubscribe; bh=QJuNU8n58YCUPVhIS5Iq+nCrk5dAphds7ki9lxMuthE=; b=XEO41K/bxJNIxYf8wksUjXlmQp7AJKSA23mSVwEmfRFlizY0DCxS0ZTyLDLT3HSS8u sGmII0MGy9+R0Da9c4jiYtAZzDNZCK/scIlARMp74fH50aCRyh+4aJmcAa5Cvm1FPZU1 y+/B7BTpcChf5X1iF+qh6ga55N800tOeDFFit8ameFs7WCcZ+0bWiZ6VXvS+I2W5aqEC JicYUqGT6jIh7ZaOLL/VdlHWIs5KkF/WAtD/wHuYADfXpT8vYG1yQm3qfmhmYS2vMn7M xfR8flAOqr0H7rk/KH2arhpadHIWIcttD7pmbE6FhXKLSCNmyiwG/xjfuSJCc5G0GI0T 5ciw== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM533OGw35/eUI4ko7nLEA5p39FACGHNmoMgbW0IVQKwu8ompKQVmE IwdS+b1p7NZ3AJE96rGbT/4= X-Google-Smtp-Source: ABdhPJxxfNgNL+XXXQj5HCl4ONMTJEn8L5fkFYAtoBOzS/d5FVizy/y93Pq0i1sofg/lBu1ooLe1Mg== X-Received: by 2002:a19:434a:: with SMTP id m10mr14161281lfj.2.1615308033919; Tue, 09 Mar 2021 08:40:33 -0800 (PST) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a05:6512:3993:: with SMTP id j19ls4428224lfu.3.gmail; Tue, 09 Mar 2021 08:40:33 -0800 (PST) X-Received: by 2002:ac2:465c:: with SMTP id s28mr17871816lfo.135.1615308032931; Tue, 09 Mar 2021 08:40:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615308032; cv=none; d=google.com; s=arc-20160816; b=s4RCSlYvcLLhvg/VGsY9IHpyRvAxOzaZe1HqebgXs3S0biH6Z91xXcB+vRNPBHiBZM pq0SaqKMjqjAMc4SkC5T2jLo+dUN0b6fOEiQB7U6glvoOUH0Jm3uha11Ox96ALfaHtdK 3iL1mQmSxgnxEkZSPzkFv4khDdeDRkyq+OloOKy2WYUQWi6lwiMcKYakJpJenVZ12ybb JSuNsjlHiKrqCjCy/Tvx9zCSIUbFGxSYbbIFyAAemDzyyXj6/mu3v5jHOOp9c7bspVXG 2L/BeE0+bMZZcKoqc7cnQb63+5Y+ZYHkKSDqQ8bi0ZgDB8YQvbN2RGQUTawu+b49tgBp J94A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from; bh=8keJtg7pB1PgKGKwY6ajQ6uH3+xwznlfJNQ5vFZJd/M=; b=DJa6JD4BgBSvmRQHHay2aT3Q7bxCx+sstLMJ38cl6nGfcW5ZsW74HhXusRXskqFbPT u1yLfbPdC2wARXOcEXOWBGQjwHs1Esa+EFXyjs2zSezvQ+uVRw56yiQk7ntyvyFL5D+k pqELSEhH3SiDGaRb1Rnebd6G3soytTzBFkVN2/IWAlar0DXT74T0vp2ZfuoaqW0F9U3x mm/nxQHQc7PJZlNQ8H7ls/3q+KWL22qkFHOWmkDRhPIC9POVta+C4+bE3mUDCTBbHL8B IOGBzWmlFz/EobW0mr826H+lTy4m5CNSBVQIA0eNohAQY4rpUggWYxz0EPPe8WJCzTfN WfVg== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of christian.storm@siemens.com designates 192.35.17.28 as permitted sender) smtp.mailfrom=christian.storm@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com Received: from goliath.siemens.de (goliath.siemens.de. [192.35.17.28]) by gmr-mx.google.com with ESMTPS id a10si197473lfs.11.2021.03.09.08.40.32 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 09 Mar 2021 08:40:32 -0800 (PST) Received-SPF: pass (google.com: domain of christian.storm@siemens.com designates 192.35.17.28 as permitted sender) client-ip=192.35.17.28; Received: from mail2.siemens.de (mail2.siemens.de [139.25.208.11]) by goliath.siemens.de (8.15.2/8.15.2) with ESMTPS id 129GeWgF028893 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 9 Mar 2021 17:40:32 +0100 Received: from MD1ZFJVC.ad001.siemens.net ([139.22.32.51]) by mail2.siemens.de (8.15.2/8.15.2) with ESMTP id 129GeVXq022509; Tue, 9 Mar 2021 17:40:32 +0100 From: Christian Storm To: swupdate@googlegroups.com Cc: Christian Storm , Dominik Tacke Subject: [swupdate] [PATCH] Add global device ID Date: Tue, 9 Mar 2021 17:40:30 +0100 Message-Id: <20210309164030.27361-1-christian.storm@siemens.com> X-Mailer: git-send-email 2.30.1 MIME-Version: 1.0 X-Original-Sender: christian.storm@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; spf=pass (google.com: domain of christian.storm@siemens.com designates 192.35.17.28 as permitted sender) smtp.mailfrom=christian.storm@siemens.com; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=siemens.com 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: , From: Dominik Tacke Currently, a device ID is used for suricatta modules only. However, the remote handler can make use of a device ID as well such that this device ID is used to construct the remote handler's ZeroMQ socket name, enabling multiple SWUpdate instances to serve different remotes per different socket names. If no explicit suricatta device ID is given, the global device ID is used, making the special suricatta device ID argument optional the global device ID option is given. Signed-off-by: Dominik Tacke Signed-off-by: Christian Storm --- core/swupdate.c | 10 +++++++++- doc/source/swupdate.rst | 8 ++++++++ examples/configuration/swupdate.cfg | 3 +++ handlers/remote_handler.c | 8 +++++--- include/swupdate.h | 1 + suricatta/server_hawkbit.c | 12 ++++++++++++ 6 files changed, 38 insertions(+), 4 deletions(-) diff --git a/core/swupdate.c b/core/swupdate.c index e959568..f823f83 100644 --- a/core/swupdate.c +++ b/core/swupdate.c @@ -84,6 +84,7 @@ static struct option long_options[] = { {"no-reinstalling", required_argument, NULL, 'R'}, {"no-transaction-marker", no_argument, NULL, 'M'}, {"no-state-marker", no_argument, NULL, 'm'}, + {"device-id", required_argument, NULL, 'D'}, #ifdef CONFIG_SIGNED_IMAGES {"key", required_argument, NULL, 'k'}, {"ca-path", required_argument, NULL, 'k'}, @@ -156,6 +157,7 @@ static void usage(char *programname) " -M, --no-transaction-marker : disable setting bootloader transaction marker\n" " -m, --no-state-marker : disable setting update state in bootloader\n" " -o, --output : saves the incoming stream\n" + " -D, --device-id : defines this device's ID\n" " -v, --verbose : be verbose, set maximum loglevel\n" " --version : print SWUpdate version and exit\n" #ifdef CONFIG_HW_COMPATIBILITY @@ -374,6 +376,8 @@ static int read_globals_settings(void *elem, void *data) /* by convention, errors in a configuration section are ignored */ (void)parse_image_selector(software_select, sw); } + GET_FIELD_STRING(LIBCFG_PARSER, elem, + "device-id", sw->globals.device_id); return 0; } @@ -482,7 +486,7 @@ int main(int argc, char **argv) #endif memset(main_options, 0, sizeof(main_options)); memset(image_url, 0, sizeof(image_url)); - strcpy(main_options, "vhni:e:q:l:Lcf:p:P:o:N:R:Mm"); + strcpy(main_options, "vhni:e:q:l:Lcf:p:P:o:N:R:MmD:"); #ifdef CONFIG_MTD strcat(main_options, "b:"); #endif @@ -633,6 +637,10 @@ int main(int argc, char **argv) optarg, sizeof(swcfg.globals.publickeyfname)); break; + case 'D': + strlcpy(swcfg.globals.device_id, optarg, + sizeof(swcfg.globals.device_id)); + break; case '1': swcfg.globals.cert_purpose = parse_cert_purpose(optarg); break; diff --git a/doc/source/swupdate.rst b/doc/source/swupdate.rst index 22d135a..dd1bc6e 100644 --- a/doc/source/swupdate.rst +++ b/doc/source/swupdate.rst @@ -548,6 +548,12 @@ Command line parameters +-------------+----------+--------------------------------------------+ | -p | string | Execute post-update command. | +-------------+----------+--------------------------------------------+ +| -D | string | Define a device ID. This ID will be used | +| | | for suricatta when no hawkBit ID is given. | +| | | This device ID will be blended into the | +| | | remote handler's zmq socket. | ++-------------+----------+--------------------------------------------+ + Downloader command line parameters .................................. @@ -592,6 +598,8 @@ Mandatory arguments are marked with '\*': | | | e.g., localhost:8080 | +-------------------------+----------+--------------------------------------------+ | -i | integer | \* The device ID to communicate to hawkBit.| +| | | This argument is optional if a device ID | +| | | argument is given to SWUpdate (-D option) | +-------------------------+----------+--------------------------------------------+ | -c | integer | Confirm update status to server: 1=AGAIN, | | | | 2=SUCCESS, 3=FAILED | diff --git a/examples/configuration/swupdate.cfg b/examples/configuration/swupdate.cfg index a97f982..36356d1 100644 --- a/examples/configuration/swupdate.cfg +++ b/examples/configuration/swupdate.cfg @@ -40,6 +40,8 @@ # set expected common name of signer certificate # select: : string # select software images set and source (,) +# device-id : string +# define a device ID globals : { @@ -48,6 +50,7 @@ globals : syslog = true; /* public-key-file = "test.pem";*/ mtd-blacklist = "0 1 2 3 4 5 6"; + device-id = "Default_ID"; }; # logcolors : set colors for output to stdout / stderr diff --git a/handlers/remote_handler.c b/handlers/remote_handler.c index 275859f..bc3b642 100644 --- a/handlers/remote_handler.c +++ b/handlers/remote_handler.c @@ -159,8 +159,10 @@ static int install_remote_image(struct img_type *img, struct RHmsg RHmessage; char bufcmd[80]; - len = strlen(img->type_data) + strlen(CONFIG_SOCKET_REMOTE_HANDLER_DIRECTORY) + strlen("ipc://") + 4; + char* device_id = get_swupdate_cfg()->globals.device_id; + len = strlen(img->type_data) + strlen(CONFIG_SOCKET_REMOTE_HANDLER_DIRECTORY) + + strlen(device_id) + strlen("ipc://") + 4; /* * Allocate maximum string */ @@ -169,8 +171,8 @@ static int install_remote_image(struct img_type *img, ERROR("Not enough memory"); return -ENOMEM; } - snprintf(connect_string, len, "ipc://%s%s", CONFIG_SOCKET_REMOTE_HANDLER_DIRECTORY, - img->type_data); + snprintf(connect_string, len, "ipc://%s%s%s", CONFIG_SOCKET_REMOTE_HANDLER_DIRECTORY, + device_id, img->type_data); ret = zmq_connect(request, connect_string); if (ret < 0) { diff --git a/include/swupdate.h b/include/swupdate.h index e607ed6..bc55970 100644 --- a/include/swupdate.h +++ b/include/swupdate.h @@ -125,6 +125,7 @@ enum { struct swupdate_global_cfg { int verbose; char mtdblacklist[SWUPDATE_GENERAL_STRING_SIZE]; + char device_id[SWUPDATE_GENERAL_STRING_SIZE]; int loglevel; int syslog_enabled; int dry_run; diff --git a/suricatta/server_hawkbit.c b/suricatta/server_hawkbit.c index ed4c800..da133ba 100644 --- a/suricatta/server_hawkbit.c +++ b/suricatta/server_hawkbit.c @@ -1766,6 +1766,18 @@ server_op_res_t server_start(char *fname, int argc, char *argv[]) } } + /* + * If no hawkBit device ID has been set, check if the global + * device ID is set and, if yes, use it as hawkBit device ID. + */ + if ((mandatory_argument_count & ID_BIT) != ID_BIT) { + char* id = get_swupdate_cfg()->globals.device_id; + if (strnlen(id, SWUPDATE_GENERAL_STRING_SIZE)) { + SETSTRING(server_hawkbit.device_id, id); + mandatory_argument_count |= ID_BIT; + } + } + if (mandatory_argument_count != ALL_MANDATORY_SET) { fprintf(stderr, "Mandatory arguments missing!\n"); suricatta_print_help();