From patchwork Mon Oct 23 02:25:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felix Moessbauer X-Patchwork-Id: 1853473 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org 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=20230601 header.b=n01cj08n; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4864:20::13f; helo=mail-lf1-x13f.google.com; envelope-from=swupdate+bncbcyiz4m3xakrbsvt26uqmgqeix7ogbi@googlegroups.com; receiver=patchwork.ozlabs.org) Received: from mail-lf1-x13f.google.com (mail-lf1-x13f.google.com [IPv6:2a00:1450:4864:20::13f]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4SDJwH2wgYz23jn for ; Mon, 23 Oct 2023 13:26:23 +1100 (AEDT) Received: by mail-lf1-x13f.google.com with SMTP id 2adb3069b0e04-507ee71fc4esf1463359e87.2 for ; Sun, 22 Oct 2023 19:26:22 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1698027979; cv=pass; d=google.com; s=arc-20160816; b=ENjFXbqfkJ8twpAUNFyyx1oB614g0+AblFeM/o8h8bBYVNFcXoEI6TzDu4gz82FqUG 7mkzMRQFnUyH0QHyGAjO5coaQbORxyEm2/wjcL0Gm1iTau8bcEuVIsYaJWkQDvO8uiWq iGP16tSZVORzNbj9WdgHw9pj5a9yT4/v31ZrYcbJM1RlKdLd6yUlFC/viExNWFBcSShv C0sUaJjomsj5hWJg/STmxkxMLGmWmNCMAoBsnH3YbpfzkmmmcYhEtWh52Rr6VqhSs+Yd sdOW9YVq/EDdPrUplLyxOoUFN8mUCRdAYztRUH9hjquk0Prra53kM/fs64U/MSPPn1V9 bLTg== 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:reply-to:feedback-id:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=yumNYjbRAS+CmcERFcEVbl9ErKMyWxoiS6+pDAu+ris=; fh=ma+8xbVUwT7un24q/wzzAlfUmlwoIqKltsq5mz8D4ig=; b=cusgkZwWSXKjb84SHBFZy9Y2cR0WxE41GNDDmYZIijqjChkUQjrtg5hz9JzGfshU73 GO3vdAlJstcpoS3pOKSnUG/bwN/F5akhZPrRx0Zvql9kvqSGhoX9tS0NeK1bO5Ayju4R ookY05H78Q/U4skexEAPSVF1EXSOt/53nLybqPV9+U7RRkNORJBHxRTAX8y/g2tvUx7m dWQxoaqbDrSKytY7GlysNxXEQCWNOu1O8VibCk8Dohc4gSPYLhSGbl/Ukd8O89b8WXpM K4OPYrmMH+C4PHW4vW73bFzA2Sj7hvzXRqoyu+SEWh4W+pSnTKNYD+iuLdMEpaUdfn11 ZOuQ== ARC-Authentication-Results: i=2; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=lwUgUCxf; spf=pass (google.com: domain of fm-72506-2023102302261503c0daf9fa7e46fb0d-h4sykh@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) smtp.mailfrom=fm-72506-2023102302261503c0daf9fa7e46fb0d-H4SYKh@rts-flowmailer.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=20230601; t=1698027979; x=1698632779; darn=patchwork.ozlabs.org; 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:feedback-id :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:from:to:cc:subject:date:message-id:reply-to; bh=yumNYjbRAS+CmcERFcEVbl9ErKMyWxoiS6+pDAu+ris=; b=n01cj08n8ba5eCE4h3to5T50bsEXgR1a6fEt+Q7qEk1ORsaXidwryzHG9/gDca4wlz 7eCQDhOIu9uEa7ahG/2g/Ptxe+fmQsZYN3uDgJEcf8ZCWoDP3QnVWp61/EKMuC7vo0Rc oSGIyTrJ21N6/YDeyJvjZSxSp12Ra6s5VhOH6L5fyXrlPemDD1T4n0qTzhnxHJloVZhg doVMpCml2flllKOXZ2Emv2i9tjdtLcakWp7Jie/6DfRlUUPUfZ/ce1DIJi51M8MSr2Qd RUy72dpMUappiybwOn35qjZcaEZgNBzNbvWETYuW9rR4uf/B1+bZs7EsdEs2lsgFrVu4 /6vQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698027979; x=1698632779; 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:feedback-id :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=yumNYjbRAS+CmcERFcEVbl9ErKMyWxoiS6+pDAu+ris=; b=cn8p9lLp7IpgiXH5mXIfXS+OErIsYM6ulGYsR6hqcUh2RfxGJBlCpkZ2+CLPwjFfn9 AmrCbCjDcsRPdXhF1Tg/hm97YuyUBCQeD5EV1YttfO8U9an87oaUGAks300fBJSggUCn J7IbYEMWDCC/iiaU8dkrTKhA4WC5fPW787W/BUSHoBeTOULY0VR/pUs5DXQamdbUcjLB mN2AFuZffue21QBQN5qcuWkaekacwRzAdRjtIiGJLAVN9LK7ofxwEnkhDFgSzUTWXk/F 4lpmNn1xzxBXRisRTD6AIX2oiYuvRZ+LeI+WP0VNgvJUpHF6p75rn8X31Hr7eB64OCc+ 9CqA== X-Gm-Message-State: AOJu0YxjqLmUMf8txGcikEQItIUmaXRn5kdIOEtHMIimuxVVdqJl3gIb YWY6j7iTKP0phSmCTAygHFQ= X-Google-Smtp-Source: AGHT+IG7KKTX2p30VetsfnD8cGbfKZy1MuI/p+JJvvSBXzg1HkkRbS1pZaUudHnFI6vBz6kBXjSntQ== X-Received: by 2002:a19:711c:0:b0:500:aa41:9d67 with SMTP id m28-20020a19711c000000b00500aa419d67mr4703138lfc.8.1698027979097; Sun, 22 Oct 2023 19:26:19 -0700 (PDT) X-BeenThere: swupdate@googlegroups.com Received: by 2002:a05:6512:ad0:b0:503:d3c2:f4fa with SMTP id n16-20020a0565120ad000b00503d3c2f4fals986383lfu.0.-pod-prod-05-eu; Sun, 22 Oct 2023 19:26:16 -0700 (PDT) X-Received: by 2002:a19:2d46:0:b0:502:f2a8:d391 with SMTP id t6-20020a192d46000000b00502f2a8d391mr6043904lft.45.1698027976367; Sun, 22 Oct 2023 19:26:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698027976; cv=none; d=google.com; s=arc-20160816; b=nG7MiwY37YF+GSqlWrwZOFkpUcTnVwOIFFTbyazRNcrEXsdj9KxtVCNII9ZYZ/zoIE fV/KXW3BLmlyxLuEQ8rMCfhT/+GYL5kbEEqGPJYHTgmPj127zwHUMiAKpDRM/Lz7DUFc oVcwW6nz9I81VFNlzhgkZGZxTw30XOsEbXcU99nM4fChhLrtUI5q7i74dMiycJ2KfoFn bHoYMCYG9cyTUezsA5onfBKIaXI0raFJk0OgjcuQfdPgmzeDolZHWe81eROKX6X5cQZg yAbmkYceY20ED98FDEUiS82tMJujbCsdy12vUi7QJ857Hdy89ZFstMm5e1Zw4uzIc359 q22Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=feedback-id:content-transfer-encoding:mime-version:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature; bh=UXLNHIb8ujVnVUhycb4TX0Y+xx9eP8qp0gjxzKipek0=; fh=ma+8xbVUwT7un24q/wzzAlfUmlwoIqKltsq5mz8D4ig=; b=lzF9K4uEs6qRT/iC/kZZQ/nOBZLDl32z3dVY0F+kkQyqn4cMtK2ISRx4RaMz5DcFTg F90QPPydBZUbd2rOax2cUZARZnHgRjJnioXO4AztQjSNWA9mMyN0EEp6uY2ZLIJ8Pbdx L3SdJB4s/alQYwuU4JdYSY3ssON24e1U9LjSBprVN7a+9iIGCSsTf60kQmAxctx2D/ch cCX2JxJoYQ3nwlPSvfKX8JqHCFEIyg95RMAhnlNbHaQidhkwAANOjzVBnvg+8Xe7KG9l E3Y8qgPozDGqhow4mn1QHJE1GEoZk8k2GsH6A4howNmHEz0wOi87tx+MYqOWIvAseNEY uKSA== ARC-Authentication-Results: i=1; gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=lwUgUCxf; spf=pass (google.com: domain of fm-72506-2023102302261503c0daf9fa7e46fb0d-h4sykh@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) smtp.mailfrom=fm-72506-2023102302261503c0daf9fa7e46fb0d-H4SYKh@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com Received: from mta-65-228.siemens.flowmailer.net (mta-65-228.siemens.flowmailer.net. [185.136.65.228]) by gmr-mx.google.com with ESMTPS id j21-20020a05651231d500b00505701698aasi186105lfe.2.2023.10.22.19.26.16 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sun, 22 Oct 2023 19:26:16 -0700 (PDT) Received-SPF: pass (google.com: domain of fm-72506-2023102302261503c0daf9fa7e46fb0d-h4sykh@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) client-ip=185.136.65.228; Received: by mta-65-228.siemens.flowmailer.net with ESMTPSA id 2023102302261503c0daf9fa7e46fb0d for ; Mon, 23 Oct 2023 04:26:15 +0200 X-Patchwork-Original-From: "'Felix Moessbauer' via swupdate" From: Felix Moessbauer To: swupdate@googlegroups.com Cc: quirin.gylstorff@siemens.com, christian.storm@siemens.com, Felix Moessbauer Subject: [swupdate] [PATCH 2/5] move listener_create to network_utils.c Date: Mon, 23 Oct 2023 10:25:26 +0800 Message-Id: <20231023022529.15081-3-felix.moessbauer@siemens.com> In-Reply-To: <20231023022529.15081-1-felix.moessbauer@siemens.com> References: <20231023022529.15081-1-felix.moessbauer@siemens.com> MIME-Version: 1.0 X-Flowmailer-Platform: Siemens Feedback-ID: 519:519-72506:519-21489:flowmailer X-Original-Sender: felix.moessbauer@siemens.com X-Original-Authentication-Results: gmr-mx.google.com; dkim=pass header.i=@siemens.com header.s=fm1 header.b=lwUgUCxf; spf=pass (google.com: domain of fm-72506-2023102302261503c0daf9fa7e46fb0d-h4sykh@rts-flowmailer.siemens.com designates 185.136.65.228 as permitted sender) smtp.mailfrom=fm-72506-2023102302261503c0daf9fa7e46fb0d-H4SYKh@rts-flowmailer.siemens.com; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=siemens.com X-Original-From: Felix Moessbauer Reply-To: Felix Moessbauer 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: , The listener_create which previously was implemented in network_thread.c was shared across multiple components. We now move that function to the new network_utils.c file. By that, creation and cleanup happen in the same unit. Signed-off-by: Felix Moessbauer Acked-by: Stefano Babic --- core/network_thread.c | 61 ----------------------------------- core/network_utils.c | 64 +++++++++++++++++++++++++++++++++++++ core/progress_thread.c | 2 +- include/network_interface.h | 1 - include/network_utils.h | 9 ++++++ 5 files changed, 74 insertions(+), 63 deletions(-) diff --git a/core/network_thread.c b/core/network_thread.c index 936b8cf..ca23908 100644 --- a/core/network_thread.c +++ b/core/network_thread.c @@ -36,12 +36,6 @@ #include "state.h" #include "swupdate_vars.h" -#ifdef CONFIG_SYSTEMD -#include -#endif - -#define LISTENQ 1024 - #define NUM_CACHED_MESSAGES 100 #define DEFAULT_INTERNAL_TIMEOUT 60 @@ -222,61 +216,6 @@ static void network_notifier(RECOVERY_STATUS status, int error, int level, const pthread_mutex_unlock(&msglock); } -int listener_create(const char *path, int type) -{ - struct sockaddr_un servaddr; - int listenfd = -1; - -#ifdef CONFIG_SYSTEMD - if (sd_booted()) { - for (int fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + sd_listen_fds(0); fd++) { - if (sd_is_socket_unix(fd, SOCK_STREAM, 1, path, 0)) { - listenfd = fd; - break; - } - } - if (listenfd == -1) { - TRACE("got no socket at %s from systemd", path); - } else { - TRACE("got socket fd=%d at %s from systemd", listenfd, path); - } - } -#endif - - if (listenfd == -1) { - TRACE("creating socket at %s", path); - listenfd = socket(AF_LOCAL, type, 0); - if (listenfd < 0) { - return -1; - } - unlink(path); - bzero(&servaddr, sizeof(servaddr)); - servaddr.sun_family = AF_LOCAL; - strlcpy(servaddr.sun_path, path, sizeof(servaddr.sun_path) - 1); - if(register_socket_unlink(path) != 0){ - ERROR("Out of memory, skipping..."); - return -1; - } - if (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) { - close(listenfd); - return -1; - } - - if (chmod(path, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) < 0) - WARN("chmod cannot be set on socket, error %s", strerror(errno)); - } - - if (fcntl(listenfd, F_SETFD, FD_CLOEXEC) < 0) - WARN("Could not set %d as cloexec: %s", listenfd, strerror(errno)); - - if (type == SOCK_STREAM) - if (listen(listenfd, LISTENQ) < 0) { - close(listenfd); - return -1; - } - return listenfd; -} - static void cleanum_msg_list(void) { struct msg_elem *notification; diff --git a/core/network_utils.c b/core/network_utils.c index fd539c1..350c7f6 100644 --- a/core/network_utils.c +++ b/core/network_utils.c @@ -9,11 +9,21 @@ #include #include #include +#include +#include +#include +#include + +#ifdef CONFIG_SYSTEMD +#include +#endif #include "bsdqueue.h" #include "network_utils.h" #include "util.h" +#define LISTENQ 1024 + struct socket_meta { char *path; SIMPLEQ_ENTRY(socket_meta) next; @@ -23,6 +33,60 @@ static pthread_mutex_t sockets_toclose_lock = PTHREAD_MUTEX_INITIALIZER; SIMPLEQ_HEAD(self_sockets, socket_meta); static struct self_sockets sockets_toclose; + +int listener_create(const char *path, int type) +{ + struct sockaddr_un servaddr; + int listenfd = -1; + +#ifdef CONFIG_SYSTEMD + for (int fd = SD_LISTEN_FDS_START; fd < SD_LISTEN_FDS_START + sd_listen_fds(0); fd++) { + if (sd_is_socket_unix(fd, SOCK_STREAM, 1, path, 0)) { + listenfd = fd; + break; + } + } + if (listenfd == -1) { + TRACE("got no socket at %s from systemd", path); + } else { + TRACE("got socket fd=%d at %s from systemd", listenfd, path); + } +#endif + + if (listenfd == -1) { + TRACE("creating socket at %s", path); + listenfd = socket(AF_LOCAL, type, 0); + if (listenfd < 0) { + return -1; + } + unlink(path); + bzero(&servaddr, sizeof(servaddr)); + servaddr.sun_family = AF_LOCAL; + strlcpy(servaddr.sun_path, path, sizeof(servaddr.sun_path) - 1); + if(register_socket_unlink(path) != 0){ + ERROR("Out of memory, skipping..."); + return -1; + } + if (bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) { + close(listenfd); + return -1; + } + + if (chmod(path, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH) < 0) + WARN("chmod cannot be set on socket, error %s", strerror(errno)); + } + + if (fcntl(listenfd, F_SETFD, FD_CLOEXEC) < 0) + WARN("Could not set %d as cloexec: %s", listenfd, strerror(errno)); + + if (type == SOCK_STREAM) + if (listen(listenfd, LISTENQ) < 0) { + close(listenfd); + return -1; + } + return listenfd; +} + int register_socket_unlink(const char* path){ struct socket_meta *socketm = malloc(sizeof(*socketm)); if(!socketm){ diff --git a/core/progress_thread.c b/core/progress_thread.c index baa3899..1a27ca5 100644 --- a/core/progress_thread.c +++ b/core/progress_thread.c @@ -28,7 +28,7 @@ #include "util.h" #include "pctl.h" #include "network_ipc.h" -#include "network_interface.h" +#include "network_utils.h" #include #include "generated/autoconf.h" diff --git a/include/network_interface.h b/include/network_interface.h index a636d99..0a60cad 100644 --- a/include/network_interface.h +++ b/include/network_interface.h @@ -8,7 +8,6 @@ #pragma once void *network_initializer(void *data); void *network_thread(void *data); -int listener_create(const char *path, int type); extern bool stream_wkup; extern pthread_mutex_t stream_mutex; diff --git a/include/network_utils.h b/include/network_utils.h index 3bd198b..bbb1d17 100644 --- a/include/network_utils.h +++ b/include/network_utils.h @@ -6,6 +6,15 @@ */ #pragma once +/** + * \brief create or attach to socket at path + * + * \param path absolute path to socket file + * \param type socket type of socket() + * \return fd on success, -1 on error +*/ +int listener_create(const char *path, int type); + /** * \brief initialize unlink functionality for sockets *