From patchwork Tue Apr 24 14:43:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Storm, Christian" X-Patchwork-Id: 903544 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (mailfrom) smtp.mailfrom=googlegroups.com (client-ip=2a00:1450:4010:c07::23c; helo=mail-lf0-x23c.google.com; envelope-from=swupdate+bncbdd6bwv65qpbbruf7xlakgqexo4xybq@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=siemens.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=googlegroups.com header.i=@googlegroups.com header.b="sDP24cKB"; dkim-atps=neutral Received: from mail-lf0-x23c.google.com (mail-lf0-x23c.google.com [IPv6:2a00:1450:4010:c07::23c]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 40VmLd6sgTz9s1b for ; Wed, 25 Apr 2018 00:44:25 +1000 (AEST) Received: by mail-lf0-x23c.google.com with SMTP id g6-v6sf4575894lfg.14 for ; Tue, 24 Apr 2018 07:44:25 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1524581063; cv=pass; d=google.com; s=arc-20160816; b=mcesRgtjZSJcexPtaKJlqs1Hg2sBhUsJEYd9CCsFNu2TdLPHP5599hZmb7UfU0ulE5 1S5mK2HJOpQ6ShiTCa57HMDrQtL4WCg9p0OZsXDuJxjyYaNjqbucgUkX9bgWZExz3bsP V+WXPzTfP+FJzJuQ2E0D6xUD2RqyF6yMUQrkdj1PWv3mz2TzZGR9W2pBmsJuMHs3nvyX gkXHCrdU9dAI4ZKZ5IRdPZM5QxWsMIkyo+P7j56bo4oeSncDCX68pXwlkt8QHin8TMVb ZLgOWoUurH/6oTzW3E3vv7v6jPJuJU/37jT3wzLP2MMdQqy2OgnslKeShJH0d/TwM9cY 67PQ== 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:references:in-reply-to:message-id :date:subject:cc:to:from:arc-authentication-results :arc-message-signature:mime-version:sender:dkim-signature :arc-authentication-results; bh=R09m1Sz9s7bx4NjQRUvjkSODji4FnKK7ZSCGS7/j1NU=; b=HUDVJ80D8xg+jHT2v0iPecfqlcai9u2SgAfhSeTVPrUpcHJzmQKuoUgKSR9RobzyIm a9Y/G77lnFS9Xtc/iz0xNXabMWybFJgW6WabJezE3ZhYx1FYQ1F20cgs7LV3alyKLhxn IZ5jJbOuwdSe4zDAduPdITnRn4dDyeZMV8rlyd2QUsa4CAEi5hoA5tKKbl3ubfOrHHbZ 28zIlYgpI+0l647QZ5flTPobZRVWOcHpJId07NQkO1PldunTLIc6mtjvrjgkganH8r4W mx4VzIUKk/gT+b9FAT0ErCMIlCs19g56B7ou6tPpE5it3JCZ0qKMyMV2R9TUgGbnvHqh 9pVw== ARC-Authentication-Results: i=2; gmr-mx.google.com; spf=pass (google.com: domain of christian.storm@siemens.com designates 192.35.17.14 as permitted sender) smtp.mailfrom=christian.storm@siemens.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:mime-version:from:to:cc:subject:date:message-id:in-reply-to :references:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-subscribe:list-unsubscribe; bh=R09m1Sz9s7bx4NjQRUvjkSODji4FnKK7ZSCGS7/j1NU=; b=sDP24cKB3UxoAbZARg5FTfaaM8YeoyVsu/zZ3NnClWzi82SIfRWb7omGxXEjPH//dc 3kwDEqCfhtFsj3mUZJv9YeS2xo4nivwnHqeefpnNU50a+iPYux8qS9a2dFHOb7p0TgwP sXokQmcX3YflgOVAxfwmBWNpO4lEMDjnlvxA6AZNd7xiaUPF2G3xGrqe/lp9zBYDrwmP po8VF+dy+TOIfCM57DdkuWAkjAYTl0nHCzYRZtiQB1cn3vR0V334pcv9uy87AHuF7WYD Kecb/WUKusqS21QwN7jOtH8JonQpR9mISL26d+QJ31aPk3Jedc3JWjm8HZ4XWEr+eW1m Bzdg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=sender:x-gm-message-state:mime-version:from:to:cc:subject:date :message-id:in-reply-to:references: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=R09m1Sz9s7bx4NjQRUvjkSODji4FnKK7ZSCGS7/j1NU=; b=I6JhZz6S2M1WbtvgdcpDXGg+w+yZoxEA92bzgxKg1MjAHe2B9+ypopjlWJ1bfJqsN2 jZWW+5ovW0FpQtrOowac5bhOZ5zdFgPT+XbU/d4Sa3DrsMOphBKkunx3YhI/QqEX4h3B gwe2ArudFOdstoabAfzNgCl47FkeC0TpK+bVE9JlbYlMVIEtb1OqUYOFmvvL3g6evqQT bfbCjczJXzusAM4i2NRtUue2UKNazt0TyLwCYmjdV4xyhC64olTS6uEEb5xGio/QU0Fz AJVmSaP9uqovuKciD3nJ0ruZglkxzS2S1VYcJOBQ0fz0J1kUMweH0bjCmk/o/kWPqUTE 0MiQ== Sender: swupdate@googlegroups.com X-Gm-Message-State: ALQs6tDq27W2RaKBiCxnX1miJ34KoMo9wAtn5fDt8uwR71yliLo4xVhZ Mb7f/LgwY5f8aFeST1OEPao= X-Google-Smtp-Source: AB8JxZrw5ojrjNHcxvxzp3XRMVdqdWax1WPmrTCOoqvDr/1O09fJ+HC99/1qo1p3tDsJB/XwfAx/Dg== X-Received: by 2002:a19:6b11:: with SMTP id d17-v6mr50092lfa.7.1524581062992; Tue, 24 Apr 2018 07:44:22 -0700 (PDT) MIME-Version: 1.0 X-BeenThere: swupdate@googlegroups.com Received: by 2002:a19:4d53:: with SMTP id a80-v6ls1127348lfb.2.gmail; Tue, 24 Apr 2018 07:44:22 -0700 (PDT) X-Received: by 2002:a19:2ccb:: with SMTP id s194-v6mr16851lfs.33.1524581062436; Tue, 24 Apr 2018 07:44:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524581062; cv=none; d=google.com; s=arc-20160816; b=ySGhcHHqolgPiJ68ygsxC/uDZZx3vHPAstHY/sOqypYNke9IHM+pHQL6VhdZAd4S6v Ss59xCe7RIUPp69gq4Z9KreiIj/4yIhmGKenWgllh3Uh17z19YDLVoPMlPM1ApON99lc dN0kNJa981FEfcVGqs1MtLMA0fMVuGreOGJ16RQpKSUDG8bKBTYRq/ch8IplDjiotZ0g at5bsHyTFbJNOtg+YT0LwM8LCFIVmjG81RitMO2CVsJrbBlUhPutg6uB2qZQ0jDiQlky ZG2G3khkLSoRkT6okUotHeoo+gTisGoBORNZ2pnJvMwzPRMbcF+CQYUwxQ1X/DXysIUe 6f3g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=VuqZ+w4LTwksdHI4omjKKnL1CdFTIbHU+aVy7vc7eMk=; b=k+q/dXnvTlhz4BL/DC7fJJCpsBlrZdXBn/1Hfh/DholJp1j7flOpPSdho6RkgxwAH2 U58irZUvH79Ns+01r4oSrSsRkMyv5aF8FQXcgZ14dN5fVregCZtgcqnVFPdatnN0bmoZ BFU3SeOLKYuTCy4C8aof+5DGY8WYiAS2f3hh69v7kXgvGwuwgwdEzo8CCoKEABXKrOKq 9asu7MR05ykbLUQoIkqcxyQcOAhahFW1koSMbMmYtw+LbvXXQ6BJMizVmpEV+U++rs/5 DbiuQeG1AB6n7O6kMVUj+fLREEKSvmnvUbHg9u7h2aEeG8L2wbugyHiuCgCjzA78yzQS Ibqw== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=pass (google.com: domain of christian.storm@siemens.com designates 192.35.17.14 as permitted sender) smtp.mailfrom=christian.storm@siemens.com Received: from david.siemens.de (david.siemens.de. [192.35.17.14]) by gmr-mx.google.com with ESMTPS id a141-v6si353625lfb.3.2018.04.24.07.44.22 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 24 Apr 2018 07:44:22 -0700 (PDT) Received-SPF: pass (google.com: domain of christian.storm@siemens.com designates 192.35.17.14 as permitted sender) client-ip=192.35.17.14; Received: from mail3.siemens.de (mail3.siemens.de [139.25.208.14]) by david.siemens.de (8.15.2/8.15.2) with ESMTPS id w3OEiLeH025203 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK) for ; Tue, 24 Apr 2018 16:44:21 +0200 Received: from MD1KR9XC.ww002.siemens.net ([139.25.69.174]) by mail3.siemens.de (8.15.2/8.15.2) with ESMTP id w3OEiLPW024908; Tue, 24 Apr 2018 16:44:21 +0200 From: Christian Storm To: swupdate@googlegroups.com Cc: Christian Storm Subject: [swupdate] [PATCH v2] notifier: add FreeBSD-compatible notifier sockets Date: Tue, 24 Apr 2018 16:43:10 +0200 Message-Id: <20180424144310.15790-1-christian.storm@siemens.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <7c844581-b699-bfcc-5861-120e29ba50ca@denx.de> References: <7c844581-b699-bfcc-5861-120e29ba50ca@denx.de> 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.14 as permitted sender) smtp.mailfrom=christian.storm@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: , As FreeBSD doesn't have abstract sockets like Linux has, use filesystem-backed sockets for FreeBSD. Signed-off-by: Christian Storm --- Kconfig | 8 ++++++++ core/notifier.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/Kconfig b/Kconfig index 39411c0..16f7735 100644 --- a/Kconfig +++ b/Kconfig @@ -159,6 +159,14 @@ config SOCKET_REMOTE_HANDLER_DIRECTORY Directory where sockets to remote handler processes are expected to be found. +config SOCKET_NOTIFIER_DIRECTORY + string "SWUpdate notifier socket directory" + depends on HAVE_FREEBSD + default "/tmp/" + help + Path to SWUpdate's Notifier sockets on FreeBSD as + Linux-like abstract sockets are not available. + endmenu config MTD diff --git a/core/notifier.c b/core/notifier.c index 1a79a95..e2a37df 100644 --- a/core/notifier.c +++ b/core/notifier.c @@ -203,6 +203,26 @@ static void process_notifier (RECOVERY_STATUS status, int event, int level, cons } +#if defined(__FreeBSD__) +static char* socket_path = NULL; +static void unlink_socket(void) +{ + if (socket_path) { + unlink(socket_path); + free(socket_path); + } +} + +static void setup_socket_cleanup(struct sockaddr_un *addr) +{ + socket_path = strndupa(addr->sun_path, sizeof(addr->sun_path)); + if (atexit(unlink_socket) != 0) { + TRACE("Cannot setup socket cleanup on exit, %s won't be unlinked.", socket_path); + } + unlink(socket_path); +} +#endif + /* * Utility function to setup the internal IPC */ @@ -210,11 +230,23 @@ static void addr_init(struct sockaddr_un *addr, const char *path) { memset(addr, 0, sizeof(struct sockaddr_un)); addr->sun_family = AF_UNIX; +#if defined(__linux__) /* * Use Linux-specific abstract sockets for this internal interface */ strcpy(&addr->sun_path[1], path); addr->sun_path[0] = '\0'; +#elif defined(__FreeBSD__) + /* + * Use filesystem-backed sockets on FreeBSD although this interface + * is internal as there are no Linux-like abstract sockets. + */ + strncpy(addr->sun_path, CONFIG_SOCKET_NOTIFIER_DIRECTORY, sizeof(addr->sun_path)); + strncat(addr->sun_path, path, + sizeof(addr->sun_path)-strlen(CONFIG_SOCKET_NOTIFIER_DIRECTORY)); +#else + ERROR("Undetected OS, probably sockets won't function as expected."); +#endif } /* @@ -236,6 +268,10 @@ static void *notifier_thread (void __attribute__ ((__unused__)) *data) exit(2); } +#if defined(__FreeBSD__) + setup_socket_cleanup(¬ify_server); +#endif + if (bind(serverfd, (const struct sockaddr *) ¬ify_server, sizeof(struct sockaddr_un)) < 0) { fprintf(stderr, "Error binding notifier socket: %s, exiting.\n", strerror(errno)); @@ -288,6 +324,9 @@ void notify_init(void) char buf[60]; snprintf(buf, sizeof(buf), "Notify%d", pid); addr_init(¬ify_client, buf); +#if defined(__FreeBSD__) + setup_socket_cleanup(¬ify_client); +#endif notifyfd = socket(AF_UNIX, SOCK_DGRAM, 0); if (notifyfd < 0) { printf("Error creating notifier socket for pid %d", pid);