From patchwork Fri Nov 13 08:31:00 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefano Babic X-Patchwork-Id: 1399617 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::437; helo=mail-wr1-x437.google.com; envelope-from=swupdate+bncbcxploxj6ikrbweixh6qkgqe7ygpwyy@googlegroups.com; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=denx.de 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=E5BOIXh1; dkim-atps=neutral Received: from mail-wr1-x437.google.com (mail-wr1-x437.google.com [IPv6:2a00:1450:4864:20::437]) (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 4CXWs92vzJz9sSn for ; Fri, 13 Nov 2020 19:31:24 +1100 (AEDT) Received: by mail-wr1-x437.google.com with SMTP id w6sf3423003wrk.1 for ; Fri, 13 Nov 2020 00:31:24 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1605256281; cv=pass; d=google.com; s=arc-20160816; b=Q6SprEd2k9fjzupSQYu9xR09GR6e0VPwTMiCmiMV4WGwghtovq3Cis8GUKDUD+hLby t7eDcYImGYMn/Klch1BvElVBnKi9FU6w/ltLQVPp8+bhrVDyCKicUruIzOHjVqaszTln 2e1mI4llKdc006w9lhVrJT4AZdAL/v1/RN2LArAShPVfGqDO5yEN3BNYAR4hUvhiglce jHEPDyFc5K9nNpY86E7VBeI9l65RLXEOFDhRDsi41qmsM0Tw/WeZSnqJ3ssMGi1qlLuQ 26VL+eIA2+Z2INlLgFaOj7hXExO1pL50eb+pGJMzYVFVzr7NPK1gIxAwOPLbyNs8InRx 6LUA== 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:references:in-reply-to :message-id:date:subject:cc:to:from:sender:dkim-signature; bh=DVP6XfBphM0wiiiPlDoLJBGWvRtlmQPQqnEn2XCFxxA=; b=VIACVTUNIvkusq/lq9xNOPap+WHTeo2YYFfa4e1A0qc1MaOaAMRtFj0UyCQiC99zi/ ByaHdLZGnzJsFYiRhiHpv0TY/XiponMREhaCfENXJj7p2tswpLqA9vZSG9VYY785sPDk GmFsfzfT2uMutG4SyVk95sjuP4gYFLKS7R821+0O6uilALFuh0Zh6O7d6HuMrITM/rxq 1bcMb44Xtgo1sXXLlDjEx13emD4BAjJKuSBP7N2cSgHTaoUnni8P6EwnK4MbnTAZM09V KwkxSP9EhSSlC1tL1Zv65pwWUG6pPmwp7DQcM/LqfgPO0rVk+ew3KMlG9aT61rq/3sJz n6BQ== ARC-Authentication-Results: i=2; gmr-mx.google.com; spf=neutral (google.com: 212.18.0.9 is neither permitted nor denied by best guess record for domain of sbabic@denx.de) smtp.mailfrom=sbabic@denx.de DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlegroups.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :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=DVP6XfBphM0wiiiPlDoLJBGWvRtlmQPQqnEn2XCFxxA=; b=E5BOIXh1FCVGC7jFHQ4JYocWI0/XrwbHmAWLNxt/NVRZsmBsX9m7qrZ2j4BLUHZNE9 moSRiuuXTlbGvekCns8VWhuOKK57WhP75aidEGwvyG7y+FPL0sKcVDL2zEXMXzDQrFc4 41RxU7OEi2TSUJ+iZYNcK69LepOGW215SpUa2tF5klApLvPjAMvObVFm/lU+1tKacTRY XbvhUmoBcgvAYTMM44JgcYguqx8K45xCyH1QqTE3qotW0+1aUYtW8UAsau8LsTvNrMd5 Hg5bBZaGqvY2gA+jz/zKmtdYF4fMrXf/InXKIJrV34rhAIO11dM3HLjVvnv30nRU7ezY YjRQ== 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 :in-reply-to:references: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=DVP6XfBphM0wiiiPlDoLJBGWvRtlmQPQqnEn2XCFxxA=; b=ck10BfAsw4fvmwW1ajuFRc+ufyZhuupZoL+4Ri2gtkeOoFMoXQZJxIMtxFnA18NkkV U/WbrC91XQj3DfVl5U54ESfG4ijVz0PhVLe7INAZE104679mDhCfYOfDvwBi9HMAGv0i BkZHul6ZhYOfezaRxveEcjGbGPp5DCAtXuXb+/KGsGCk0VXBWVZxU5nv2bXt/2Mg14Et z62g37g95DUFTFWKWUITbWpaq0JuU9PJZG8ENxQj1Gg8/YYVLTRd08IMX9GmBWx7Mnxi cpuIpqHls+ghZeFCazr3LVYyL5+Dm3MBh3b/D9xS8o026gRQX5sUhXEhYt5IsW2K8gGG Q9SQ== Sender: swupdate@googlegroups.com X-Gm-Message-State: AOAM5322IC1KlOuRyalcJzCvjrTTB76qKgr3SZoXdxKQfRF7VBnaM3Bj L4bG+d/KexKGCMDwnwanYxw= X-Google-Smtp-Source: ABdhPJy9QLd6l7+btGDqrqCrH2tXmMfcpMYaWBx0Z0ANkXUGFXMiLsNOhAcR8QZnekKcR/+H0fdxFw== X-Received: by 2002:a1c:3502:: with SMTP id c2mr1332341wma.79.1605256281020; Fri, 13 Nov 2020 00:31:21 -0800 (PST) X-BeenThere: swupdate@googlegroups.com Received: by 2002:adf:c689:: with SMTP id j9ls4279981wrg.0.gmail; Fri, 13 Nov 2020 00:31:20 -0800 (PST) X-Received: by 2002:adf:c443:: with SMTP id a3mr2003276wrg.249.1605256280138; Fri, 13 Nov 2020 00:31:20 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605256280; cv=none; d=google.com; s=arc-20160816; b=rnknlZEmwD7JhR7TjSe08lJFZLTexjARskY4VOpVKplm5Ki94PYz7DkobAO+tV6IG3 KhQJvIUGTFHnxwNZPRKhc0bDVkRQKVtnbC+gAeaLGaQFLALWhZsFILGudxb0kCFeeo/t FywWYF4vB4ozgNkxY/qPVSdSMiHroWg2nmKLWCNlw4kIagkRtMD5ao7VLW6MMBlGtJmm AIxpkcih9gkinEk+6yBy9lbaNEQXi80MXausITteWAGUlXMAo3W+9q+e8oiDv9XWLVFM xBdW1zDY2biqyvBevWDk/bMrKNCEn12JXamRH4HA3cEz6V4tv12e4iPhRnX+0Xqfx/g3 26DA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=P84uLHkfVKN8u+aSOIr5OnMNPOO5Ej8EyxQ8wofZtDY=; b=TCh8sVeqW9ivuFphCJ4xU+xe/mMNmfCsarJKatBKFqrBgw/nJ8fdJzPV+413Tbnqao WcXsqQAD2lDS5BFsVJl7UisUajU2FJLHodQEVliTO5Lq/Mwh7iKo4JKrFgZdLFaqLr08 K0N4vIAfby/JaFxFx04TpuMfDjSDm78ZoTEyiLHAFYzfF38prHGcLyS1XDY490uCMjNK z97Bv1fAGWFBd1lUPGmIPAro5ZslsclzO59f2aCOfAKFCXndbx75XNo+qSKSQl5PZwSB rzixJbTrh//rapwu4xUTAf5uIMXR0Xv7SLTwLXOq0x5/GZJbyvq72nKmgY/9sHkVQXDO z3Fg== ARC-Authentication-Results: i=1; gmr-mx.google.com; spf=neutral (google.com: 212.18.0.9 is neither permitted nor denied by best guess record for domain of sbabic@denx.de) smtp.mailfrom=sbabic@denx.de Received: from mail-out.m-online.net (mail-out.m-online.net. [212.18.0.9]) by gmr-mx.google.com with ESMTPS id i3si247466wra.1.2020.11.13.00.31.20 for (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 13 Nov 2020 00:31:20 -0800 (PST) Received-SPF: neutral (google.com: 212.18.0.9 is neither permitted nor denied by best guess record for domain of sbabic@denx.de) client-ip=212.18.0.9; Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 4CXWs36qbwz1qs10; Fri, 13 Nov 2020 09:31:19 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 4CXWs36fxwz1tD9Y; Fri, 13 Nov 2020 09:31:19 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id d_CdH-Qeh44c; Fri, 13 Nov 2020 09:31:18 +0100 (CET) Received: from babic.homelinux.org (host-88-217-136-221.customer.m-online.net [88.217.136.221]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPS; Fri, 13 Nov 2020 09:31:18 +0100 (CET) Received: from localhost (mail.babic.homelinux.org [127.0.0.1]) by babic.homelinux.org (Postfix) with ESMTP id B14AD4540286; Fri, 13 Nov 2020 09:31:18 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at babic.homelinux.org Received: from babic.homelinux.org ([IPv6:::1]) by localhost (mail.babic.homelinux.org [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id ublbyVouWD0w; Fri, 13 Nov 2020 09:31:15 +0100 (CET) Received: from paperino.fritz.box (paperino.fritz.box [192.168.178.64]) by babic.homelinux.org (Postfix) with ESMTP id B75584540646; Fri, 13 Nov 2020 09:31:11 +0100 (CET) From: Stefano Babic To: swupdate@googlegroups.com Cc: Stefano Babic Subject: [swupdate] [PATCH V2 02/10] IPC: simplify API using a single structure Date: Fri, 13 Nov 2020 09:31:00 +0100 Message-Id: <20201113083108.12567-3-sbabic@denx.de> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20201113083108.12567-1-sbabic@denx.de> References: <20201113083108.12567-1-sbabic@denx.de> MIME-Version: 1.0 X-Original-Sender: sbabic@denx.de X-Original-Authentication-Results: gmr-mx.google.com; spf=neutral (google.com: 212.18.0.9 is neither permitted nor denied by best guess record for domain of sbabic@denx.de) smtp.mailfrom=sbabic@denx.de 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: , Drop most parameters and move them (info) inside a generic request structure. Signed-off-by: Stefano Babic --- bindings/lua_swupdate.c | 2 +- corelib/channel_curl.c | 9 ++++++--- include/network_ipc.h | 25 ++++++++++++++++++++++--- ipc/network_ipc-if.c | 12 ++++++++++-- ipc/network_ipc.c | 19 ++++++++++++++++--- mongoose/mongoose_interface.c | 6 +++++- tools/swupdate-client.c | 5 ++++- 7 files changed, 64 insertions(+), 14 deletions(-) diff --git a/bindings/lua_swupdate.c b/bindings/lua_swupdate.c index 2fa0b61..d17a596 100644 --- a/bindings/lua_swupdate.c +++ b/bindings/lua_swupdate.c @@ -137,7 +137,7 @@ static int ctrl_connect(lua_State *L) { return 2; } - int connfd = ipc_inst_start_ext(SOURCE_LOCAL, 0, NULL, false); + int connfd = ipc_inst_start_ext(SOURCE_LOCAL, NULL, 0); if (connfd < 0) { lua_pop(L, 1); lua_pushnil(L); diff --git a/corelib/channel_curl.c b/corelib/channel_curl.c index a91cf5f..5c80770 100644 --- a/corelib/channel_curl.c +++ b/corelib/channel_curl.c @@ -1037,11 +1037,14 @@ channel_op_res_t channel_get_file(channel_t *this, void *data) goto cleanup_header; } + struct swupdate_request req; + swupdate_prepare_req(&req); + req.dry_run = channel_data->dry_run; + req.len = channel_data->info == NULL ? 0 : strlen(channel_data->info); + req.info = channel_data->info; for (int retries = 3; retries >= 0; retries--) { file_handle = ipc_inst_start_ext(channel_data->source, - channel_data->info == NULL ? 0 : strlen(channel_data->info), - channel_data->info, - channel_data->dry_run); + &req, sizeof(struct swupdate_request)); if (file_handle > 0) break; sleep(1); diff --git a/include/network_ipc.h b/include/network_ipc.h index b30f10b..18da134 100644 --- a/include/network_ipc.h +++ b/include/network_ipc.h @@ -11,6 +11,7 @@ #include #include +#include #include "swupdate_status.h" #ifdef __cplusplus @@ -34,7 +35,8 @@ typedef enum { SWUPDATE_SUBPROCESS, REQ_INSTALL_DRYRUN, SET_AES_KEY, - SET_UPDATE_STATE /* set bootloader ustate */ + SET_UPDATE_STATE, /* set bootloader ustate */ + REQ_INSTALL_EXT } msgtype; /* @@ -77,9 +79,24 @@ typedef struct { msgdata data; } ipc_message; +#define SWUPDATE_API_VERSION 0x1 +/* + * Install structure to be filled before calling + * ipc and async functions + */ +struct swupdate_request { + unsigned int apiversion; + int type; + bool dry_run; + size_t len; + const char *info; + char *software_set; + char *running_mode; +}; + char *get_ctrl_socket(void); int ipc_inst_start(void); -int ipc_inst_start_ext(sourcetype source, size_t len, const char *info, bool dry_run); +int ipc_inst_start_ext(sourcetype source, void *priv, ssize_t size); int ipc_send_data(int connfd, char *buf, int size); void ipc_end(int connfd); int ipc_get_status(ipc_message *msg); @@ -91,9 +108,11 @@ typedef int (*writedata)(char **buf, int *size); typedef int (*getstatus)(ipc_message *msg); typedef int (*terminated)(RECOVERY_STATUS status); int ipc_wait_for_complete(getstatus callback); +void swupdate_prepare_req(struct swupdate_request *req); int swupdate_image_write(char *buf, int size); int swupdate_async_start(writedata wr_func, getstatus status_func, - terminated end_func, bool dry_run); + terminated end_func, + void *priv, ssize_t size); int swupdate_set_aes(char *key, char *ivt); #ifdef __cplusplus diff --git a/ipc/network_ipc-if.c b/ipc/network_ipc-if.c index 6db1522..ba521ec 100644 --- a/ipc/network_ipc-if.c +++ b/ipc/network_ipc-if.c @@ -108,7 +108,7 @@ static pthread_t start_ipc_thread(void *(* start_routine) (void *), void *arg) * Only one running request is accepted */ int swupdate_async_start(writedata wr_func, getstatus status_func, - terminated end_func, bool dry_run) + terminated end_func, void *priv, ssize_t size) { struct async_lib *rq; int connfd; @@ -122,7 +122,7 @@ int swupdate_async_start(writedata wr_func, getstatus status_func, rq->get = status_func; rq->end = end_func; - connfd = ipc_inst_start_ext(SOURCE_UNKNOWN, 0, NULL, dry_run); + connfd = ipc_inst_start_ext(SOURCE_UNKNOWN, priv, size); if (connfd < 0) return connfd; @@ -171,3 +171,11 @@ int swupdate_set_aes(char *key, char *ivt) return ipc_send_cmd(&msg); } + +void swupdate_prepare_req(struct swupdate_request *req) { + if (!req) + return; + memset(req, 0, sizeof(struct swupdate_request)); + req->apiversion = SWUPDATE_API_VERSION; + return; +} diff --git a/ipc/network_ipc.c b/ipc/network_ipc.c index 9b5d811..d817ffc 100644 --- a/ipc/network_ipc.c +++ b/ipc/network_ipc.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -175,12 +176,24 @@ int ipc_get_status_timeout(ipc_message *msg, unsigned int timeout_ms) return ret; } -int ipc_inst_start_ext(sourcetype source, size_t len, const char *buf, bool dry_run) +int ipc_inst_start_ext(sourcetype source, void *priv, ssize_t size) { int connfd; ipc_message msg; ssize_t ret; - + bool dry_run = false; + struct swupdate_request *req = NULL; + size_t len = 0; + const char *buf = NULL; + + if (priv) { + if (size != sizeof(struct swupdate_request)) + return -EINVAL; + req = (struct swupdate_request *)priv; + dry_run = req->dry_run; + len = req->len; + buf = req->info; + } connfd = prepare_ipc(); if (connfd < 0) return -1; @@ -233,7 +246,7 @@ int ipc_inst_start_ext(sourcetype source, size_t len, const char *buf, bool dry_ */ int ipc_inst_start(void) { - return ipc_inst_start_ext(SOURCE_UNKNOWN, 0, NULL, false); + return ipc_inst_start_ext(SOURCE_UNKNOWN, NULL, 0); } /* diff --git a/mongoose/mongoose_interface.c b/mongoose/mongoose_interface.c index 588f62a..d34262b 100644 --- a/mongoose/mongoose_interface.c +++ b/mongoose/mongoose_interface.c @@ -288,7 +288,11 @@ static void upload_handler(struct mg_connection *nc, int ev, void *p) break; } - fus->fd = ipc_inst_start_ext(SOURCE_WEBSERVER, strlen(mp->file_name), mp->file_name, false); + struct swupdate_request req; + swupdate_prepare_req(&req); + req.len = strlen(mp->file_name); + req.info = mp->file_name; + fus->fd = ipc_inst_start_ext(SOURCE_WEBSERVER, &req, sizeof(req)); if (fus->fd < 0) { mg_http_send_error(nc, 500, "Failed to queue command"); free(fus); diff --git a/tools/swupdate-client.c b/tools/swupdate-client.c index 32928f5..0dc19a2 100644 --- a/tools/swupdate-client.c +++ b/tools/swupdate-client.c @@ -129,8 +129,11 @@ static int send_file(const char* filename) { /* May be set non-zero by end() function on failure */ end_status = EXIT_SUCCESS; + struct swupdate_request req; + swupdate_prepare_req(&req); + req.dry_run = dry_run; rc = swupdate_async_start(readimage, printstatus, - end, dry_run); + end, &req, sizeof(req)); /* return if we've hit an error scenario */ if (rc < 0) {