From patchwork Wed Aug 2 14:06:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709165 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp930444wrw; Wed, 2 Aug 2023 07:09:32 -0700 (PDT) X-Google-Smtp-Source: APBJJlFCC8bkVXH4tDjw3axi1pR1pAz13HfXhbs1I0/9Wnh3Xeqk4nk3726y9FLEz94AvCTc9i7N X-Received: by 2002:a7b:c451:0:b0:3fe:18a3:b3c with SMTP id l17-20020a7bc451000000b003fe18a30b3cmr5089362wmi.12.1690985372575; Wed, 02 Aug 2023 07:09:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985372; cv=none; d=google.com; s=arc-20160816; b=zObjwAguI1NG78o4lLrf8eUsu+pUYgGH1XJcWRF31XaedvTg9BPUsKtnzdLphNRdKp QRI1IAQXct3ovmtZct+Ry3lQhG02XRwZ0Y/jTMQUqZ1eL2RHpbq5PFQEuyT/2WhGny/U jccZpWmGFaAyJtEvxiWhZNzIIa7mWssU1fzZDGCGNIokrhfVcGwux1qIerwjkRFAUSGv Gy7NFoVBNRbTCc+ASfmxv6+mZrwfPX+26EeYn/S3qqEm2JOb2Hmb97C3S4v7YpQ8dMBw APq68lCkYJ1cpFcNh/0ebDi3yINneJUfXBNcoNCUkCjDwAelz38N/Tl4OXg920akHUZm vpTA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=mljaM4Sh5i59HZhlLD/mtdWWwR2wweqpm2Qji/1XzXo=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=u77a9VZ3hCMztOcgwuwrx/IaQTkeTa1vGnDdbytYb9bci88XqH8NqKKXSmnKE/rQyA B0lcaAqAgShNPxFRsubvgZB+BHxk93EX2GvUyLExOuSeTweAPjaYqLQnkuJYuOl8+xd9 tmpONJY0H2VOHVKHajxVvHy7ledtq7YfXaA/MbDvF/8MsMB/eORzPN99J5/W+6XaLCdP 49/OSiE2FejDkImib7xAYFhkzWa2vlfshX1E5gqGqQk+0yo5zXelckqTRJv62sBD11zb WAvhsTy60woSqY7ru8MJ4DPFkSYn267iLhuVbcCRv/Y7bet7GFc0DbFVtC6+LLitPSHf oP6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=fY63hvdO; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id h20-20020a05600c351400b003fd0e3c75a3si979176wmq.100.2023.08.02.07.09.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:32 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=fY63hvdO; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 1B87086899; Wed, 2 Aug 2023 16:09:24 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="fY63hvdO"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 7553186898; Wed, 2 Aug 2023 16:09:22 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lf1-x12e.google.com (mail-lf1-x12e.google.com [IPv6:2a00:1450:4864:20::12e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id CFF2C8686A for ; Wed, 2 Aug 2023 16:09:19 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-4fe1489ced6so11431929e87.0 for ; Wed, 02 Aug 2023 07:09:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985359; x=1691590159; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mljaM4Sh5i59HZhlLD/mtdWWwR2wweqpm2Qji/1XzXo=; b=fY63hvdO+7z55A3Qu1iCRZRZXn0iatrT1L+dV+vwOekr0im8I7mhcdPgQ/2elEjhML bhFkNNN5Neso7ektfVI7OoIpfwBmRR8Fc/dNfDar2LpFConD8LtWHTqkv6gEcZB26UDt aLKBV0xo5ZkhpWnr+mIGdLiVWw4WO+z0wXuXM1uWd4pnOYfRcSbpefkUtNwEBFOf0f0P SYAnVp5w1heOXqxCFbxXKhcQTsdZhdBnj31JeSD4HDjUomL4NZ9vwYVxddZgrWeeGVIQ jCV4wan6k3SxKaTvD0czmh2KBZno4WJkSAKglUdL+PTvmJjOQ9U4CHT5aByfNCoJ26NN H/Yw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985359; x=1691590159; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mljaM4Sh5i59HZhlLD/mtdWWwR2wweqpm2Qji/1XzXo=; b=HBJjSkudxnScQroQDINwVnQpH6X+uBZ1n/i3UASz63wZlfxKKlh04s8+ryUsH+AzP/ hnxFkHjWW7R/RyPgNFS6+TCZftcAPOiKs/8b0RCWOIBBCJc37/aNZ+W2yHFoQEaxohrJ BOEqSkBOm/njWQTmn8/yL4jsgDtaAYKcrF/gUuvOpRSYQ/mEPLdrZTF0S8dDPlF0PuY/ fV8MutlKqsmlTR5BbTYmFVaYHHy/R5zKo4biZ7DPollKaSx1LwkA697+/XxBF1J/Ctfc QDkw24x6qstkO+g4zFtl4zX1W/Bo7PDPnrSCqUQslbu98O0U0VySdtRT68gsBmxaNo8f J6Sw== X-Gm-Message-State: ABy/qLZq3kLCGANw2dDHn68G9KUuZRo0YU+8E69SuAE9yv8NLxSSwTnF KLB5i8y/vvuoRRzss8wURlNLcZ2XQCSvEPt4MUtI9w== X-Received: by 2002:a05:6512:20cd:b0:4f8:70d8:28f8 with SMTP id u13-20020a05651220cd00b004f870d828f8mr4228129lfr.55.1690985358836; Wed, 02 Aug 2023 07:09:18 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:18 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 01/13] net/lwip: add doc/develop/net_lwip.rst Date: Wed, 2 Aug 2023 20:06:46 +0600 Message-Id: <20230802140658.10319-2-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Just add inital doc. Signed-off-by: Maxim Uvarov Reviewed-by: Simon Glass --- doc/develop/index.rst | 1 + doc/develop/net_lwip.rst | 55 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 doc/develop/net_lwip.rst diff --git a/doc/develop/index.rst b/doc/develop/index.rst index ddbf8dad4a..f8ab6cb56e 100644 --- a/doc/develop/index.rst +++ b/doc/develop/index.rst @@ -46,6 +46,7 @@ Implementation smbios spl uefi/index + net_lwip vbe version diff --git a/doc/develop/net_lwip.rst b/doc/develop/net_lwip.rst new file mode 100644 index 0000000000..784b8f960c --- /dev/null +++ b/doc/develop/net_lwip.rst @@ -0,0 +1,55 @@ +.. SPDX-License-Identifier: GPL-2.0+ + +LWIP IP stack intergation for U-Boot +==================================== + +Intro +----- + +LWIP is a library implementating network protocols, which is commonly used +on embedded devices. + +https://savannah.nongnu.org/projects/lwip/ + +LwIP  license: +LwIP is licensed under a BSD-style license: http://lwip.wikia.com/wiki/License. + +Main features include: + +* Protocols: IP, IPv6, ICMP, ND, MLD, UDP, TCP, IGMP, ARP, PPPoS, PPPoE + +* DHCP client, DNS client (incl. mDNS hostname resolver), AutoIP/APIPA (Zeroconf), SNMP agent (v1, v2c, v3, private MIB support & MIB compiler) + +* APIs: specialized APIs for enhanced performance, optional Berkeley-alike socket API + +* Extended features: IP forwarding over multiple network interfaces, TCP congestion control, RTT estimation and fast recovery/fast retransmit + +* Addon applications: HTTP(S) server, SNTP client, SMTP(S) client, ping, NetBIOS nameserver, mDNS responder, MQTT client, TFTP server + +U-Boot implementation details +----------------------------- + +1. In general we can build lwIP as .a library and link it against u-boot or compile it in +the U-Boot tree in the same way as other U-Boot files. There are few reasons why I selected +the second variant: LwIP is very customizable with defines for features, memory size, types of +allocation, some internal types and platform specific code. It turned out easier to enable/disable +debug which is also done with defines, and is needed periodically. + +2. lwIP has 2 APIs - raw mode and sequential (as lwIP names it, or socket API as we name it in Linux). +For now only raw API is supported. + +In raw IP mode a callback function for RX path is registered and will be called when packet +is passed to the IP stack and is ready for the application. + +Example is unmodified working ping example from lwip sources which registeres the callback: + +.. code-block:: c + + ping_pcb = raw_new(IP_PROTO_ICMP); + raw_recv(ping_pcb, ping_recv, NULL); <- ping_recv is app callback. + raw_bind(ping_pcb, IP_ADDR_ANY) + +3.  Input and output + +RX packet path is injected to U-Boot eth_rx() polling loop and TX patch is in eth_send() accordingly. +So we do not touch any drivers code and just eat packets when they are ready. From patchwork Wed Aug 2 14:06:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709166 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp930559wrw; Wed, 2 Aug 2023 07:09:43 -0700 (PDT) X-Google-Smtp-Source: APBJJlFy0fTZ+l+hMDZywR4kL8uzQfnUSYAbl3sroV/Pz2efejQTg7B7bCVBj1SKyqYJgBzshV9s X-Received: by 2002:a5d:5963:0:b0:317:732e:d56a with SMTP id e35-20020a5d5963000000b00317732ed56amr4680234wri.43.1690985383523; Wed, 02 Aug 2023 07:09:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985383; cv=none; d=google.com; s=arc-20160816; b=uAmqn0JCBom0MJh4sibJ5Jktks3YqKOHBQ0CDJemVmcXdGAyBrg4RoFyIbRlO2F84U EKjMuhiOmJtkX9MTkkRb6pzuZL/6r9QTj4K4LurROz/RceBfGVnYlp4h2h5AORnW6n0z vy+O+812b2xzpZU8+GNwD1Y6+BM1Cp5OT14azTQ4ggnW98p/yZb4OmvnkOvZj5yhroyH ViBlizEmF/U8t6vpETWDlYEGY6d9TtZqOqBlNFKH/fpaKQ0soV3z/iKuIu1fzG5fRg6+ auzBWWcGFfnWq1LqLaHPtaXkhd2VkKt0sBYpZjIft7TkxjjoCNyVy5AtpIh+5RySJXtj mb6w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=eOtl0KMcVyx3azbvD7j7NxMy2DIs81tAvjABNarZaks=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=uNz3Q/iMEz/90IXGiYYUXwnoiXjOHCALMcfmVeZ2D6Kmwz9UCQlXNQuQFYo/vTtH1D 1yGZhKZ0PBITE80KrtQNXuoc3phFVAqmcr0139T2C6qkMFuonq2FIFXTXi1M5rcLNQb4 5dV5cnp/DxyL3wHkB2rQzU9A8K+sb9+BWOKIyt8tueJ7LKl2wEVtg8okMPvQiLT6vNPg ifU8yqTd7XF/UWMLyc/0BK4vdkksVput8ykU5KJSIEEh2WHaSAZZAmxUKvmca7ebgSee cPkJjCMjGo0oBNreNlJopy4BEjNj5fybccyefQVYa8TgjS2KHApMAj4n8cuaj72IwbeA WlPA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=phlXKSsy; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [2a01:238:438b:c500:173d:9f52:ddab:ee01]) by mx.google.com with ESMTPS id z13-20020a056000110d00b003174aefd689si585627wrw.761.2023.08.02.07.09.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:43 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=phlXKSsy; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 6FD9A86B5E; Wed, 2 Aug 2023 16:09:28 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="phlXKSsy"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id A959686B5E; Wed, 2 Aug 2023 16:09:27 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id BE5978686B for ; Wed, 2 Aug 2023 16:09:23 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-4fe0e23a4b1so11023606e87.3 for ; Wed, 02 Aug 2023 07:09:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985363; x=1691590163; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eOtl0KMcVyx3azbvD7j7NxMy2DIs81tAvjABNarZaks=; b=phlXKSsyapSqNKMtTs5/N1e6GpzSoGC+WqZGjR/OYSNPbmYb4Mg8GWXmVmrS1lBlDm tbgehNH9Ko23UWlBb3SMjHcxkrzRJOQeXbaudENWg33K++GDEO1sBNO/lGxTrgVLyAgm qXDt/7VpEXqbK1kxy+RsXdPTiN18uCih1G1TWLPVuUVpwC3Atiz9jmVf2L4xKHFVZaSD KkSVMWLGApzQuYOELikAYU6mub6x3Ru2N/QdSICDDUfnkLrD3tIUVg7wLo9q/hfsxbBJ h2iwyCeaQDXHyfqa/H2BG6MFBlyRRV8C7iIvhDRwJPaqkL3jU5ylazq4m/K1r3i7d1QI YXSQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985363; x=1691590163; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eOtl0KMcVyx3azbvD7j7NxMy2DIs81tAvjABNarZaks=; b=SJmYPSqDH3/kY1vDIXHd89dU6Nf7WcQzhRclznxV3i8uZB36/kP9+ivjNs+7BerKGX 0hlank/lMLGQQOMDd+q87P6hgIyvPEVQ4eWz2wiAC7CObb73BybXKwbVsn6pPKhNEi66 252fZ3fomoey04j+/NwfyCdKTqhRjAYDY4iJowU06FsvGKlHhkW3cNLFIVh6JB3ZnskA J5irUjwaYQ3YPVWYmBUeoecxaHUZmle58OXZsCfsNhNyea2sxi7JZLdbmadnOho0GIp4 al4K+8o1kDkNiJE+wa07GAH65bMJO6XcRc2QsrD895jkIFxWO/t5gn95CYLYWSr+NmOg oCkg== X-Gm-Message-State: ABy/qLZdxnlxK5hsvirV5vSXydu62XMsjatS7rFZKpzC95uKNzJSiJDf f64141r+AEIuCQXx1DlSt4dNFxTv57SvZU0uLUKv4A== X-Received: by 2002:ac2:5bc7:0:b0:4fb:9631:4bb with SMTP id u7-20020ac25bc7000000b004fb963104bbmr4180014lfn.11.1690985362797; Wed, 02 Aug 2023 07:09:22 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:22 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 02/13] net/lwip: integrate lwip library Date: Wed, 2 Aug 2023 20:06:47 +0600 Message-Id: <20230802140658.10319-3-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean --- lib/Kconfig | 2 ++ lib/Makefile | 3 +++ lib/lwip/Kconfig | 67 +++++++++++++++++++++++++++++++++++++++++++++++ lib/lwip/Makefile | 66 ++++++++++++++++++++++++++++++++++++++++++++++ net/Kconfig | 1 + net/net.c | 24 +++++++++++++++++ 6 files changed, 163 insertions(+) create mode 100644 lib/lwip/Kconfig create mode 100644 lib/lwip/Makefile diff --git a/lib/Kconfig b/lib/Kconfig index 3926652db6..79f7d5bc5d 100644 --- a/lib/Kconfig +++ b/lib/Kconfig @@ -1112,3 +1112,5 @@ menu "FWU Multi Bank Updates" source lib/fwu_updates/Kconfig endmenu + +source lib/lwip/Kconfig diff --git a/lib/Makefile b/lib/Makefile index 8d8ccc8bbc..598b5755dd 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_EFI_LOADER) += efi_loader/ obj-$(CONFIG_CMD_BOOTEFI_SELFTEST) += efi_selftest/ obj-$(CONFIG_FWU_MULTI_BANK_UPDATE) += fwu_updates/ obj-$(CONFIG_LZMA) += lzma/ +obj-$(CONFIG_LWIP_LIB) += lwip/ obj-$(CONFIG_BZIP2) += bzip2/ obj-$(CONFIG_FIT) += libfdt/ obj-$(CONFIG_OF_LIVE) += of_live.o @@ -92,6 +93,8 @@ obj-$(CONFIG_LIBAVB) += libavb/ obj-$(CONFIG_$(SPL_TPL_)OF_LIBFDT) += libfdt/ obj-$(CONFIG_$(SPL_TPL_)OF_REAL) += fdtdec_common.o fdtdec.o +obj-y += lwip/ + ifdef CONFIG_SPL_BUILD obj-$(CONFIG_SPL_YMODEM_SUPPORT) += crc16-ccitt.o obj-$(CONFIG_$(SPL_TPL_)HASH) += crc16-ccitt.o diff --git a/lib/lwip/Kconfig b/lib/lwip/Kconfig new file mode 100644 index 0000000000..5d2603701c --- /dev/null +++ b/lib/lwip/Kconfig @@ -0,0 +1,67 @@ +menu "LWIP" +config LWIP_LIB + bool "Support LWIP library" + help + This option will enable the lwIP library code with + all dependencies (cmd commands implemented with lwIP + library. This option is automatically enabled if CONFIG_NET=y. + lwIP library (https://git.savannah.nongnu.org/git/lwip.git) provides + network stack and application code for U-Boot cmd commands. + +menu "LWIP options" + +config LWIP_LIB_DEBUG + bool "enable debug" + default n + +config LWIP_LIB_NOASSERT + bool "disable asserts" + default y + help + Disabling asserts reduces binary size on 16k. + +config LWIP_LIB_TCP + bool "tcp" + default y + +config LWIP_LIB_UDP + bool "udp" + default y + +config LWIP_LIB_DNS + bool "dns" + default y + +config LWIP_LIB_DHCP + bool "dhcp" + default y + +config LWIP_LIB_LOOPBACK + bool "loopback" + help + Increases size on 1k. + +config LWIP_LIB_SOCKET + bool "socket API" + +config LWIP_LIB_NETCONN + bool "netconn API" + +config LWIP_LIB_MEM_SIZE + int "mem size" + default 1600 + range 1 4096 + help + MEM_SIZE: the size of the heap memory. If the application will send + a lot of data that needs to be copied, this should be set high. + +config LWIP_LIB_PBUF_LINK_HLEN + int "pbuf link hlen" + default 14 + range 4 1024 + help + PBUF_LINK_HLEN: the number of bytes that should be allocated for a + link level header. The default is 14, the standard value for Ethernet. +endmenu + +endmenu diff --git a/lib/lwip/Makefile b/lib/lwip/Makefile new file mode 100644 index 0000000000..35f34d7afa --- /dev/null +++ b/lib/lwip/Makefile @@ -0,0 +1,66 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2023 Linaro Ltd. + +LWIPDIR=lwip-external/src + +ccflags-y += -I$(srctree)/lib/lwip/port/include +ccflags-y += -I$(srctree)/lib/lwip/lwip-external/src/include -I$(srctree)/lib/lwip + +obj-$(CONFIG_NET) += $(LWIPDIR)/core/init.o \ + $(LWIPDIR)/core/def.o \ + $(LWIPDIR)/core/dns.o \ + $(LWIPDIR)/core/inet_chksum.o \ + $(LWIPDIR)/core/ip.o \ + $(LWIPDIR)/core/mem.o \ + $(LWIPDIR)/core/memp.o \ + $(LWIPDIR)/core/netif.o \ + $(LWIPDIR)/core/pbuf.o \ + $(LWIPDIR)/core/raw.o \ + $(LWIPDIR)/core/stats.o \ + $(LWIPDIR)/core/sys.o \ + $(LWIPDIR)/core/altcp.o \ + $(LWIPDIR)/core/altcp_alloc.o \ + $(LWIPDIR)/core/altcp_tcp.o \ + $(LWIPDIR)/core/tcp.o \ + $(LWIPDIR)/core/tcp_in.o \ + $(LWIPDIR)/core/tcp_out.o \ + $(LWIPDIR)/core/timeouts.o \ + $(LWIPDIR)/core/udp.o + +# IPv4 +obj-$(CONFIG_NET) += $(LWIPDIR)/core/ipv4/acd.o \ + $(LWIPDIR)/core/ipv4/autoip.o \ + $(LWIPDIR)/core/ipv4/dhcp.o \ + $(LWIPDIR)/core/ipv4/etharp.o \ + $(LWIPDIR)/core/ipv4/icmp.o \ + $(LWIPDIR)/core/ipv4/igmp.o \ + $(LWIPDIR)/core/ipv4/ip4_frag.o \ + $(LWIPDIR)/core/ipv4/ip4.o \ + $(LWIPDIR)/core/ipv4/ip4_addr.o +# IPv6 +obj-$(CONFIG_NET) += $(LWIPDIR)/core/ipv6/dhcp6.o \ + $(LWIPDIR)/core/ipv6/ethip6.o \ + $(LWIPDIR)/core/ipv6/icmp6.o \ + $(LWIPDIR)/core/ipv6/inet6.o \ + $(LWIPDIR)/core/ipv6/ip6.o \ + $(LWIPDIR)/core/ipv6/ip6_addr.o \ + $(LWIPDIR)/core/ipv6/ip6_frag.o \ + $(LWIPDIR)/core/ipv6/mld6.o \ + $(LWIPDIR)/core/ipv6/nd6.o +# API +obj-$(CONFIG_NET) += $(LWIPDIR)/api/api_lib.o \ + $(LWIPDIR)/api/api_msg.o \ + $(LWIPDIR)/api/err.o \ + $(LWIPDIR)/api/if_api.o \ + $(LWIPDIR)/api/netbuf.o \ + $(LWIPDIR)/api/netdb.o \ + $(LWIPDIR)/api/netifapi.o \ + $(LWIPDIR)/api/sockets.o \ + $(LWIPDIR)/api/tcpip.o + +# Netdevs +obj-$(CONFIG_NET) += $(LWIPDIR)/netif/ethernet.o + +obj-$(CONFIG_NET) += port/if.o +obj-$(CONFIG_NET) += port/sys-arch.o diff --git a/net/Kconfig b/net/Kconfig index 4215889127..c3f4a7cae7 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -5,6 +5,7 @@ menuconfig NET bool "Networking support" default y + select LWIP_LIB if NET diff --git a/net/net.c b/net/net.c index 43abbac7c3..d98e51cb80 100644 --- a/net/net.c +++ b/net/net.c @@ -125,6 +125,7 @@ #endif #include "dhcpv6.h" #include "net_rand.h" +#include "../lib/lwip/ulwip.h" /** BOOTP EXTENTIONS **/ @@ -452,7 +453,11 @@ int net_loop(enum proto_t protocol) #endif bootstage_mark_name(BOOTSTAGE_ID_ETH_START, "eth_start"); +#if defined(CONFIG_LWIP_LIB) + if (!ulwip_enabled() || !ulwip_in_loop()) +#endif net_init(); + if (eth_is_on_demand_init()) { eth_halt(); eth_set_current(); @@ -649,6 +654,18 @@ restart: */ eth_rx(); +#if defined(CONFIG_LWIP_LIB) + if (ulwip_enabled()) { + net_set_state(NETLOOP_CONTINUE); + if (!ulwip_in_loop()) { + if (ulwip_app_get_err()) + net_set_state(NETLOOP_FAIL); + else + net_set_state(NETLOOP_SUCCESS); + goto done; + } + } +#endif /* * Abort if ctrl-c was pressed. */ @@ -1213,6 +1230,13 @@ void net_process_received_packet(uchar *in_packet, int len) if (len < ETHER_HDR_SIZE) return; +#if defined(CONFIG_LWIP_LIB) + if (ulwip_enabled()) { + uboot_lwip_poll(); + return; + } +#endif + #if defined(CONFIG_API) || defined(CONFIG_EFI_LOADER) if (push_packet) { (*push_packet)(in_packet, len); From patchwork Wed Aug 2 14:06:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709167 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp930764wrw; Wed, 2 Aug 2023 07:10:00 -0700 (PDT) X-Google-Smtp-Source: APBJJlHowz8aR4AVeOptjmtK7Dod0NEVNQ/RkwpySKvqTWsojBZzXplPKmh0WW87e+dduKO1extM X-Received: by 2002:a5d:4f05:0:b0:314:4237:8832 with SMTP id c5-20020a5d4f05000000b0031442378832mr4471822wru.48.1690985399861; Wed, 02 Aug 2023 07:09:59 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985399; cv=none; d=google.com; s=arc-20160816; b=ThKaHY8zNuPWOuf68drTcT6tzgmnqM3rq/eRxJXLvJpBNyRxqcZCjcs4OlbztCuSPb rz59OXpCk6r9gO9lc/inV0M36xpGBWflUWBmJAJqsblVhuKbtl6KXWzuTmnvMKWr8KO7 DNNmAJnRTGWE32c1r+EFWNCPpdurIB4LF9huydEJwAGxHtqtWebfTaoVtd8J0CFMwbSg sOZRZraEr/9IL/NollWE7+PU/4T8Rceqk8ypxrC9Uh97Lu9I7w+yQHfvjYuM808r7IL8 P7fe01QOQtU0nIkE2bvtZBNiExPJuhMtx5FN8F1giiLt0BKzvlTRHI0W5v62NRgDoaqM fD2Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=6B44LyKd9A4OLaev2STKf6CieJjPEVRQf7Ar7OKN0V4=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=IsD/Dn0D5v5H3LelaC6xSNmrh4RF2s4nmzqfuFU3wRZbvgTyROBQUzsueVzoAvFmD6 44cPL5TVoDWms5HDQ46eVO9Q0WLZWcdu70Jso3vxeBz9nmT7Uv3xDvNSsTjqhloyWXQd 01G8rjBHU3JrtUvtQo73YlYIoCWKz1B81FUqfmXS9sQO7qMn91Ak2fYkwyJCdfZkAO9v F/e0j+ioEbn0LueJzZUooyf5ATl7kNJKfB0IxaZeZJaZXWWoMxLnmYU6W4BS+3OChHfT WvahDnGExBEg7UQbv8bH4TnwMSQ10k7flX7uiqE3WyAWLYNRd6yTLQ9QSF6Y03fie44B CeLQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=E1VThjlm; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [2a01:238:438b:c500:173d:9f52:ddab:ee01]) by mx.google.com with ESMTPS id j19-20020a5d4533000000b00316f251cd51si1198387wra.877.2023.08.02.07.09.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:59 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=E1VThjlm; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id CB63E86A8D; Wed, 2 Aug 2023 16:09:32 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="E1VThjlm"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id D451486A8D; Wed, 2 Aug 2023 16:09:31 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lf1-x131.google.com (mail-lf1-x131.google.com [IPv6:2a00:1450:4864:20::131]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 99C2086898 for ; Wed, 2 Aug 2023 16:09:26 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-4fe27849e6aso7007617e87.1 for ; Wed, 02 Aug 2023 07:09:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985366; x=1691590166; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6B44LyKd9A4OLaev2STKf6CieJjPEVRQf7Ar7OKN0V4=; b=E1VThjlmeNX/62cPbUfnWCCCXLWI5j37Zc26jIT8tTaD7AtnZ6ovbglA8cLsvE85hf UBfyX2aPM/yOYokRvrxQoMV3nYxbnmKKs+GQq4eJuu3B0PiMAxzInMxq6Q+8ZKXNba+i c8F1Uw4F7ML58rNgDKkPdDu9enmUGB+pncj4hkPpy2sci6ThEm1DQUdcNl18sRO6ociD iTRpbIcOIH7YYtQa+WRuG3j5/dwiUJf8cculQUSCcQ4P9xNewUpymoWbnROUBV6weUb1 eF7DzIa1ebTKxNnyNbsML7oHO2eIPy1YzT+3buAXTgFSTaBhcgfZDNqEgZKHTW4qR7uj XA2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985366; x=1691590166; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6B44LyKd9A4OLaev2STKf6CieJjPEVRQf7Ar7OKN0V4=; b=d1KhnxgyDkBvfQTzEuhmOTJ5OUAL+feWJwXjIUcdcwDE8wIHrk8z5GXzE8frg4q8ZM gOQcyyhlZxluLO571FJaABroseVGFaHahe+0qHtZ7gzv6x4P7qjRRvNJFe87G5p+u/Uh AvqXJSRJ/OxqtIriT8e1TH//endBXPQgC5iJ7NFJR3QFMPc3TOYIFpHKmjjKlFEagzjE 1Csvkfyy1dDWzIkHWe1I+zVespG5n80mGakoqwfzyhT91Ic0DdkmZOP8z+R+8Ejc1qYn 2Hv5Q3pPkHRNgS+MLxzr8q2m3oFPi50z9l+pdfD40WdugHRpTFvK+rApsrvb3bCHZUVp jEng== X-Gm-Message-State: ABy/qLZ1YQTGNKRZTeuJ+if8tySBFPbmxePjbTFDcKb8sDziwyzQF1zf 6mp1IHOT+B4YQ5TR98mN4ubWtRIusBUwf1/hOGXp/g== X-Received: by 2002:ac2:504d:0:b0:4fd:bc33:e508 with SMTP id a13-20020ac2504d000000b004fdbc33e508mr4802241lfm.49.1690985365812; Wed, 02 Aug 2023 07:09:25 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:25 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 03/13] net/lwip: implement dns cmd Date: Wed, 2 Aug 2023 20:06:48 +0600 Message-Id: <20230802140658.10319-4-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Signed-off-by: Maxim Uvarov --- lib/lwip/Makefile | 2 ++ lib/lwip/apps/dns/lwip-dns.c | 46 ++++++++++++++++++++++++++++++++++++ lib/lwip/apps/dns/lwip-dns.h | 3 +++ 3 files changed, 51 insertions(+) create mode 100644 lib/lwip/apps/dns/lwip-dns.c create mode 100644 lib/lwip/apps/dns/lwip-dns.h diff --git a/lib/lwip/Makefile b/lib/lwip/Makefile index 35f34d7afa..2815662093 100644 --- a/lib/lwip/Makefile +++ b/lib/lwip/Makefile @@ -64,3 +64,5 @@ obj-$(CONFIG_NET) += $(LWIPDIR)/netif/ethernet.o obj-$(CONFIG_NET) += port/if.o obj-$(CONFIG_NET) += port/sys-arch.o + +obj-$(CONFIG_CMD_DNS) += apps/dns/lwip-dns.o diff --git a/lib/lwip/apps/dns/lwip-dns.c b/lib/lwip/apps/dns/lwip-dns.c new file mode 100644 index 0000000000..04fd53bfcb --- /dev/null +++ b/lib/lwip/apps/dns/lwip-dns.c @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#include +#include +#include + +#include +#include + +#include "../../../lwip/ulwip.h" + +static void dns_found_cb(const char *name, const ip_addr_t *ipaddr, void *callback_arg) +{ + char *varname = (char *)callback_arg; + + if (varname) + env_set(varname, ip4addr_ntoa(ipaddr)); + + printf("resolved %s to %s\n", name, ip4addr_ntoa(ipaddr)); + ulwip_exit(0); +} + +int ulwip_dns(char *name, char *varname) +{ + int err; + ip_addr_t ipaddr; /* not used */ + ip_addr_t dns1; + ip_addr_t dns2; + + ipaddr_aton(env_get("dnsip"), &dns1); + ipaddr_aton(env_get("dnsip2"), &dns2); + + dns_init(); + dns_setserver(0, &dns1); + dns_setserver(1, &dns2); + + err = dns_gethostbyname(name, &ipaddr, dns_found_cb, varname); + if (err == ERR_OK) + dns_found_cb(name, &ipaddr, varname); + + return err; +} diff --git a/lib/lwip/apps/dns/lwip-dns.h b/lib/lwip/apps/dns/lwip-dns.h new file mode 100644 index 0000000000..c59f99e099 --- /dev/null +++ b/lib/lwip/apps/dns/lwip-dns.h @@ -0,0 +1,3 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +int ulwip_dns(char *name, char *varname); From patchwork Wed Aug 2 14:06:49 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709168 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp930821wrw; Wed, 2 Aug 2023 07:10:07 -0700 (PDT) X-Google-Smtp-Source: APBJJlHcPgCURLjV2PuiyWBiACIREfwDCD1SmtfD1n8pyUhFvYF8ovd/hJp7eIH3Hu24cjq1tm6y X-Received: by 2002:a05:6000:1011:b0:314:9dc:4c4 with SMTP id a17-20020a056000101100b0031409dc04c4mr5387652wrx.2.1690985407769; Wed, 02 Aug 2023 07:10:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985407; cv=none; d=google.com; s=arc-20160816; b=wajlmHdh5ThekfUPByoq2ae9Ngtl1+ED1Dm2Irn+y7HiRavt+XfuucTHKf/h/Bx3v2 CfOqghkhdL0qLBdowehpkj4PVzsmwhXPUXw06/qa9bGZ2ApKOfh4QhDfjGP7vWL2mo2g GpLFn3SYHmJ99bXED5Bw6IwxTncLJszRaGBLzzdosoCOgF1gvFuk8YKJ+HvUWtkoJjVd PYqrSDQlwxte6npGbOWRgxQyrL6V3roAYIYp9t6HFSSAsNb+S5cWGK/73lD5yblv2J/5 Wb2I7HE56lS4iGt6pZgIv9HWxokXcyYUxH4Gov1Ef7e5H0AP+FtT1Q3ircpgKLAcaxnp e0Pg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=/5mLJAASP+i8nv1Dp+2u+nsxVpCk4btvYJw/79VkTOQ=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=OEoADr9oGjIAcpm34PIIMRXISCdYiCD92pkEDQmgsUAs5BqaaPoEuZtoTbn3jDHz2A 9aEZ6VjtUERH6MRD0zitpVVtWo0Tjo525Zs8o6UgVrIPICOnVng35aD58JIfrVu+TzQY XVZhqnt9KIi9Xs1HU3OpajBg4H0PnRxOrq8373Z7zezSmMEl5m/B3wHQxB99xFFr35gM HHDGuRgE97TmF3XydoII0aDdTr3KbImkb6tr3bwoC+J1fdA2Yd1ImLhMGtFhxtNAThdK tizcWrAqTySUVWuF/SQ6N/zbBOlJsMDhuUjOoa5Wg6Eid1ldKephVNJuFRF1/uN82rbY ZseQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=wLzvm89X; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id z11-20020a5d654b000000b0031776c6a74esi5999369wrv.290.2023.08.02.07.10.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:10:07 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=wLzvm89X; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 0834286934; Wed, 2 Aug 2023 16:09:36 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="wLzvm89X"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 2CCF286ACB; Wed, 2 Aug 2023 16:09:34 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lf1-x133.google.com (mail-lf1-x133.google.com [IPv6:2a00:1450:4864:20::133]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id BD59786A8C for ; Wed, 2 Aug 2023 16:09:30 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-4fe216edaf7so1264812e87.0 for ; Wed, 02 Aug 2023 07:09:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985370; x=1691590170; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/5mLJAASP+i8nv1Dp+2u+nsxVpCk4btvYJw/79VkTOQ=; b=wLzvm89X7v28DpZj1kAkezXU4M16ka3ChOkli5i+l1LFsuzrWKbg/t3ip4PNfVEiiY HqZil1DdhwADa+JV+/ygnjM3s6ubTnHFTYxNAVto/gMAYt3cS8+G2hmcjHdhs9nFi7Dj GDIohuSDL/sOrmG9YL/c9TINcs3jnQwVnaZoXhlFwsi149EEuuk47sFEWQ1EMWL+z1WJ jQBHIw/+R2XuewY4kdUGneAPIwkrDJrTj+Lg1S3W1B1qcDkqa+xFURBL1WHjkXBGcQa7 5p/9u30kHxqtgg16Wi4sQm0DLKyxRNLCciInrMr6XT0SOqfLG9TG70c+7JmpAvYZSQZk TuyQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985370; x=1691590170; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/5mLJAASP+i8nv1Dp+2u+nsxVpCk4btvYJw/79VkTOQ=; b=Nwwk7akuR/yumAjq3TjcIzSXGjHlZNXPeP7LlpV4leVbKTqwdnJk1IVpfhit2fH/yn iCNX59OfOjtfEBAc53vSEddgs4sOpUaU0oLw07geuNjZLKqgU4LBeUL9e/kcQbYK/VUY 6ndlBVXRy1NrLF1Rf45tmI9OEuSXgg6YbLfIM4FwE9mfRZ5iGo8xDVaJ2hpFFnPRhJj5 EtcjQGuEiRmBr57j5kFE00aRL6/3H7lh+ApdJuQZWgnIuP57p6MZtbs5fx56KbP4GIQu J3cLuQO9mHKYXDxy4i4jRKexXsYsHqrYCNquulo1NanxUA9cKIc3kfSbGYQR0O6HWIUp rn1Q== X-Gm-Message-State: ABy/qLbwpT5ynCdnL2YRfr52otEgu9mkQWMLh55sXOdD5q9Eb414+Oxz WVhfskIBIg16pUMR8hkFgX+58bXaKXNJoV1KjeZH8Q== X-Received: by 2002:a05:6512:2528:b0:4fd:c8fb:eb71 with SMTP id be40-20020a056512252800b004fdc8fbeb71mr2057114lfb.11.1690985369921; Wed, 02 Aug 2023 07:09:29 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:28 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 04/13] net/lwip: implement dhcp cmd Date: Wed, 2 Aug 2023 20:06:49 +0600 Message-Id: <20230802140658.10319-5-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Signed-off-by: Maxim Uvarov --- lib/lwip/Makefile | 1 + lib/lwip/apps/dhcp/lwip-dhcp.c | 53 ++++++++++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 lib/lwip/apps/dhcp/lwip-dhcp.c diff --git a/lib/lwip/Makefile b/lib/lwip/Makefile index 2815662093..a3521a9d18 100644 --- a/lib/lwip/Makefile +++ b/lib/lwip/Makefile @@ -65,4 +65,5 @@ obj-$(CONFIG_NET) += $(LWIPDIR)/netif/ethernet.o obj-$(CONFIG_NET) += port/if.o obj-$(CONFIG_NET) += port/sys-arch.o +obj-$(CONFIG_CMD_DHCP) += apps/dhcp/lwip-dhcp.o obj-$(CONFIG_CMD_DNS) += apps/dns/lwip-dns.o diff --git a/lib/lwip/apps/dhcp/lwip-dhcp.c b/lib/lwip/apps/dhcp/lwip-dhcp.c new file mode 100644 index 0000000000..9fda43db9f --- /dev/null +++ b/lib/lwip/apps/dhcp/lwip-dhcp.c @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#include +#include +#include + +#include +#include + +#include "../../../lwip/ulwip.h" + +static struct dhcp dhcp; +static bool dhcp_is_set; + +static int ulwip_dhcp_tmo(void) +{ + switch (dhcp.state) { + case DHCP_STATE_BOUND: + env_set("bootfile", dhcp.boot_file_name); + env_set("ipaddr", ip4addr_ntoa(&dhcp.offered_ip_addr)); + env_set("netmask", ip4addr_ntoa(&dhcp.offered_sn_mask)); + env_set("serverip", ip4addr_ntoa(&dhcp.server_ip_addr)); + printf("DHCP client bound to address %s\n", ip4addr_ntoa(&dhcp.offered_ip_addr)); + break; + default: + return -1; + } + + return 0; +} + +int ulwip_dhcp(void) +{ + int err; + struct netif *netif; + + ulwip_set_tmo(ulwip_dhcp_tmo); + netif = netif_get_by_index(1); + + if (!dhcp_is_set) { + dhcp_set_struct(netif, &dhcp); + dhcp_is_set = true; + } + err = dhcp_start(netif); + if (err) + printf("dhcp_start error %d\n", err); + + return err; +} From patchwork Wed Aug 2 14:06:50 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709169 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp930934wrw; Wed, 2 Aug 2023 07:10:19 -0700 (PDT) X-Google-Smtp-Source: APBJJlHDLu2x/veGSOyXNvuHKuhGHD4rWQol6qIPxAhj1OOE5uBaXOxTnlrbyppMl81+kVfEvn/f X-Received: by 2002:a05:600c:2948:b0:3fe:2b8c:9f07 with SMTP id n8-20020a05600c294800b003fe2b8c9f07mr3384953wmd.1.1690985419290; Wed, 02 Aug 2023 07:10:19 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985419; cv=none; d=google.com; s=arc-20160816; b=Ag46J0LS613Ch+cY98v+ng74ukghxHpnZiXztAj5Gzi4Iedu+ySGqwS3mb7VQMWiDY vgR5U9lqIFFzs9z1FVlclgJaVS8xr9S4Ik1W0Vxdia/1CQ+c86/Lnsn/t0eKgsd/rK9H BaRa6/6rD53ZBu97S0nNwIhzvGpcGpUc6HCa3Ya3ShG6QJVTRqH6WQCir3dac2h0uMpl eYafrUJ6ll3KmcFn1zAUJzCO0YxBWRxlK/kv+ZYC6t5eIJpTDr9YSyCmY+mbKpQL53wX eznTMeB3qOsv94aFbGZJEomdrnaK9E0/O9bD63Z6YP9ZNbYbG18j/UXIGDH1TtdJHd0Y htmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=xwLXe18a4WYA06Yd9AyLjmRg+DGIXrFk3hfuX+AV2wY=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=MfdHdPLQcKo247WQQKiaBHWzXUOu2lUMTCtmSeT8hUSBGLYF96LpqOWUUeY1yUAcq+ aGbXaAU2Kuu7gLTrYpvIvd3pqYa/ndwYYH9MRejONtbCWCqxzlsZyzypah47+JjjdX8d t33eZSB0/65XWnJJ/NlVm4iDfpIQkqVtNSZFonZk4TnEKu47LMLSyoFu69/HiUmoWoax hALwQP3NpCzrIO4wNzeSgeENBwTeMjiokLkhciCDmQUxli20fUqGYJR3dIDh7mu9Cw5l 20AE2bjmrBANTWF9bAk5q48sywTH4rYYmJcmvRJKxbXSJA3YNax0bUn5nnqHvhMAsok2 UlCg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="riocfqA/"; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id j17-20020a05600c485100b003fe28e72c93si955170wmo.109.2023.08.02.07.10.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:10:19 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="riocfqA/"; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id EC6B886ACB; Wed, 2 Aug 2023 16:09:38 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="riocfqA/"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 667E186C81; Wed, 2 Aug 2023 16:09:37 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lf1-x12a.google.com (mail-lf1-x12a.google.com [IPv6:2a00:1450:4864:20::12a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id E345386898 for ; Wed, 2 Aug 2023 16:09:34 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-4fe3678010eso5661705e87.3 for ; Wed, 02 Aug 2023 07:09:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985374; x=1691590174; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xwLXe18a4WYA06Yd9AyLjmRg+DGIXrFk3hfuX+AV2wY=; b=riocfqA/vQ99yvNnXRA8kvxrJhJG3WxA69xgb5r5gFWRZN5ZfE7c/si6XPM69gk7pu lu77lBNNqKet2mlacVv3iQb5U4ZeCyq//j0rtozJvVk0FbbU1H6zR6OZY+/G2JGqJTxu qlWuZDE7zY4vxaSUlVLdLTI1/XVobDXaoWnqAi5djSXK7X9WY2msZFNcP2eBjbIMdc/a 5cQmmgACWpHpur/I2fDemB7oI/NtSSKpIfl8HkUFjfoVUTsnRZ6Zof1MytarcrqbsH3H bCef3yIQqhP84MPbxdnh4ANHxzMBoSNqYjJFWF9mbWnTLYb7ScPeKcUNUhAXFlvApPjQ qTeg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985374; x=1691590174; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xwLXe18a4WYA06Yd9AyLjmRg+DGIXrFk3hfuX+AV2wY=; b=Qo+3qfrYJtVDWXBvmLPGiShhXKXcwT4jhQF9SNvT2ArbfPO6qIz2U1IRRHMP7tCBFS oYiNIFic7uv+KtR7NKUVE6GscWYXJzSKnwr02gKwu1NsIH2qBoPPcqw5i50G0XWiAJ0Q iMNKz1Cx3/qMTyNCOoq80jKQ8SI/yylI0u3r/LX+M8PU6J3kJx2jTa5X4au862tXzjcI Tj7EQ1x7NT1n+ZBJ38AGeDIpNou6eGcA9HFahYxJ6AVgdYmkGtZR7363laupLhzWrX56 TzoIFms2Vs9e3/fd4+bpi1rNIbTfXkmCh7wzXGnlNHLylovYbc+smekltziC8G1A2aQa pWcw== X-Gm-Message-State: ABy/qLaIufrND35TIoLOiEgUR2Fxf2JZSaFVBJXDyIFTZND0C19Dhs+x 8hLQfubfUssZCgLe9y9/CmL04D1CV1MS09BcN1awrg== X-Received: by 2002:a05:6512:2019:b0:4fd:d078:2e3f with SMTP id a25-20020a056512201900b004fdd0782e3fmr4250101lfb.42.1690985373639; Wed, 02 Aug 2023 07:09:33 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:32 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 05/13] net/lwip: implement tftp cmd Date: Wed, 2 Aug 2023 20:06:50 +0600 Message-Id: <20230802140658.10319-6-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Signed-off-by: Maxim Uvarov --- lib/lwip/Makefile | 1 + lib/lwip/apps/tftp/Makefile | 16 +++++ lib/lwip/apps/tftp/lwip-tftp.c | 124 +++++++++++++++++++++++++++++++++ 3 files changed, 141 insertions(+) create mode 100644 lib/lwip/apps/tftp/Makefile create mode 100644 lib/lwip/apps/tftp/lwip-tftp.c diff --git a/lib/lwip/Makefile b/lib/lwip/Makefile index a3521a9d18..1893162c1a 100644 --- a/lib/lwip/Makefile +++ b/lib/lwip/Makefile @@ -67,3 +67,4 @@ obj-$(CONFIG_NET) += port/sys-arch.o obj-$(CONFIG_CMD_DHCP) += apps/dhcp/lwip-dhcp.o obj-$(CONFIG_CMD_DNS) += apps/dns/lwip-dns.o +obj-$(CONFIG_CMD_TFTPBOOT) += apps/tftp/ diff --git a/lib/lwip/apps/tftp/Makefile b/lib/lwip/apps/tftp/Makefile new file mode 100644 index 0000000000..299c95e9c0 --- /dev/null +++ b/lib/lwip/apps/tftp/Makefile @@ -0,0 +1,16 @@ + +ccflags-y += -I$(srctree)/lib/lwip/port/include +ccflags-y += -I$(srctree)/lib/lwip/lwip-external/src/include -I$(srctree)/lib/lwip +ccflags-y += -I$(obj) + +$(obj)/tftp.o: $(obj)/tftp.c +.PHONY: $(obj)/tftp.c +$(obj)/tftp.c: + cp $(srctree)/lib/lwip/lwip-external/src/apps/tftp/tftp.c $(obj)/tftp.c + cp $(srctree)/lib/lwip/lwip-external/src/include/lwip/apps/tftp_client.h $(obj)/tftp_client.h + cp $(srctree)/lib/lwip/lwip-external/src/include/lwip/apps/tftp_common.h $(obj)/tftp_common.h + cp $(srctree)/lib/lwip/lwip-external/contrib/examples/tftp/tftp_example.h $(obj)/tftp_example.h + +obj-$(CONFIG_CMD_TFTPBOOT) += tftp.o +obj-$(CONFIG_CMD_TFTPBOOT) += lwip-tftp.o + diff --git a/lib/lwip/apps/tftp/lwip-tftp.c b/lib/lwip/apps/tftp/lwip-tftp.c new file mode 100644 index 0000000000..511d82e600 --- /dev/null +++ b/lib/lwip/apps/tftp/lwip-tftp.c @@ -0,0 +1,124 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#include +#include +#include + +#include "lwip/apps/tftp_client.h" +#include "lwip/apps/tftp_server.h" +#include + +#include + +#include "../../../lwip/ulwip.h" + +#if LWIP_UDP + +static ulong daddr; +static ulong size; + +static void *tftp_open(const char *fname, const char *mode, u8_t is_write) +{ + LWIP_UNUSED_ARG(mode); + return NULL; +} + +static void tftp_close(void *handle) +{ + printf("\ndone\n"); + printf("Bytes transferred = %ld (0x%lx hex)\n", size, size); + + env_set_ulong("filesize", size); + ulwip_exit(0); +} + +static int tftp_read(void *handle, void *buf, int bytes) +{ + return 0; +} + +static int tftp_write(void *handle, struct pbuf *p) +{ + struct pbuf *q; + + for (q = p; q != NULL; q = q->next) { + memcpy((void *)daddr, q->payload, q->len); + /* printf("downloaded chunk size %d, to addr 0x%lx\n", q->len, daddr); */ + daddr += q->len; + size += q->len; + printf("#"); + } + + return 0; +} + +/* For TFTP client only */ +static void tftp_error(void *handle, int err, const char *msg, int size) +{ + char message[100]; + + LWIP_UNUSED_ARG(handle); + + memset(message, 0, sizeof(message)); + MEMCPY(message, msg, LWIP_MIN(sizeof(message)-1, (size_t)size)); + + printf("TFTP error: %d (%s)", err, message); +} + +static const struct tftp_context tftp = { + tftp_open, + tftp_close, + tftp_read, + tftp_write, + tftp_error +}; + +int lwip_tftp(ulong addr, char *fname) +{ + void *f = (void *)0x1; /*fake handle*/ + err_t err; + ip_addr_t srv; + int ret; + char *server_ip; + + if (!fname || addr == 0) + return CMD_RET_FAILURE; + + size = 0; + daddr = addr; + server_ip = env_get("serverip"); + if (!server_ip) { + printf("error: serverip variable has to be set\n"); + return CMD_RET_FAILURE; + } + + ret = ipaddr_aton(server_ip, &srv); + LWIP_ASSERT("ipaddr_aton failed", ret == 1); + + printf("TFTP from server %s; our IP address is %s\n", + server_ip, env_get("ipaddr")); + printf("Filename '%s'.\n", fname); + printf("Load address: 0x%lx\n", daddr); + printf("Loading:"); + + err = tftp_init_client(&tftp); + if (!(err == ERR_OK || err == ERR_USE)) + printf("tftp_init_client err: %d\n", err); + + err = tftp_get(f, &srv, TFTP_PORT, fname, TFTP_MODE_OCTET); + /* might return different errors, like routing problems */ + if (err != ERR_OK) { + printf("tftp_get err=%d\n", err); + } + LWIP_ASSERT("tftp_get failed", err == ERR_OK); + + env_set_hex("fileaddr", addr); + return err; +} +#else +#error "UDP has to be supported" +#endif /* LWIP_UDP */ From patchwork Wed Aug 2 14:06:51 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709170 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp931086wrw; Wed, 2 Aug 2023 07:10:31 -0700 (PDT) X-Google-Smtp-Source: APBJJlFMWF3FbAtd6bDE2FmXpzvCHzoIRKUTsNXTEbSXu0RUQ/d06fcAnzJwAlju5toHrcQQXUan X-Received: by 2002:a05:6000:8:b0:315:96ca:dcab with SMTP id h8-20020a056000000800b0031596cadcabmr4906032wrx.35.1690985431602; Wed, 02 Aug 2023 07:10:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985431; cv=none; d=google.com; s=arc-20160816; b=GIilhhUwdciV9jLWMkV6BGrqcLN2Fl6jH0Gi1D6NbtFpaSgDdZmYZMIcQ2H+SPEQUv xCpR8MGPTwQr8m67wtihp0Nj+GnLF2d6T/kzc7JJ0woJV0DPmVVpwCwQh7pMrKeWBgdA WihfiA2gjbIij+llkWUhkryxrkFHsgxmQ7P0Orn0CxqIXSMXxiYV0RB2qbeIMVS3i22M EJaYTimgYwwCpnx3j+N3Vuo2qaVeSz2xQQcDGKjBrVQv04IVNv2oZ5b4ekeyN4oGnm5A +Jx6WQEJ6lvu7hAkWxD3+m/faQCKgvrZ9HwWnF0iD5ci2dyP4wLImjYNb87C7RyuJCPN yhGg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=kk3H8YW4H1Lr5BVyJkt4LyxRRYYXEZYXETh11fPCJXI=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=QJW2BXMV8QVgXJOhuh2Jr7YAsfbzbLWHJTLBhNRBVwnJT+VcaxbVtx8dSD7XdOH2x8 2b/n6SzLGcgUgG0eKzrDkYIwkAI/eegChiXk2Vcuk5Kfd622a7eQ2Qzf1dee7fAT2qgW RcUEHyuqgU1W2TkFtHbzS3iWuNCtAgJHCxmTVz3ufVKcGOPaxKLhxHnuQ2x45IIycfSV 4EvV62VwnZKj5c4tGPsCK6uKS1hSefYD93RJTKjyS/Wl9sWAGhcYVoLZH58DPL+U7zOP X1C9zvKlqUWjF6h+g1OF4QaOod5LU2HtscRMnm3HaE9hJ1fF6rIvDqbBFB5nQLotPUNV eOwQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=lt67M6yK; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id k1-20020adfe3c1000000b0031435c43c5asi767049wrm.713.2023.08.02.07.10.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:10:31 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=lt67M6yK; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 6745286C0A; Wed, 2 Aug 2023 16:09:43 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="lt67M6yK"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 66DFB86898; Wed, 2 Aug 2023 16:09:41 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lj1-x22f.google.com (mail-lj1-x22f.google.com [IPv6:2a00:1450:4864:20::22f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id DEECD868AD for ; Wed, 2 Aug 2023 16:09:38 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lj1-x22f.google.com with SMTP id 38308e7fff4ca-2b9a2033978so107113001fa.0 for ; Wed, 02 Aug 2023 07:09:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985378; x=1691590178; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kk3H8YW4H1Lr5BVyJkt4LyxRRYYXEZYXETh11fPCJXI=; b=lt67M6yK1L5cSjHXPAE/oO9oQ4D6Ibfm5er/qFklMiTaWzv3AricG0U8QW+tDz8RGW u07zPrKep9e6FTkPFNEPm3rcEVlUvgob0VACGNweGPzzUZfG8afbrurIr4aaxxFlcEVI Uimp6apPmzhAdv7VoUzUXLSG4UP7dtqPU12uqRnXLzRf/dSqDcV1ZNr8613MRU34mKCE HLmKRs3ibQ9VfYTDs94fUI6IvgaxH1DiOTH3Dozrz8xyA70qd4QzrOLXiF9xJhS19LNq AUhLkYb1i2d8MApSscQFI2d+IYqK5/BTPII1y5o1Kv6qTZ2A1LEg0pfSrRnmRTTSO4gz D/kQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985378; x=1691590178; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kk3H8YW4H1Lr5BVyJkt4LyxRRYYXEZYXETh11fPCJXI=; b=eEkRilK9QnfXepJVfNmVUKFO0fb4HMW5sCmrC1gKIeC4SfipsYZWERmWQXgaBrpQk5 wpHlYVM4px3Y3SXLv09PyxgUsbfc5kWzj069dLjOyAlI+qi0vUd48wiwziMbPHhZjqEK 1nS2Nd6rhFiW18qdhOuepU4uZysy9+yex2oPiS0SM5VLruDiwGpDsWCmES1s6gMk81qm 1ZIj3rEb6Sd16Rjvq1SwjUEnTTW+oOtYUJm/ANBhK3eoSEFKAn4kVh4obgIYNDcXyaWB fyvJYmfswthlWIiCO5ZzaOrK8drjR+HzsHQe8oONuogjEj2bJEoeO0QUju8oO80ZJeIP njyg== X-Gm-Message-State: ABy/qLYTZ8APAbhNcVcZJfWPXv8V+IR5oFVx5FgeJ1yBfLGCFEbi0uQp LcsYcZrqwl+GyB+BTRlHmBJw1a6DBYFVuzoH8G2yCw== X-Received: by 2002:a05:6512:754:b0:4f6:1b45:e8aa with SMTP id c20-20020a056512075400b004f61b45e8aamr3873698lfs.50.1690985377911; Wed, 02 Aug 2023 07:09:37 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:37 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 06/13] net/lwip: implement wget cmd Date: Wed, 2 Aug 2023 20:06:51 +0600 Message-Id: <20230802140658.10319-7-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Signed-off-by: Maxim Uvarov --- lib/lwip/Makefile | 1 + lib/lwip/apps/http/Makefile | 13 ++++ lib/lwip/apps/http/lwip-wget.c | 130 +++++++++++++++++++++++++++++++++ 3 files changed, 144 insertions(+) create mode 100644 lib/lwip/apps/http/Makefile create mode 100644 lib/lwip/apps/http/lwip-wget.c diff --git a/lib/lwip/Makefile b/lib/lwip/Makefile index 1893162c1a..ec6b728c8e 100644 --- a/lib/lwip/Makefile +++ b/lib/lwip/Makefile @@ -68,3 +68,4 @@ obj-$(CONFIG_NET) += port/sys-arch.o obj-$(CONFIG_CMD_DHCP) += apps/dhcp/lwip-dhcp.o obj-$(CONFIG_CMD_DNS) += apps/dns/lwip-dns.o obj-$(CONFIG_CMD_TFTPBOOT) += apps/tftp/ +obj-$(CONFIG_CMD_WGET) += apps/http/ diff --git a/lib/lwip/apps/http/Makefile b/lib/lwip/apps/http/Makefile new file mode 100644 index 0000000000..7d22817e50 --- /dev/null +++ b/lib/lwip/apps/http/Makefile @@ -0,0 +1,13 @@ +ccflags-y += -I$(srctree)/lib/lwip/port/include +ccflags-y += -I$(srctree)/lib/lwip/lwip-external/src/include -I$(srctree)/lib/lwip +ccflags-y += -I$(obj) + +$(obj)/http_clinet.o: $(obj)/http_client.c +.PHONY: $(obj)/http_client.c +$(obj)/http_client.c: + cp $(srctree)/lib/lwip/lwip-external/src/apps/http/http_client.c $(obj)/http_client.c + cp $(srctree)/lib/lwip/lwip-external/src/include/lwip/apps/http_client.h $(obj)/http_client.h + +obj-$(CONFIG_CMD_WGET) += http_client.o +obj-$(CONFIG_CMD_WGET) += lwip-wget.o + diff --git a/lib/lwip/apps/http/lwip-wget.c b/lib/lwip/apps/http/lwip-wget.c new file mode 100644 index 0000000000..47a77250c5 --- /dev/null +++ b/lib/lwip/apps/http/lwip-wget.c @@ -0,0 +1,130 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#include +#include +#include + +#include "http_client.h" +#include + +static ulong daddr; +static httpc_connection_t settings; + +#define SERVER_NAME_SIZE 200 + +static err_t httpc_recv(void *arg, struct altcp_pcb *pcb, struct pbuf *p, err_t err) +{ + struct pbuf *q; + LWIP_UNUSED_ARG(err); + + if (!p) + return ERR_BUF; + + for (q = p; q != NULL; q = q->next) { + memcpy((void *)daddr, q->payload, q->len); + printf("downloaded chunk size %d, to addr 0x%lx\n", q->len, daddr); + daddr += q->len; + } + altcp_recved(pcb, p->tot_len); + pbuf_free(p); + return ERR_OK; +} + +static void httpc_result(void *arg, httpc_result_t httpc_result, u32_t rx_content_len, + u32_t srv_res, err_t err) +{ + if (httpc_result == HTTPC_RESULT_OK) { + printf("\n%d bytes successfully downloaded.\n", rx_content_len); + env_set_ulong("filesize", rx_content_len); + ulwip_exit(0); + } else { + printf("\nhttp eroror: %d\n", httpc_result); + ulwip_exit(-1); + } +} + +/* http://hostname:port/url */ +static int parse_url(char *url, char *host, int *port) +{ + char *p, *pp; + + p = strstr(url, "http://"); + if (!p) { + printf("err: no http://!\n"); + return -1; + } + + p += strlen("http://"); + + /* parse hostname */ + pp = strchr(p, ':'); + if (pp) { +#define PORT_STR_SIZE 5 + char portstr[PORT_STR_SIZE]; + + if (pp - p >= SERVER_NAME_SIZE) + return -2; + memcpy(host, p, pp - p); + host[pp - p + 1] = '\0'; + + p = pp + 1; + pp = strchr(p, '/'); + if (!pp) { + printf("wrong url\n"); + return -3; + } + + if (pp - p >= PORT_STR_SIZE) + return -4; + memcpy(portstr, p, pp - p); + portstr[pp - p] = '\0'; + *port = atoi(portstr); + } else { + pp = strchr(p, '/'); + if (!pp) { + printf("wrong url\n"); + return -5; + } + + if (pp - p >= SERVER_NAME_SIZE) + return -6; + memcpy(host, p, pp - p); + host[pp - p + 1] = '\0'; + *port = 80; /* default */ + } + + return 0; +} + +int lwip_wget(ulong addr, char *url) +{ + err_t err; + int port; + char server_name[SERVER_NAME_SIZE]; + httpc_state_t *connection; + + daddr = addr; + + err = parse_url(url, server_name, &port); + if (err) { + printf("error parse_url\n"); + return -1; + } + + printf("downloading %s to addr 0x%lx\n", url, addr); + memset(&settings, 0, sizeof(settings)); + settings.result_fn = httpc_result; + err = httpc_get_file_dns(server_name, port, url, &settings, + httpc_recv, NULL, &connection); + if (err != ERR_OK) { + printf("httpc_init_connection failed\n"); + return err; + } + + env_set_hex("fileaddr", addr); + return 0; +} From patchwork Wed Aug 2 14:06:52 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709171 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp931220wrw; Wed, 2 Aug 2023 07:10:45 -0700 (PDT) X-Google-Smtp-Source: APBJJlH3IUt0X+pHYCKaGlwgS26MsRouDWxd5ypNxkLMwYDq/RahFkRZ6zXCPMz6HdmIYhRzmPSH X-Received: by 2002:a05:600c:22d1:b0:3fa:77ed:9894 with SMTP id 17-20020a05600c22d100b003fa77ed9894mr4943357wmg.7.1690985445219; Wed, 02 Aug 2023 07:10:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985445; cv=none; d=google.com; s=arc-20160816; b=t8F2svfCqCDrMbg3AzsWxiDgbHguZriTY0unx4h/lX0OpdGV320eiTudao/4D5GA6o 7QYX4mNFmkYZn2T/unjcQMYNbLUW51k0bXbE6WhulqC8erleeLmYvIo30Rcq72ug3xbc kLpZ/57vBB3DCbZxUpt9WgrFPDWFwI04KabHBVAD4SyvdkG4wtqXJRHxLNalsjdZeUP4 QKM7xgPJfZReZHO5ySi9TB8K/2TaqrKHg0AuFHFtLMqcx1dAKx0iErYMmTS332k2KNZR oO5GafbC6I/qyzAzcQ62A67aV8EmkGxPY2wZn+13MP3EnRqmBsGmL/QZFXpamrRbg/EW h5sw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=l8nVsuHIUN/0ayZzjvwElKSpd1z/2gXHWvytwVlu78M=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=KcnCo4UGwtExSjdAAfcLdQslwOB4pmXgf7oz5aHq9/1FtgL1fUrEfeF0eD9Fh8VJ5p 730raleNd72TV8BhG5Q8Taol1vFPiNprEDnENXUGkrB+CoZIEmgCesdfdJ17rG8VRqpj 7I/SimRnsi8gN6B2bcAhXz4QyMTaU1hZPRG+txAi4XDftfRIwAncVQmfExA+g/FSE6T1 0sl9B8fjARUYftJ6kRdUUCvMWg/Mxmli+8pWqduyAJERNXXpxgFZvd130nhBsqnx7KLn NZtSR6XWHTXpG2+ahvC1imMc2unkDT5oKL1fQHa5fp1M5s90kPF/cZfk2vjdn7XfrOnn qmgw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=X9eyngC7; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [2a01:238:438b:c500:173d:9f52:ddab:ee01]) by mx.google.com with ESMTPS id c16-20020adffb10000000b003175b99e12csi6978862wrr.654.2023.08.02.07.10.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:10:45 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=X9eyngC7; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 779B3868AB; Wed, 2 Aug 2023 16:09:45 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="X9eyngC7"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 181B986C7F; Wed, 2 Aug 2023 16:09:45 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [IPv6:2a00:1450:4864:20::12c]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id B34A986898 for ; Wed, 2 Aug 2023 16:09:42 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-4fbf09a9139so11385293e87.2 for ; Wed, 02 Aug 2023 07:09:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985382; x=1691590182; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=l8nVsuHIUN/0ayZzjvwElKSpd1z/2gXHWvytwVlu78M=; b=X9eyngC7RmhA2Pzi/kJc5Yoq1GQAMzWAASiThEOfijozOIKZ2SdbXWYtVlWUIU7o/b HXaxmHJwzRBXQ9MdEV3bbDRapZ/FMgFl1KzRhPxnPMvHXkYkuhDfJKHcBSSsqxhY+1hG ic13JuqKtr4V8ogYEQnQp0XCYwhWwiIsCePxAKFQ9MqLmshtWuiL0sBka2ucO0N6wCUE GkOM75oKw1/QpyVmnl1dJDU7uELajt5NmLzpjZln+BuimijtX6m9NBy+yeXBQHjXMgNg uevAT6K36cwXInJ3V9uEU2t9YW7/tyXUVUvwoTFJkZ+Qc85hpWX+3lN+7Si/MyhgHMUy JzDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985382; x=1691590182; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=l8nVsuHIUN/0ayZzjvwElKSpd1z/2gXHWvytwVlu78M=; b=N+D99QAOpYzOvFpB6X77Ctn5VjlaND2NCkHq7I96BwIra4xU/IE0pjSa8wpDymE96+ YHV/QsLdjWsG82G0eyGtisfI4seLkx0YVS/tPOqYo98H0jOxpA0AaODNUhtaeUB1HfUV IczhP6Zk7dxrYM1+GPuzgkKlwS5+AEbf2sL3ouf/ciQAGUGLI1paYAATLOoOzT5eOy8W 5PXCpkzsW5owgwwl6+yQ60GwOyiG2bR6sbmY7dQ1hmcJPLoHUrCAUedSGpsF2L8p9lwo wC2xCFRsTBZjwvFDr3qADBFLRE6Wc//tnqoBitUr3jr1U0ptLeAMnBIXAvB6criB5c0/ wa/w== X-Gm-Message-State: ABy/qLaJr1smyHZVzKeiETzg0CYNqcQuWgTlX+IlfJ3sGtuYPUCyBhUe gjE6ERA2SRKARdunTeSWhf6zzhMqaThBywhFcO7Z1A== X-Received: by 2002:a19:ca52:0:b0:4fb:8eec:ce49 with SMTP id h18-20020a19ca52000000b004fb8eecce49mr4215926lfj.31.1690985381867; Wed, 02 Aug 2023 07:09:41 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:40 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 07/13] net/lwip: implement ping cmd Date: Wed, 2 Aug 2023 20:06:52 +0600 Message-Id: <20230802140658.10319-8-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Signed-off-by: Maxim Uvarov --- lib/lwip/Makefile | 1 + lib/lwip/apps/ping/Makefile | 11 ++++++++++ lib/lwip/apps/ping/lwip_ping.c | 37 ++++++++++++++++++++++++++++++++++ lib/lwip/apps/ping/lwip_ping.h | 24 ++++++++++++++++++++++ lib/lwip/apps/ping/ping.h | 35 ++++++++++++++++++++++++++++++++ 5 files changed, 108 insertions(+) create mode 100644 lib/lwip/apps/ping/Makefile create mode 100644 lib/lwip/apps/ping/lwip_ping.c create mode 100644 lib/lwip/apps/ping/lwip_ping.h create mode 100644 lib/lwip/apps/ping/ping.h diff --git a/lib/lwip/Makefile b/lib/lwip/Makefile index ec6b728c8e..87ed99a230 100644 --- a/lib/lwip/Makefile +++ b/lib/lwip/Makefile @@ -67,5 +67,6 @@ obj-$(CONFIG_NET) += port/sys-arch.o obj-$(CONFIG_CMD_DHCP) += apps/dhcp/lwip-dhcp.o obj-$(CONFIG_CMD_DNS) += apps/dns/lwip-dns.o +obj-$(CONFIG_CMD_PING) += apps/ping/ obj-$(CONFIG_CMD_TFTPBOOT) += apps/tftp/ obj-$(CONFIG_CMD_WGET) += apps/http/ diff --git a/lib/lwip/apps/ping/Makefile b/lib/lwip/apps/ping/Makefile new file mode 100644 index 0000000000..0d0a811336 --- /dev/null +++ b/lib/lwip/apps/ping/Makefile @@ -0,0 +1,11 @@ +ccflags-y += -I$(srctree)/lib/lwip/port/include +ccflags-y += -I$(srctree)/lib/lwip/lwip-external/src/include -I$(srctree)/lib/lwip +ccflags-y += -I$(obj) + +.PHONY: $(obj)/ping.c +$(obj)/ping.o: $(obj)/ping.c +$(obj)/ping.c: + cp $(srctree)/lib/lwip/lwip-external/contrib/apps/ping/ping.c $(obj)/ping.c + +obj-$(CONFIG_CMD_PING) += ping.o +obj-$(CONFIG_CMD_PING) += lwip_ping.o diff --git a/lib/lwip/apps/ping/lwip_ping.c b/lib/lwip/apps/ping/lwip_ping.c new file mode 100644 index 0000000000..40658ab6fd --- /dev/null +++ b/lib/lwip/apps/ping/lwip_ping.c @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#include "lwip/opt.h" +#include "lwip/ip_addr.h" +#include "ping.h" + +#include + +static ip_addr_t ip_target; + +static int ulwip_ping_tmo(void) +{ + + printf("ping failed; host %s is not alive\n", ipaddr_ntoa(&ip_target)); + return 0; +} + +int lwip_ping_init(char *ping_addr) +{ + int err; + + err = ipaddr_aton(ping_addr, &ip_target); + if (err == 0) { + printf("wrong ping addr string \"%s\" \n", ping_addr); + return -1; + } + + ulwip_set_tmo(ulwip_ping_tmo); + + ping_init(&ip_target); + + return 0; +} diff --git a/lib/lwip/apps/ping/lwip_ping.h b/lib/lwip/apps/ping/lwip_ping.h new file mode 100644 index 0000000000..7f08095427 --- /dev/null +++ b/lib/lwip/apps/ping/lwip_ping.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#ifndef LWIP_PING_H +#define LWIP_PING_H + +#include + +/** + * PING_USE_SOCKETS: Set to 1 to use sockets, otherwise the raw api is used + */ +#ifndef PING_USE_SOCKETS +#define PING_USE_SOCKETS 0 +#endif + +int lwip_ping_init(char *ping_addr); + +void ping_raw_init(void); +void ping_send_now(void); + +#endif /* LWIP_PING_H */ diff --git a/lib/lwip/apps/ping/ping.h b/lib/lwip/apps/ping/ping.h new file mode 100644 index 0000000000..0dd4bd78c7 --- /dev/null +++ b/lib/lwip/apps/ping/ping.h @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +#include "../../../lwip/ulwip.h" + +#include "lwip/prot/ip4.h" + +#define ip4_print_parts(a, b, c, d) \ + printf("%" U16_F ".%" U16_F ".%" U16_F ".%" U16_F, a, b, c, d); + +#define ip4_print(ipaddr) \ + ip4_print_parts(\ + (u16_t)((ipaddr) != NULL ? ip4_addr1_16(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? ip4_addr2_16(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? ip4_addr3_16(ipaddr) : 0), \ + (u16_t)((ipaddr) != NULL ? ip4_addr4_16(ipaddr) : 0)) + + +#define LWIP_DEBUG 1 /* ping_time is under ifdef*/ +#define PING_RESULT(cond) { \ + if (cond == 1) { \ + printf("host "); \ + ip4_print(addr); \ + printf(" is alive\n"); \ + printf(" %"U32_F" ms\n", (sys_now() - ping_time)); \ + ulwip_exit(0); \ + } else { \ + printf("ping failed; host "); \ + ip4_print(addr); \ + printf(" is not alive\n"); \ + ulwip_exit(-1); \ + } \ + } while (0); + +#include "lwip/ip_addr.h" +void ping_init(const ip_addr_t *ping_addr); From patchwork Wed Aug 2 14:06:53 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709172 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp931351wrw; Wed, 2 Aug 2023 07:10:57 -0700 (PDT) X-Google-Smtp-Source: APBJJlFvamEQBsTJ4fdMGIa9AZZC9iJ3pxyPfhgQcoMtT81VAwklzFLVDQLGNpUKX8/mAgKrGiYU X-Received: by 2002:a5d:6849:0:b0:315:acbc:cab6 with SMTP id o9-20020a5d6849000000b00315acbccab6mr4587015wrw.16.1690985457143; Wed, 02 Aug 2023 07:10:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985457; cv=none; d=google.com; s=arc-20160816; b=V/4LhSfbQ3BEWbFCuGQiQUV4AzWkLZtWFFyFQO7DaTfu6po4+4lM8unSJxC+C/vfna O4fQcqUSEiruP8hF7ThX8+PRih16TBHVvXwJdvhChkVO04Tiio5jooJ9O1KJwM1aQ9hI kVtYVp5y1+AaGTW6bNo+sgzmWScKmsr8mwnF673aptrG5036mPC8w///CW3AdsBGVG7r NaQE3nR0TpPhVzg4d4/02LE5+OlEo0GLQCvV+a8cOh8jhWSeZO8vOjF4iJadswTfHQ+t 0z/8P+nHWnzxM6bzO4LLuTChbL8qyBeN5cJIsB2ux3VDFDfidEG3FLVLORNlwmvXxdo9 UzJQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=ra/MGwVzwae2Nmcm3MFrkzv/IXzPBCz93bfzRAqJmvo=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=PeQnfwrmqELF7rPuhgGw2t2971zzAcCo0r3LR8q9lACZpqTLnlDuYgEYvIYzDYZ7HT ddOfowpD/PBbtj/J0Y44fKdGcGDBBH/Pf6UewycbQlxA6yPmlbOKHMayD4IafVhZeEDE 8Q7qBrQHGF+uiXAq+JstD8inbV3xWrVmuvf/eV0AABBtuKNYjEcw/KiHjbl4yX7ybaW5 x+zZGKb03SfDCNJ+WcjrFktU21FtYGmBfW6tQfyrpl+YJshjDbL3tPdPfuiW9ps4eAt8 lPboLcLcwNNlzsYdXrgOAMrP8beMur8TUViRHt9lu/RjuDK7wuxWCJgwYQUseFuj9G1d b2Fw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NFiSeeCj; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id n8-20020a5d4208000000b0031739d10806si827539wrq.233.2023.08.02.07.10.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:10:57 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=NFiSeeCj; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 4C1B786C8D; Wed, 2 Aug 2023 16:09:52 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="NFiSeeCj"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 2F30E86C94; Wed, 2 Aug 2023 16:09:50 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,UPPERCASE_50_75 autolearn=no autolearn_force=no version=3.4.2 Received: from mail-lf1-x12f.google.com (mail-lf1-x12f.google.com [IPv6:2a00:1450:4864:20::12f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 7DF4186C8C for ; Wed, 2 Aug 2023 16:09:46 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-4fe0e201f87so1292825e87.0 for ; Wed, 02 Aug 2023 07:09:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985385; x=1691590185; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ra/MGwVzwae2Nmcm3MFrkzv/IXzPBCz93bfzRAqJmvo=; b=NFiSeeCjJoEvxHxj2qyQwNcFWWs3UrYyoYyGUMNAZDn33AMXQgckmqQ/+stPkf6UPn yCSKrmgP8SgnugK1DN0qb8R/s8e/jEhTWUyis+4jn8thE+VBJniyOKCNdOR5YYmvl7TQ Hp050kq/OkjJ+a6zCWC2+DBAZ7whNCV5mEFgLL/uUSnWE5FeKGZPo+L/IGNyKo91q0QW R2P/EpBZZ2SW02B5ZuJ6jGigAsIWFz/1aQObeLwG1AcgV1i20wbiCU3CuzfEz5MDjdyQ rh0SqZCUMGEUw6Y0Z/aD8J5nlQeuYauNzhuOg/Ki9h/zgjD2IwptFHbnmTkvXq2lxzmu t6/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985385; x=1691590185; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ra/MGwVzwae2Nmcm3MFrkzv/IXzPBCz93bfzRAqJmvo=; b=CyNnEhrj4IC1HQZSQRrBxCtVGHg5zdIrpkHk7r7sw6LFKu9u6/x7ZKa6U+B6LMrA34 ewmYq5n1thIG9aROhrH9/3qmwEI+vWYaOpgpCFFsywRTMrz7wfd812DSOUMIiESIzRAm Sm7CVmxTC/liVC7JyyQ2q4yQyZpp5un/Ij8IG/9Y8l45TJxXOZLglCkb4ZEORx+bcAQP rgs3NLEljsHtdpkwtpEnrq998cDRr09Je5a+3uWSnOnDmd7fFMfXz5JuTv9nxacv09mB qYrYiKFIUWxgtSl7c0IM27LDD7FvUms30VDuMlzPD2zaAoq2p6/NAPsVy+GKVyyl0HXX Z/Hw== X-Gm-Message-State: ABy/qLZtkyR5/vBBA1tF+KRFSGPGzrEe6LyyY4RAQy255rZCrEL6dM5C TplL/OBDzrs/iilABiHmBDBVOudCdoy92RVYMElPaA== X-Received: by 2002:a19:2d5b:0:b0:4f9:dac6:2f3d with SMTP id t27-20020a192d5b000000b004f9dac62f3dmr2022584lft.13.1690985385596; Wed, 02 Aug 2023 07:09:45 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:44 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 08/13] net/lwip: add lwip configuration configuration Date: Wed, 2 Aug 2023 20:06:53 +0600 Message-Id: <20230802140658.10319-9-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean lwip configuration can be tuned with header file. Signed-off-by: Maxim Uvarov --- lib/lwip/lwipopts.h | 203 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 203 insertions(+) create mode 100644 lib/lwip/lwipopts.h diff --git a/lib/lwip/lwipopts.h b/lib/lwip/lwipopts.h new file mode 100644 index 0000000000..7f99a536ee --- /dev/null +++ b/lib/lwip/lwipopts.h @@ -0,0 +1,203 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#ifndef LWIP_LWIPOPTS_H +#define LWIP_LWIPOPTS_H + +#include "lwipopts.h" + +#if defined(CONFIG_LWIP_LIB_DEBUG) +#define LWIP_DEBUG 1 +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL +#define LWIP_DBG_TYPES_ON LWIP_DBG_ON +#define ETHARP_DEBUG LWIP_DBG_OFF +#define NETIF_DEBUG LWIP_DBG_OFF +#define PBUF_DEBUG LWIP_DBG_OFF +#define API_LIB_DEBUG LWIP_DBG_OFF +#define API_MSG_DEBUG LWIP_DBG_OFF +#define SOCKETS_DEBUG LWIP_DBG_OFF +#define ICMP_DEBUG LWIP_DBG_OFF +#define IGMP_DEBUG LWIP_DBG_OFF +#define INET_DEBUG LWIP_DBG_OFF +#define IP_DEBUG LWIP_DBG_OFF +#define IP_REASS_DEBUG LWIP_DBG_OFF +#define RAW_DEBUG LWIP_DBG_OFF +#define MEM_DEBUG LWIP_DBG_OFF +#define MEMP_DEBUG LWIP_DBG_OFF +#define SYS_DEBUG LWIP_DBG_OFF +#define TIMERS_DEBUG LWIP_DBG_OFF +#define TCP_DEBUG LWIP_DBG_OFF +#define TCP_INPUT_DEBUG LWIP_DBG_OFF +#define TCP_FR_DEBUG LWIP_DBG_OFF +#define TCP_RTO_DEBUG LWIP_DBG_OFF +#define TCP_CWND_DEBUG LWIP_DBG_OFF +#define TCP_WND_DEBUG LWIP_DBG_OFF +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +#define TCP_RST_DEBUG LWIP_DBG_OFF +#define TCP_QLEN_DEBUG LWIP_DBG_OFF +#define UDP_DEBUG LWIP_DBG_OFF +#define TCPIP_DEBUG LWIP_DBG_OFF +#define SLIP_DEBUG LWIP_DBG_OFF +#define DHCP_DEBUG LWIP_DBG_ON +#define AUTOIP_DEBUG LWIP_DBG_ON +#define DNS_DEBUG LWIP_DBG_ON +#define IP6_DEBUG LWIP_DBG_OFF +#define DHCP6_DEBUG LWIP_DBG_OFF +#else +#define LWIP_DBG_MIN_LEVEL LWIP_DBG_LEVEL_ALL +#define LWIP_DBG_TYPES_ON LWIP_DBG_OFF +#define ETHARP_DEBUG LWIP_DBG_OFF +#define NETIF_DEBUG LWIP_DBG_OFF +#define PBUF_DEBUG LWIP_DBG_OFF +#define API_LIB_DEBUG LWIP_DBG_OFF +#define API_MSG_DEBUG LWIP_DBG_OFF +#define SOCKETS_DEBUG LWIP_DBG_OFF +#define ICMP_DEBUG LWIP_DBG_OFF +#define IGMP_DEBUG LWIP_DBG_OFF +#define INET_DEBUG LWIP_DBG_OFF +#define IP_DEBUG LWIP_DBG_OFF +#define IP_REASS_DEBUG LWIP_DBG_OFF +#define RAW_DEBUG LWIP_DBG_OFF +#define MEM_DEBUG LWIP_DBG_OFF +#define MEMP_DEBUG LWIP_DBG_OFF +#define SYS_DEBUG LWIP_DBG_OFF +#define TIMERS_DEBUG LWIP_DBG_OFF +#define TCP_DEBUG LWIP_DBG_OFF +#define TCP_INPUT_DEBUG LWIP_DBG_OFF +#define TCP_FR_DEBUG LWIP_DBG_OFF +#define TCP_RTO_DEBUG LWIP_DBG_OFF +#define TCP_CWND_DEBUG LWIP_DBG_OFF +#define TCP_WND_DEBUG LWIP_DBG_OFF +#define TCP_OUTPUT_DEBUG LWIP_DBG_OFF +#define TCP_RST_DEBUG LWIP_DBG_OFF +#define TCP_QLEN_DEBUG LWIP_DBG_OFF +#define UDP_DEBUG LWIP_DBG_OFF +#define TCPIP_DEBUG LWIP_DBG_OFF +#define SLIP_DEBUG LWIP_DBG_OFF +#define DHCP_DEBUG LWIP_DBG_OFF +#define AUTOIP_DEBUG LWIP_DBG_OFF +#define DNS_DEBUG LWIP_DBG_OFF +#define IP6_DEBUG LWIP_DBG_OFF +#define DHCP6_DEBUG LWIP_DBG_OFF +#endif +#define LWIP_TESTMODE 0 + +#if defined(CONFIG_LWIP_LIB_NOASSERT) +#define LWIP_NOASSERT 1 +#define LWIP_ASSERT(message, assertion) +#endif + +#include "lwip/debug.h" + +#define SYS_LIGHTWEIGHT_PROT 0 +#define NO_SYS 0 + +#define MEM_ALIGNMENT 1 +#define MEM_SIZE CONFIG_LWIP_LIB_MEM_SIZE + +#define MEMP_NUM_PBUF 4 +#define MEMP_NUM_RAW_PCB 2 +#define MEMP_NUM_UDP_PCB 4 +#define MEMP_NUM_TCP_PCB 2 +#define MEMP_NUM_TCP_PCB_LISTEN 2 +#define MEMP_NUM_TCP_SEG 16 +#define MEMP_NUM_REASSDATA 1 +#define MEMP_NUM_ARP_QUEUE 2 +#define MEMP_NUM_SYS_TIMEOUT 4 +#define MEMP_NUM_NETBUF 2 +#define MEMP_NUM_NETCONN 32 +#define MEMP_NUM_TCPIP_MSG_API 8 +#define MEMP_NUM_TCPIP_MSG_INPKT 8 +#define PBUF_POOL_SIZE 8 + +#define LWIP_ARP 1 + +#define IP_FORWARD 0 +#define IP_OPTIONS_ALLOWED 1 +#define IP_REASSEMBLY 1 +#define IP_FRAG 1 +#define IP_REASS_MAXAGE 3 +#define IP_REASS_MAX_PBUFS 4 +#define IP_FRAG_USES_STATIC_BUF 0 + +#define IP_DEFAULT_TTL 255 + +#define LWIP_ICMP 1 + +#define LWIP_RAW 1 + +#if defined(CONFIG_LWIP_LIB_DHCP) +#define LWIP_DHCP 1 +#define LWIP_DHCP_BOOTP_FILE 1 +#else +#define LWIP_DHCP 0 +#endif +#define LWIP_DHCP_DOES_ACD_CHECK 0 + +#define LWIP_AUTOIP 0 + +#define LWIP_SNMP 0 + +#define LWIP_IGMP 0 + +#if defined(CONFIG_LWIP_LIB_DNS) +#define LWIP_DNS 1 +#else +#define LWIP_DNS 0 +#endif + +#if defined(CONFIG_LWIP_LIB_TCP) +#define LWIP_UDP 1 +#else +#define LWIP_UDP 0 +#endif + +#if defined(CONFIG_LWIP_LIB_TCP) +#define LWIP_TCP 1 +#else +#define LWIP_TCP 0 +#endif + +#define LWIP_LISTEN_BACKLOG 0 + +#define PBUF_LINK_HLEN CONFIG_LWIP_LIB_PBUF_LINK_HLEN +#define PBUF_POOL_BUFSIZE LWIP_MEM_ALIGN_SIZE(TCP_MSS + 40 + PBUF_LINK_HLEN) + +#define LWIP_HAVE_LOOPIF 0 + +#if defined(CONFIG_LWIP_LIB_NETCONN) +#define LWIP_NETCONN 1 +#else +#define LWIP_NETCONN 0 +#define LWIP_DISABLE_MEMP_SANITY_CHECKS 1 +#endif + +#if defined(CONFIG_LWIP_LIB_SOCKET) +#define LWIP_SOCKET 1 + +#define SO_REUSE 1 +#else +#define LWIP_SOCKET 0 +#define SO_REUSE 0 +#endif + +#define LWIP_STATS 0 + +#define PPP_SUPPORT 0 + +#define LWIP_TCPIP_CORE_LOCKING 0 + +#if defined(CONFIG_LWIP_LIB_LOOPBACK) +#define LWIP_NETIF_LOOPBACK 1 +#else +#define LWIP_NETIF_LOOPBACK 0 +#endif +/* use malloc instead of pool */ +#define MEMP_MEM_MALLOC 1 +#define MEMP_MEM_INIT 1 +#define MEM_LIBC_MALLOC 1 + +#endif /* LWIP_LWIPOPTS_H */ From patchwork Wed Aug 2 14:06:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709173 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp931473wrw; Wed, 2 Aug 2023 07:11:08 -0700 (PDT) X-Google-Smtp-Source: APBJJlEuk4Wav2+1v377rppdmcwtp2FqdwkhDOFYwWj9TUAnciNnsqWOmozj4CdsmNUHGaK7AGiF X-Received: by 2002:adf:e70d:0:b0:315:8f4f:81b8 with SMTP id c13-20020adfe70d000000b003158f4f81b8mr5243392wrm.50.1690985468270; Wed, 02 Aug 2023 07:11:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985468; cv=none; d=google.com; s=arc-20160816; b=083v1dC60gOFOUyrgjevVKvV9hVnIrcZXtkb5dFKMdl2uM0afIO6J/MBLgy5Ho7agt T2qbfqc9dcA8+ebRqtj7tjf+ClsY/6vIfxT485OQZZdf8rQH+26I2nIqWzNLt25Axcab vUrcsbQ1Sa8PAeOBudE6dmPqx/tYFpY+O5Mms9eaLwFIOK8Z9IGyuVq6vqRI5Woc3oiZ lPTWSt3uBuGA67IU9wwSxTwA8nao5WwmqW9ACHa/jwLhdQB5ze8GiLaY3dbk/AJRjTbk 472ozzl3OBoeaupoIXD62zPcIQSRiCQy9nA0MJQ9CsH0fgjoiubPIE1zEmO/3BErYFHx bCVg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=y9tIgvoKGi8YooFenGjSbohEqynnMkvx5v/ELt0H5sw=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=cSDU893Kcz6Os+zh1rX+akOyKj2a9NviC0W4K1iMK3L/5ejVMk2IAlIQhEK7/DLcDP buyphQlgxN36ywK889hB5c8Q16BieLVaMjUzJrq5iEt4iDdBSVdoiOBmtEau/SXdmOwJ LXk6XenWAR3jWigRuujRUwSh5mwNmU2V3pPTbIUd1P/mBtgN5xUnZ5pZKEKR7PZpGQP4 cicFG+6StGYlxygWztNQszb61kO7x0Al1O6qBxHT/XtXhkATyrU0nkK63n4OMw8lGknk jiRpfWlCDuqPHdsN5gPWcF0UQ9zZiQWFRd/V515gkG6AKxLAULKATDDoklqBR9jdHF+q P+cA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=MI0leIau; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [2a01:238:438b:c500:173d:9f52:ddab:ee01]) by mx.google.com with ESMTPS id jb9-20020a05600c54e900b003fddcb1a385si942938wmb.128.2023.08.02.07.11.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:11:08 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=MI0leIau; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 24EF486C94; Wed, 2 Aug 2023 16:09:55 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="MI0leIau"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C6F6586C9B; Wed, 2 Aug 2023 16:09:53 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id B9B5F86C94 for ; Wed, 2 Aug 2023 16:09:50 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-4fe07f0636bso11369762e87.1 for ; Wed, 02 Aug 2023 07:09:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985390; x=1691590190; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=y9tIgvoKGi8YooFenGjSbohEqynnMkvx5v/ELt0H5sw=; b=MI0leIaue6k35rIAEC5bDu24So5BjiVSWEQSiJS15JcxBvq/Dk1rESGSIUEohrhNBU 0CTIsV9DJBOIZWpYf8G7EMRgEuUuTGpAu0LX/dzMkWB1KLeGFLXO1OZBb61ZQpimJjA7 uijLmGdal3OQjydz1R+Z5MnCfgZz7f7/KUQwDNuim6GG9u1ygMBS1Di1cA8F9kVmlnF4 jIQW84PYAu1HJI1JHaSDg1GQR5VasY9AnSvaOcEXmU21j8Kg7+831tld+/rwZiOdSm9M gM3OA4pccEWcDBcLrYwVWxcKPbVKozVs5G1aBSrlWkJjkak9GDD3d74DV5Wl72hn+5k7 O8GA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985390; x=1691590190; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=y9tIgvoKGi8YooFenGjSbohEqynnMkvx5v/ELt0H5sw=; b=LtvK8EcRXb01U+LUXh2aYEI1i2rq/bn4v8LEjKHTh/dKn/fxLcV7L8Lm9XLHATCT1h 50X6pn9NMy6YYxAbAVohQ1PcgURsWTdQWob98WG/IyhmFEEtAqjh+A92KhKwTJyT/MpU pVJj4zPsd6A6WE6b23jL5x4tcZX+k9L9uLJYF1ZaPDaJFc0tUJF/mzo0WvVO/ygIUeE5 dTihALb3cDPwWxhz/ihDo19QRgAWqkN1+diaXsbJlMnj5zCKC/5EQfeXNaW1qGf/W0EA IL2pcyk65sv09YhibquHBEY3Oq+uqNLrK7hV+2+8uLzTT/8HZwdzKlXYA/12qj3y7u6+ VILw== X-Gm-Message-State: ABy/qLaYAkdFt3/AO+W2zZji9KvkVORrZkXyi9KXodTPViumHMdTGKFG c4zHBF9yZAUPC4LSjNwb5uoiA84fQobMyd4G8uVQSQ== X-Received: by 2002:a19:9102:0:b0:4f8:4216:e91f with SMTP id t2-20020a199102000000b004f84216e91fmr4428044lfd.63.1690985389694; Wed, 02 Aug 2023 07:09:49 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:48 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 09/13] net/lwip: implement lwip port to u-boot Date: Wed, 2 Aug 2023 20:06:54 +0600 Message-Id: <20230802140658.10319-10-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Signed-off-by: Maxim Uvarov --- lib/lwip/port/if.c | 256 ++++++++++++++++++++++++++ lib/lwip/port/include/arch/cc.h | 46 +++++ lib/lwip/port/include/arch/sys_arch.h | 59 ++++++ lib/lwip/port/include/limits.h | 0 lib/lwip/port/sys-arch.c | 20 ++ 5 files changed, 381 insertions(+) create mode 100644 lib/lwip/port/if.c create mode 100644 lib/lwip/port/include/arch/cc.h create mode 100644 lib/lwip/port/include/arch/sys_arch.h create mode 100644 lib/lwip/port/include/limits.h create mode 100644 lib/lwip/port/sys-arch.c diff --git a/lib/lwip/port/if.c b/lib/lwip/port/if.c new file mode 100644 index 0000000000..2ed59a0c4e --- /dev/null +++ b/lib/lwip/port/if.c @@ -0,0 +1,256 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#include +#include +extern int eth_init(void); /* net.h */ +extern void string_to_enetaddr(const char *addr, uint8_t *enetaddr); /* net.h */ +extern struct in_addr net_ip; +extern u8 net_ethaddr[6]; + +#include "lwip/debug.h" +#include "lwip/arch.h" +#include "netif/etharp.h" +#include "lwip/stats.h" +#include "lwip/def.h" +#include "lwip/mem.h" +#include "lwip/pbuf.h" +#include "lwip/sys.h" +#include "lwip/netif.h" + +#include "lwip/ip.h" + +#define IFNAME0 'e' +#define IFNAME1 '0' + +static struct pbuf *low_level_input(struct netif *netif); +static int uboot_net_use_lwip; + +int ulwip_enabled(void) +{ + return uboot_net_use_lwip; +} + +/* 1 - in loop + * 0 - no loop + */ +static int loop_lwip; + +/* ret 1 - in loop + * 0 - no loop + */ +int ulwip_in_loop(void) +{ + return loop_lwip; +} + +void ulwip_loop_set(int loop) +{ + loop_lwip = loop; +} + +static int ulwip_app_err; + +void ulwip_exit(int err) +{ + ulwip_app_err = err; + ulwip_loop_set(0); +} + +int ulwip_app_get_err(void) +{ + return ulwip_app_err; +} + +struct uboot_lwip_if { +}; + +static struct netif uboot_netif; + +#define LWIP_PORT_INIT_NETMASK(addr) IP4_ADDR((addr), 255, 255, 255, 0) + +extern uchar *net_rx_packet; +extern int net_rx_packet_len; + +int uboot_lwip_poll(void) +{ + struct pbuf *p; + int err; + + p = low_level_input(&uboot_netif); + if (!p) { + printf("error p = low_level_input = NULL\n"); + return 0; + } + + err = ethernet_input(p, &uboot_netif); + if (err) + printf("ip4_input err %d\n", err); + + return 0; +} + +static struct pbuf *low_level_input(struct netif *netif) +{ + struct pbuf *p, *q; + u16_t len = net_rx_packet_len; + uchar *data = net_rx_packet; + +#if ETH_PAD_SIZE + len += ETH_PAD_SIZE; /* allow room for Ethernet padding */ +#endif + + /* We allocate a pbuf chain of pbufs from the pool. */ + p = pbuf_alloc(PBUF_RAW, len, PBUF_POOL); + if (p) { +#if ETH_PAD_SIZE + pbuf_remove_header(p, ETH_PAD_SIZE); /* drop the padding word */ +#endif + /* We iterate over the pbuf chain until we have read the entire + * packet into the pbuf. + */ + for (q = p; q != NULL; q = q->next) { + /* Read enough bytes to fill this pbuf in the chain. The + * available data in the pbuf is given by the q->len + * variable. + * This does not necessarily have to be a memcpy, you can also preallocate + * pbufs for a DMA-enabled MAC and after receiving truncate it to the + * actually received size. In this case, ensure the tot_len member of the + * pbuf is the sum of the chained pbuf len members. + */ + MEMCPY(q->payload, data, q->len); + data += q->len; + } + //acknowledge that packet has been read(); + +#if ETH_PAD_SIZE + pbuf_add_header(p, ETH_PAD_SIZE); /* reclaim the padding word */ +#endif + LINK_STATS_INC(link.recv); + } else { + //drop packet(); + LINK_STATS_INC(link.memerr); + LINK_STATS_INC(link.drop); + } + + return p; +} + +static int ethernetif_input(struct pbuf *p, struct netif *netif) +{ + struct ethernetif *ethernetif; + + ethernetif = netif->state; + + /* move received packet into a new pbuf */ + p = low_level_input(netif); + + /* if no packet could be read, silently ignore this */ + if (p) { + /* pass all packets to ethernet_input, which decides what packets it supports */ + if (netif->input(p, netif) != ERR_OK) { + LWIP_DEBUGF(NETIF_DEBUG, ("%s: IP input error\n", __func__)); + pbuf_free(p); + p = NULL; + } + } + return 0; +} + +static err_t low_level_output(struct netif *netif, struct pbuf *p) +{ + int err; + + err = eth_send(p->payload, p->len); + if (err != 0) { + printf("eth_send error %d\n", err); + return ERR_ABRT; + } + return ERR_OK; +} + +err_t uboot_lwip_if_init(struct netif *netif) +{ + struct uboot_lwip_if *uif = (struct uboot_lwip_if *)malloc(sizeof(struct uboot_lwip_if)); + + if (!uif) { + printf("uboot_lwip_if: out of memory\n"); + return ERR_MEM; + } + netif->state = uif; + + netif->name[0] = IFNAME0; + netif->name[1] = IFNAME1; + + netif->hwaddr_len = ETHARP_HWADDR_LEN; + string_to_enetaddr(env_get("ethaddr"), netif->hwaddr); +#if defined(CONFIG_LWIP_LIB_DEBUG) + printf(" MAC: %02X:%02X:%02X:%02X:%02X:%02X\n", + netif->hwaddr[0], netif->hwaddr[1], netif->hwaddr[2], + netif->hwaddr[3], netif->hwaddr[4], netif->hwaddr[5]); +#endif + +#if LWIP_IPV4 + netif->output = etharp_output; +#endif /* LWIP_IPV4 */ +#if LWIP_IPV6 + netif->output_ip6 = ethip6_output; +#endif /* LWIP_IPV6 */ + netif->linkoutput = low_level_output; + netif->mtu = 1500; + netif->flags = NETIF_FLAG_BROADCAST | NETIF_FLAG_ETHARP | NETIF_FLAG_LINK_UP; + + eth_init(); /* activate u-boot eth dev */ + + if (IS_ENABLED(CONFIG_LWIP_LIB_DEBUG)) { + printf("Initialized LWIP stack\n"); + } + + return ERR_OK; +} + +int uboot_lwip_init(void) +{ + ip4_addr_t ipaddr, netmask, gw; + + if (uboot_net_use_lwip) + return CMD_RET_SUCCESS; + + ip4_addr_set_zero(&gw); + ip4_addr_set_zero(&ipaddr); + ip4_addr_set_zero(&netmask); + + ipaddr_aton(env_get("ipaddr"), &ipaddr); + ipaddr_aton(env_get("ipaddr"), &netmask); + + LWIP_PORT_INIT_NETMASK(&netmask); + if (IS_ENABLED(CONFIG_LWIP_LIB_DEBUG)) { + printf("Starting lwIP, IP: %s\n", ip4addr_ntoa(&ipaddr)); + printf(" GW: %s\n", ip4addr_ntoa(&gw)); + printf(" mask: %s\n", ip4addr_ntoa(&netmask)); + } + + if (!netif_add(&uboot_netif, &ipaddr, &netmask, &gw, + &uboot_netif, uboot_lwip_if_init, ethernetif_input)) + printf("err: netif_add failed!\n"); + + netif_set_up(&uboot_netif); + netif_set_link_up(&uboot_netif); +#if LWIP_IPV6 + netif_create_ip6_linklocal_address(&uboot_netif, 1); + printf(" IPv6: %s\n", ip6addr_ntoa(netif_ip6_addr(uboot_netif, 0))); +#endif /* LWIP_IPV6 */ + + uboot_net_use_lwip = 1; + + return CMD_RET_SUCCESS; +} + +/* placeholder, not used now */ +void uboot_lwip_destroy(void) +{ + uboot_net_use_lwip = 0; +} diff --git a/lib/lwip/port/include/arch/cc.h b/lib/lwip/port/include/arch/cc.h new file mode 100644 index 0000000000..db30d7614e --- /dev/null +++ b/lib/lwip/port/include/arch/cc.h @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#ifndef LWIP_ARCH_CC_H +#define LWIP_ARCH_CC_H + +#include +#include + +#define LWIP_ERRNO_INCLUDE + +#define LWIP_ERRNO_STDINCLUDE 1 +#define LWIP_NO_UNISTD_H 1 +#define LWIP_TIMEVAL_PRIVATE 1 + +extern unsigned int lwip_port_rand(void); +#define LWIP_RAND() (lwip_port_rand()) + +/* different handling for unit test, normally not needed */ +#ifdef LWIP_NOASSERT_ON_ERROR +#define LWIP_ERROR(message, expression, handler) do { if (!(expression)) { \ + handler; }} while (0) +#endif + +#define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS + +#define LWIP_PLATFORM_ASSERT(x) do {printf("Assertion \"%s\" failed at line %d in %s\n", \ + x, __LINE__, __FILE__); } while (0) + +static inline int atoi(const char *str) +{ + int r = 0; + int i; + + for (i = 0; str[i] != '\0'; ++i) + r = r * 10 + str[i] - '0'; + + return r; +} + +#define LWIP_ERR_T int + +#endif /* LWIP_ARCH_CC_H */ diff --git a/lib/lwip/port/include/arch/sys_arch.h b/lib/lwip/port/include/arch/sys_arch.h new file mode 100644 index 0000000000..8d95146275 --- /dev/null +++ b/lib/lwip/port/include/arch/sys_arch.h @@ -0,0 +1,59 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#ifndef LWIP_ARCH_SYS_ARCH_H +#define LWIP_ARCH_SYS_ARCH_H + +#include "lwip/opt.h" +#include "lwip/arch.h" +#include "lwip/err.h" + +#define ERR_NEED_SCHED 123 + +void sys_arch_msleep(u32_t delay_ms); +#define sys_msleep(ms) sys_arch_msleep(ms) + +#if SYS_LIGHTWEIGHT_PROT +typedef u32_t sys_prot_t; +#endif /* SYS_LIGHTWEIGHT_PROT */ + +#include + +#define SYS_MBOX_NULL NULL +#define SYS_SEM_NULL NULL + +typedef u32_t sys_prot_t; + +struct sys_sem; +typedef struct sys_sem *sys_sem_t; +#define sys_sem_valid(sem) (((sem) != NULL) && (*(sem) != NULL)) +#define sys_sem_set_invalid(sem) do { if ((sem) != NULL) { *(sem) = NULL; }} while (0) + +/* let sys.h use binary semaphores for mutexes */ +#define LWIP_COMPAT_MUTEX 1 +#define LWIP_COMPAT_MUTEX_ALLOWED 1 + +struct sys_mbox; +typedef struct sys_mbox *sys_mbox_t; +#define sys_mbox_valid(mbox) (((mbox) != NULL) && (*(mbox) != NULL)) +#define sys_mbox_set_invalid(mbox) do { if ((mbox) != NULL) { *(mbox) = NULL; }} while (0) + +struct sys_thread; +typedef struct sys_thread *sys_thread_t; + +static inline u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout) +{ + return 0; +}; + +static inline err_t sys_mbox_trypost(sys_mbox_t *mbox, void *msg) +{ + return 0; +}; + +#define sys_sem_signal(s) + +#endif /* LWIP_ARCH_SYS_ARCH_H */ diff --git a/lib/lwip/port/include/limits.h b/lib/lwip/port/include/limits.h new file mode 100644 index 0000000000..e69de29bb2 diff --git a/lib/lwip/port/sys-arch.c b/lib/lwip/port/sys-arch.c new file mode 100644 index 0000000000..609eeccf8c --- /dev/null +++ b/lib/lwip/port/sys-arch.c @@ -0,0 +1,20 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * (C) Copyright 2023 Linaro Ltd. + */ + +#include +#include +#include "lwip/opt.h" + +u32_t sys_now(void) +{ + return get_timer(0); +} + +u32_t lwip_port_rand(void) +{ + return (u32_t)rand(); +} + From patchwork Wed Aug 2 14:06:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709174 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp931639wrw; Wed, 2 Aug 2023 07:11:22 -0700 (PDT) X-Google-Smtp-Source: APBJJlHM3Hm7cVdRDP0ZGdxCLbqMp7BLhH573UbolieBvQ+SHBeqJ4Tq4Nsnt42yp+FjF9F1sFSp X-Received: by 2002:a5d:6783:0:b0:317:3dff:7189 with SMTP id v3-20020a5d6783000000b003173dff7189mr4966442wru.66.1690985481885; Wed, 02 Aug 2023 07:11:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985481; cv=none; d=google.com; s=arc-20160816; b=p+T23edz838t1AeMV8EQsAu+KCKM3bVZCvQQs4Pks4Us6+nsVsBXN1yAUBttTkc83f mwpKiK1+qMkMua5UUknWjVs2leP6LsxGlCS2l32YQ7rKMotLdTZLVNxiljwb6465Vecz wKGR2CFg2YbKRQqIVoCNvf7McfBdv9sXGhxvc1PE2VacTH8mMWC8W10YqQ3DQRxnAIke GJz1/ZD3NeIK5/+ZyfgH96wKChYwiP1NYZJgPw1fnZHIMIYKYzv+5WkC3avU1ieQfhW+ n+DZQ+SVzlqQJJIcPAmlcihGlHsLs8xWGDtQINdPrnOWzcWPXzp1As+eVcxVfohsMsp9 13mQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=86l48Cm5inj3hbFI+Qs2r/fBhIaFvKEF0wT0bkM74GM=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=c2WQtUcqkMGfhRXgdwz4IsfALD/MuEIWlV3pbgmSxErtfuuhtfTYPtN2kOyqKP4fO6 0DbSDwvvn6aUQ0nNvk77Lk1bASZb8VeBAiARyDW6IGpKuXbUQdvC98WK5o+KjfFu/V4O wQz3nPryq6L0Ke48tMMUCTAPFr8QH/qVlgRRVeL8b85ay28aUKNlL1DshPXqIbblaAZ5 RUt/8vF4F5LbgZEGUTJSVa8jRE2p3ZFdbgubZU6uScDIcIdIGXbB3ea2iq+dAqTUg0/Q gv08d80CqWyyqRw4BUu4rzOfYh0h3it+BfTFVbXdRYyXHO+4ZiXGoBi+ulKjq0g4wQxF DaIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=oEQHgqHt; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id z1-20020adfd0c1000000b0031790745ed8si5681633wrh.383.2023.08.02.07.11.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:11:21 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=oEQHgqHt; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id F053886CA0; Wed, 2 Aug 2023 16:09:58 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="oEQHgqHt"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 2973186C84; Wed, 2 Aug 2023 16:09:57 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lj1-x229.google.com (mail-lj1-x229.google.com [IPv6:2a00:1450:4864:20::229]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 0125786C84 for ; Wed, 2 Aug 2023 16:09:54 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lj1-x229.google.com with SMTP id 38308e7fff4ca-2b9aa1d3029so104554721fa.2 for ; Wed, 02 Aug 2023 07:09:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985394; x=1691590194; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=86l48Cm5inj3hbFI+Qs2r/fBhIaFvKEF0wT0bkM74GM=; b=oEQHgqHtlTp33oOM4O3n9mlnsmy9bxdMUm6rdecmHXMyfoZqkRKwAiL9i9rRBXVvsk tYk4oeXH2Y/16yjH5FIsLE9QHukMuee2cggt5MKv0qv2Q45KMH0U9l9YtHkKaaOo0ZXk SnCdkjDAszCAcL8JklxHyrPM6vNs/lyw2jG+AuZr29esw3ZGU//3qRllhPFJXSVeSLLk fGOhfFI1mL9pioUkbZOstbPxTl3ruwTh/bkP4JczZWjiijm1hK0/7gKqWobexG7YBtIG jM5bBcyRBys1arg9Oln+TleLpYqift9qon04O8b3RSSYJtVfsHRRYB131Rt31Lu18QFc H+aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985394; x=1691590194; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=86l48Cm5inj3hbFI+Qs2r/fBhIaFvKEF0wT0bkM74GM=; b=lHhIExQTKwqxmSA3WJm58D4V883vESLIlDw+Gb58TPXIKr++S+dZGY3OToTK3uGx3w ToDtUo+5EPKFsJWiY9xFTY+iho1bkYZ0xlGy39GPAP2jLrMsZXsDpp7YvdBSnDbWP3iH wB/FMxQiIFXuqfTmCTO6vmQvYHWlmqfZ0H4y4LjzzQWNqLaa8XjGx2mWvUIXQBxLUgFN SXY1EP77KD8mSdTYjcQDXOA8XVVy1jOFC3L12qzdXKZcRlPOh170R9YqsRZzhEVVrlRZ OmMajAhf8MEePne8pEdXx/+pDeznEebWHzG+57SJ8+qHAo1tNtJrbXK/uoRHoOl/DYmJ U74A== X-Gm-Message-State: ABy/qLb/35e4R/1UNNHQJaUn5n3QfKVflMbz3v4Az9nHTnDCKH6k4TpV qe6UhgV05qcFUiTRyVpNJJ2QCrRXX4x52yaj7sT2ZA== X-Received: by 2002:a05:6512:20cb:b0:4fb:c740:326 with SMTP id u11-20020a05651220cb00b004fbc7400326mr4094659lfr.55.1690985394128; Wed, 02 Aug 2023 07:09:54 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:52 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 10/13] net/lwip: update .gitignore with lwip Date: Wed, 2 Aug 2023 20:06:55 +0600 Message-Id: <20230802140658.10319-11-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Signed-off-by: Maxim Uvarov --- .gitignore | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.gitignore b/.gitignore index 3a4d056edf..9f2935f917 100644 --- a/.gitignore +++ b/.gitignore @@ -108,3 +108,12 @@ __pycache__ # moveconfig database /moveconfig.db + +lib/lwip/lwip-external +lib/lwip/apps/ping/ping.c +lib/lwip/apps/http/http_client.c +lib/lwip/apps/http/http_client.h +lib/lwip/apps/tftp/tftp.c +lib/lwip/apps/tftp/tftp_client.h +lib/lwip/apps/tftp/tftp_common.h +lib/lwip/apps/tftp/tftp_example.h From patchwork Wed Aug 2 14:06:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709175 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp931740wrw; Wed, 2 Aug 2023 07:11:34 -0700 (PDT) X-Google-Smtp-Source: APBJJlGzvtykUPq3B047xCCxG1AYuUSlDvG3YY95HgLSJ69we0+Os50HK4kaQs4iJuthaAcC8mes X-Received: by 2002:a05:600c:2948:b0:3fe:2b8c:9f07 with SMTP id n8-20020a05600c294800b003fe2b8c9f07mr3388216wmd.1.1690985493920; Wed, 02 Aug 2023 07:11:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985493; cv=none; d=google.com; s=arc-20160816; b=l0dQ3PKDrCO31vd6r3kFbnidKEiobb1vh0Ir1YtLsr6nBQA+EZ4Rud9mtgsfEgk+Y8 x2RKxsZM9w+Z/CaY0/2xzuDZ7DQhKviH097EbY17ypecZFDwVKdIJpZpYYa87mxUSj8r jTbULpZUSGdrFJa8EfDam10NkdJcv5vLtEoiOK3VhCdGy151B9IahU5mT1mavURVixCr YyrzgBZtEtJQc5ID/m2F2tlTKxTab/A0JRXc1BqbrAk3EKIe5J0STeKS1TI5PhhGxmIO EigNvaVoEuaGi0ztxGo6ZF5GZOqbfbHT0GmtS5s/71zLtkMr8DTzQIeHuVmXcT8bFCsm tX5A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=pnVrRAsb6K6UP/UIRr2lpDQmN3RWa0gwJRP4T4CEo1E=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=Z2Hqv83ZETtG0MGSol/N+Ce64Xcqnm0dHs8aCjEENwNuhfV8A9HilJ1TZuIH2CXsIc FcWgOQheOKytaHMtDyv7LOgmZh0tcNtl6J0eOosYA6rXCgThpcKTkhnKc32eL+vL7Oit eK4pKONtCwcmw4lrDc1zRJsHqKRjSkgzlNVclRoLF1+Iz6BEQ8XrmaaZ5azYkgqKUEq2 fGIzDzW0jmeQfGVekdPft+d14n/RPgqgeKwwMvjJqF3NV2QAABNuUVqB1dJ5sT5J3EzZ quMtAsrnDX87fXz+41ywMCWF0NmRzT5h+LNmWbIzFDHLkSjNnoupPeovB1Vhrvxbj1Hw vr4w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=U4wMggIT; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [2a01:238:438b:c500:173d:9f52:ddab:ee01]) by mx.google.com with ESMTPS id m17-20020a05600c3b1100b003fe22f19e4fsi988042wms.61.2023.08.02.07.11.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:11:33 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=U4wMggIT; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 6680A86CA4; Wed, 2 Aug 2023 16:10:04 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="U4wMggIT"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 81D5586CA9; Wed, 2 Aug 2023 16:10:02 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lf1-x135.google.com (mail-lf1-x135.google.com [IPv6:2a00:1450:4864:20::135]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 8CB7286C9D for ; Wed, 2 Aug 2023 16:09:58 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lf1-x135.google.com with SMTP id 2adb3069b0e04-4fe48a2801bso2430449e87.1 for ; Wed, 02 Aug 2023 07:09:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985397; x=1691590197; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pnVrRAsb6K6UP/UIRr2lpDQmN3RWa0gwJRP4T4CEo1E=; b=U4wMggITbU8i7W6TFv6l+WG2Jq/vgMCuTf8t6IEFlJBMLUb9X9Ixt4oFsUmOdOJSxj p6DMBzoaRQBP3jQXQxNhwCnc8gZUhmr2uW8U6aMSg114vSAq9EMyw+ci9JLjJzCt44t5 9jY37kc2i6OBJRBomBneaRy6RW8Z8wH9o3F/9weMDIi+kAkI0owoI8W3mF9Qcso9lfxI TkySltY+C85UR+jFLpcwAYYMW9q3fuCVWYgPon7dtYF8zGMIsvD7ziP2M1LVKqKEfkd6 PuQt5H/SinNs9tcwTorD2Mv25p7Yj86Ml/DQGs6ggMMrvIETi6AWZlu/K6BAxUCrq6dJ cL1Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985397; x=1691590197; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pnVrRAsb6K6UP/UIRr2lpDQmN3RWa0gwJRP4T4CEo1E=; b=cPpD9ZdfCDLeIXzIiw18WOkXdnA0UBgzcj47FDQdfVb2Ct4d93len4EjaQq0FHl2EA dmqLt3Ng7zU9NqJj6MSbZ3UnSJhy4Ki4+kilqzyVHxXiPrH7zyipc6+mj2lvhw0QJnLw MjoTcK5EHCVXtC3x65cYpbHzTYDo5v4aV+qICu0CPOnNce3SxibkvBBSJmGiOChJUo6A IGdlcZ5/lmu40QyydfhYLUJtdiXUom+heEpamgYSc5LvXrUE60d80tQM3Xcr7xgS5D+7 COYfUE8yXcHN+DeIdeFd/J9imheQqYo9SBIv5Tl811eV3z08Hw+qN8RxRpiYboHqgYPP 2xJQ== X-Gm-Message-State: ABy/qLbxc1EV69m4YjgNxrvUHYQp1GuYXSV/q0awJx+eJnhI47zonJLY VVV7faH4oWDuEcFAaR4YebhBYTxnJs/J9hUzeYzBpw== X-Received: by 2002:a05:6512:250b:b0:4f9:556b:93c5 with SMTP id be11-20020a056512250b00b004f9556b93c5mr5250560lfb.40.1690985397530; Wed, 02 Aug 2023 07:09:57 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:09:56 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 11/13] net/lwip: connection between cmd and lwip apps Date: Wed, 2 Aug 2023 20:06:56 +0600 Message-Id: <20230802140658.10319-12-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Signed-off-by: Maxim Uvarov Reviewed-by: Simon Glass --- lib/lwip/Makefile | 2 + lib/lwip/cmd-lwip.c | 308 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 310 insertions(+) create mode 100644 lib/lwip/cmd-lwip.c diff --git a/lib/lwip/Makefile b/lib/lwip/Makefile index 87ed99a230..25299377cd 100644 --- a/lib/lwip/Makefile +++ b/lib/lwip/Makefile @@ -65,6 +65,8 @@ obj-$(CONFIG_NET) += $(LWIPDIR)/netif/ethernet.o obj-$(CONFIG_NET) += port/if.o obj-$(CONFIG_NET) += port/sys-arch.o +obj-$(CONFIG_NET) += cmd-lwip.o + obj-$(CONFIG_CMD_DHCP) += apps/dhcp/lwip-dhcp.o obj-$(CONFIG_CMD_DNS) += apps/dns/lwip-dns.o obj-$(CONFIG_CMD_PING) += apps/ping/ diff --git a/lib/lwip/cmd-lwip.c b/lib/lwip/cmd-lwip.c new file mode 100644 index 0000000000..86b35ccff8 --- /dev/null +++ b/lib/lwip/cmd-lwip.c @@ -0,0 +1,308 @@ +// SPDX-License-Identifier: GPL-2.0 + +/* + * (C) Copyright 2023 Maxim Uvarov, maxim.uvarov@linaro.org + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "apps/dns/lwip-dns.h" +#include "apps/ping/lwip_ping.h" +#include "ulwip.h" + +extern int uboot_lwip_init(void); +extern int uboot_lwip_loop_is_done(void); + +static int do_lwip_info(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + printf("TBD: %s\n", __func__); + return CMD_RET_SUCCESS; +} + +static int do_lwip_init(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + if (!uboot_lwip_init()) + return CMD_RET_SUCCESS; + return CMD_RET_FAILURE; +} + +static int lwip_empty_tmo(void) { return 0; }; +int (*ulwip_tmo)(void) = lwip_empty_tmo; +void ulwip_set_tmo(int (*tmo)(void)) +{ + ulwip_tmo = tmo; +} + +static void ulwip_clear_tmo(void) +{ + ulwip_tmo = lwip_empty_tmo; +} + +static void ulwip_timeout_handler(void) +{ + eth_halt(); + ulwip_tmo(); + net_set_state(NETLOOP_FAIL); /* we did not get the reply */ + ulwip_loop_set(0); +} + +static int ulwip_loop(void) +{ + ulwip_loop_set(1); + if (net_loop(LWIP) < 0) { + ulwip_loop_set(0); + return CMD_RET_FAILURE; + } + ulwip_loop_set(0); + return CMD_RET_SUCCESS; +} + +#if defined(CONFIG_CMD_PING) +int do_lwip_ping(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + if (argc < 2) { + printf("argc = %d, error\n", argc); + return CMD_RET_USAGE; + } + + uboot_lwip_init(); + + eth_init(); /* activate u-boot eth dev */ + + printf("Using %s device\n", eth_get_name()); + printf("pinging addr: %s\n", argv[1]); + + net_set_timeout_handler(1000UL, ulwip_timeout_handler); + + if (lwip_ping_init(argv[1])) { + printf("ping init fail\n"); + return CMD_RET_FAILURE; + } + + ping_send_now(); + + return ulwip_loop(); +} +#endif /* CONFIG_CMD_PING */ + +#if defined(CONFIG_CMD_WGET) +extern int lwip_wget(ulong addr, char *url); + +int do_lwip_wget(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + char *url; + + if (argc < 2) { + printf("argc = %d, error\n", argc); + return CMD_RET_USAGE; + } + url = argv[1]; + + uboot_lwip_init(); + + eth_init(); /* activate u-boot eth dev */ + + lwip_wget(image_load_addr, url); + + return ulwip_loop(); +} +#endif + +#if defined(CONFIG_CMD_TFTPBOOT) +extern int lwip_tftp(ulong addr, char *filename); + +int do_lwip_tftp(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + char *filename; + ulong addr; + char *end; + int ret; + + switch (argc) { + case 1: + filename = env_get("bootfile"); + break; + case 2: + /* + * Only one arg - accept two forms: + * Just load address, or just boot file name. The latter + * form must be written in a format which can not be + * mis-interpreted as a valid number. + */ + addr = hextoul(argv[1], &end); + if (end == (argv[1] + strlen(argv[1]))) { + image_load_addr = addr; + filename = env_get("bootfile"); + } else { + filename = argv[1]; + } + break; + case 3: + image_load_addr = hextoul(argv[1], NULL); + filename = argv[2]; + break; + default: + return CMD_RET_USAGE; + } + + uboot_lwip_init(); + + eth_init(); /* activate u-boot eth dev */ + + ret = lwip_tftp(image_load_addr, filename); + if (ret) + return ret; + + return ulwip_loop(); +} +#endif /* CONFIG_CMD_TFTPBOOT */ + +#if defined(CONFIG_CMD_DHCP) +extern int ulwip_dhcp(void); + +int do_lwip_dhcp(void) +{ + int ret; + char *filename; + + uboot_lwip_init(); + + ret = ulwip_dhcp(); + + net_set_timeout_handler(2000UL, ulwip_timeout_handler); + + ulwip_loop(); + if (IS_ENABLED(CONFIG_CMD_TFTPBOOT)) { + ulwip_clear_tmo(); + + filename = env_get("bootfile"); + if (!filename) { + printf("no bootfile\n"); + return CMD_RET_FAILURE; + } + + eth_init(); /* activate u-boot eth dev */ + net_set_timeout_handler(20000UL, ulwip_timeout_handler); + lwip_tftp(image_load_addr, filename); + + ret = ulwip_loop(); + } + + return ret; +} + +static int _do_lwip_dhcp(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + return do_lwip_dhcp(); +} +#endif /* CONFIG_CMD_DHCP */ + +#if defined(CONFIG_CMD_DNS) +int do_lwip_dns(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + int ret; + char *name; + char *varname; + int LWIP_ERR_INPROGRESS = -5; + + if (argc == 1) + return CMD_RET_USAGE; + + name = argv[1]; + + if (argc == 3) + varname = argv[2]; + else + varname = NULL; + + uboot_lwip_init(); + + ret = ulwip_dns(name, varname); + if (ret == 0) + return CMD_RET_SUCCESS; + if (ret != LWIP_ERR_INPROGRESS) + return CMD_RET_FAILURE; + + net_set_timeout_handler(1000UL, ulwip_timeout_handler); + + return ulwip_loop(); +} +#endif /* CONFIG_CMD_DNS */ + +static struct cmd_tbl cmds[] = { + U_BOOT_CMD_MKENT(info, 1, 0, do_lwip_info, "Info and stats", ""), + U_BOOT_CMD_MKENT(init, 1, 0, do_lwip_init, + "initialize lwip stack", ""), +#if defined(CONFIG_CMD_LWIP_PING) + U_BOOT_CMD_MKENT(ping, 2, 0, do_lwip_ping, + "send ICMP ECHO_REQUEST to network host", + "pingAddress"), +#endif +#if defined(CONFIG_CMD_WGET) + U_BOOT_CMD_MKENT(wget, 2, 0, do_lwip_wget, "", ""), +#endif +#if defined(CONFIG_CMD_TFTPBOOT) + U_BOOT_CMD_MKENT(tftp, 3, 0, do_lwip_tftp, + "boot image via network using TFTP protocol\n", + "[loadAddress] [[hostIPaddr:]bootfilename]"), +#endif +#if defined(CONFIG_CMD_DHCP) + U_BOOT_CMD_MKENT(dhcp, 1, 0, _do_lwip_dhcp, + "boot image via network using DHCP/TFTP protocol", + ""), +#endif +#if defined(CONFIG_CMD_DNS) + U_BOOT_CMD_MKENT(dns, 3, 0, do_lwip_dns, + "lookup dns name [and store address at variable]", + ""), +#endif +}; + +static int do_ops(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + struct cmd_tbl *cp; + + cp = find_cmd_tbl(argv[1], cmds, ARRAY_SIZE(cmds)); + + argc--; + argv++; + + if (cp == NULL || argc > cp->maxargs) + return CMD_RET_USAGE; + if (flag == CMD_FLAG_REPEAT && !cmd_is_repeatable(cp)) + return CMD_RET_SUCCESS; + + return cp->cmd(cmdtp, flag, argc, argv); +} + +U_BOOT_CMD( + lwip, 4, 1, do_ops, + "LWIP sub system", + "info - display info\n" + "init - init LWIP\n" + "ping addr - pingAddress\n" + "wget http://IPadress/url/\n" + "tftp [loadAddress] [[hostIPaddr:]bootfilename]\n" + "dhcp - boot image via network using DHCP/TFTP protocol\n" + ); + +/* Old command kept for compatibility. Same as 'mmc info' */ +U_BOOT_CMD( + lwipinfo, 1, 0, do_lwip_info, + "display LWIP info", + "- display LWIP stack info" +); From patchwork Wed Aug 2 14:06:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709176 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp931854wrw; Wed, 2 Aug 2023 07:11:46 -0700 (PDT) X-Google-Smtp-Source: APBJJlE0se+cFry16aD+YNUg4ayfHec/IJ165I3gnb1oYkpktFl+yP9hnapvg+Dx6OUwNsAe1RUs X-Received: by 2002:a7b:cbd8:0:b0:3fe:228a:e782 with SMTP id n24-20020a7bcbd8000000b003fe228ae782mr4922567wmi.37.1690985505838; Wed, 02 Aug 2023 07:11:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985505; cv=none; d=google.com; s=arc-20160816; b=cIoTgjrbxHRj40nWVSj0p5SSTMaWLj07t772595DKW/LJOXndbupAoKjEieCy2gtnO 8IfMm0r+INo/3RHOOd3FRnodJJTIfz57YBHtBLI98EIKjcTc0JuEZngzUXej/bdqb4UO 4yddcYZt4jKd+cCcH0Ur7BYc3we2jNHOdR+0INcbftMv+Yk11peWmaWZIhbHzk5LKnbb AjvVMKbH+JnSJs/raSRv4sERL9pxv0Diba+Kepnva1ZBGN/bYvhJzaIFIH/ykwudEaUV HaVh9Aj6r7uu9UZ3gLT1MUIKo8Fp+xgoMSJ0075upK9uloL3JNDZcx5bu+VhPNDIg3fD N0Jg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=HPoIBbv1Hue7iQOMoDsGPKtGzwsDGPb1bojhwVGJNCM=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=ZOfPawR+6US+w/NrKgEraoU8xSTDagZWQDjv/pcBTcBj4wdDmDZS/kVgqQOcxzkFSd X9RcwLDq6VWeVfG8GK8P60QvNE7jM/HN7xgaIhxQJStUSdlflc6Lhi7wnd7EUJsdwmdb sq5y+Qvohmrl5Dj1gtaYq90Vf9Ded7FnLVvferrCdzRzS0nyBr5KJqNLcm6y1mIjR2nK XVdHMoF1YATTThIKRc94TZCgf/5aec6B4v2M4uFQoG1hykiTs0LtK2zCQ1dWVpGqKRbG 2UtSjuHe0zHDyhY6pS31fDwCe5Xz0kqL57O1+HHZJuRBh84btpcJCg41VaIWjHOAYEgr YfYQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=RfJp+sI1; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [2a01:238:438b:c500:173d:9f52:ddab:ee01]) by mx.google.com with ESMTPS id s3-20020a5d4243000000b0031449181a94si255782wrr.570.2023.08.02.07.11.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:11:45 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=RfJp+sI1; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 2a01:238:438b:c500:173d:9f52:ddab:ee01 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 563EF86C84; Wed, 2 Aug 2023 16:10:09 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="RfJp+sI1"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 53D2486C84; Wed, 2 Aug 2023 16:10:08 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lj1-x230.google.com (mail-lj1-x230.google.com [IPv6:2a00:1450:4864:20::230]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 4410A86C9E for ; Wed, 2 Aug 2023 16:10:02 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lj1-x230.google.com with SMTP id 38308e7fff4ca-2b9d07a8d84so87699741fa.3 for ; Wed, 02 Aug 2023 07:10:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985401; x=1691590201; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=HPoIBbv1Hue7iQOMoDsGPKtGzwsDGPb1bojhwVGJNCM=; b=RfJp+sI1dZb05ZhOMtBfAE+2gPaZQ8kwAYgj6ba5WCeI8Rb28NO3EEJFmlECmsrInE Egp7OLsbp6IsrM2sdxB4pp8rgqVMyyWd7pUUd+aE7oZmoDboSZCs3BFPHlKzWDkK1WF6 u9V736OfnNKHdYCmYCeDQd1pibMPF5UGio8/WVPVdzlePC4vzZsCRXfNVRxOOahwb4Kb QS1vNAg96uTofmOiJn3lLXoqpvnttBZE38yUZJZf1dQIRDgTB2k0UK2xGQiVcSdoS/uz MKp9a9m+vQlqU4LmtYjoA9/cTrjjU/8CCoR9xeYP8xXOP1LIgXFsGv6zlZpiXZ4d4hgC 433Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985401; x=1691590201; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=HPoIBbv1Hue7iQOMoDsGPKtGzwsDGPb1bojhwVGJNCM=; b=AqPeUnZGOCAvSkOkDo43K6oePG0sby0h36cR8tXRCtDXnGtoAIq5+GQpWEuvlzu0Pj KiemS3puOeLPEKnFVCWrCUJRaCnDVurp7XtL5CkwAHey1lInNyIeQ+UWYiCu1MwPQmRG cGhLEirxJWn9hM6vB/Yb0xe1XC4fj46fP6IVXR8Gn4vOgPURJDAxv3E51WowvXFGEeEx gPUzVjcXy9HUkqIodQpslKDIDLzxSTc3jb2wjZ9J8FSEIXlTxuj6Ead4IdRmQKbExdAg hBFyUUS/SrO/hRxW4xOqxJkz/iIUnlp29niigHs6lRBefARZb6YVpPrh6k5TrxXBxYCL HZ1Q== X-Gm-Message-State: ABy/qLY6/Po92nzU0cKTeL/Q5OwEcqyq/sWCP3hWAiY7RrGFycCJ02g1 KDNQ2RQDEe7OzalzvQVUqBLKdgsTQecut/FcE+WlcQ== X-Received: by 2002:a05:6512:451:b0:4fb:89b3:3374 with SMTP id y17-20020a056512045100b004fb89b33374mr4181726lfk.54.1690985401124; Wed, 02 Aug 2023 07:10:01 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.09.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:10:00 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 12/13] net/lwip: replace original net commands with lwip Date: Wed, 2 Aug 2023 20:06:57 +0600 Message-Id: <20230802140658.10319-13-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Replace original commands: ping, tftp, dhcp and wget. Signed-off-by: Maxim Uvarov --- boot/bootmeth_efi.c | 2 +- boot/bootmeth_pxe.c | 2 +- cmd/net.c | 86 +++++---------------------------------------- cmd/pxe.c | 2 +- include/net.h | 8 +++-- include/net/lwip.h | 5 +++ lib/Makefile | 2 -- lib/lwip/ulwip.h | 9 +++++ 8 files changed, 31 insertions(+), 85 deletions(-) create mode 100644 include/net/lwip.h create mode 100644 lib/lwip/ulwip.h diff --git a/boot/bootmeth_efi.c b/boot/bootmeth_efi.c index af31fbfc85..83334991bb 100644 --- a/boot/bootmeth_efi.c +++ b/boot/bootmeth_efi.c @@ -340,7 +340,7 @@ static int distro_efi_read_bootflow_net(struct bootflow *bflow) if (!bflow->fdt_fname) return log_msg_ret("fil", -ENOMEM); - if (!do_tftpb(&cmdtp, 0, 3, tftp_argv)) { + if (!do_lwip_tftp(&cmdtp, 0, 3, tftp_argv)) { bflow->fdt_size = env_get_hex("filesize", 0); bflow->fdt_addr = fdt_addr; } else { diff --git a/boot/bootmeth_pxe.c b/boot/bootmeth_pxe.c index ce986bd260..881d2167a6 100644 --- a/boot/bootmeth_pxe.c +++ b/boot/bootmeth_pxe.c @@ -123,7 +123,7 @@ static int extlinux_pxe_read_file(struct udevice *dev, struct bootflow *bflow, tftp_argv[1] = file_addr; tftp_argv[2] = (void *)file_path; - if (do_tftpb(ctx->cmdtp, 0, 3, tftp_argv)) + if (do_lwip_tftp(ctx->cmdtp, 0, 3, tftp_argv)) return -ENOENT; ret = pxe_get_file_size(&size); if (ret) diff --git a/cmd/net.c b/cmd/net.c index d407d8320a..dc5a114309 100644 --- a/cmd/net.c +++ b/cmd/net.c @@ -22,6 +22,7 @@ #include #include #include +#include static int netboot_common(enum proto_t, struct cmd_tbl *, int, char * const []); @@ -40,19 +41,9 @@ U_BOOT_CMD( #endif #ifdef CONFIG_CMD_TFTPBOOT -int do_tftpb(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) -{ - int ret; - - bootstage_mark_name(BOOTSTAGE_KERNELREAD_START, "tftp_start"); - ret = netboot_common(TFTPGET, cmdtp, argc, argv); - bootstage_mark_name(BOOTSTAGE_KERNELREAD_STOP, "tftp_done"); - return ret; -} - #if IS_ENABLED(CONFIG_IPV6) U_BOOT_CMD( - tftpboot, 4, 1, do_tftpb, + tftpboot, 4, 1, do_lwip_tftp, "boot image via network using TFTP protocol\n" "To use IPv6 add -ipv6 parameter or use IPv6 hostIPaddr framed " "with [] brackets", @@ -60,7 +51,7 @@ U_BOOT_CMD( ); #else U_BOOT_CMD( - tftpboot, 3, 1, do_tftpb, + tftpboot, 3, 1, do_lwip_tftp, "load file via network using TFTP protocol", "[loadAddress] [[hostIPaddr:]bootfilename]" ); @@ -139,7 +130,7 @@ U_BOOT_CMD(dhcp6, 3, 1, do_dhcp6, static int do_dhcp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) { - return netboot_common(DHCP, cmdtp, argc, argv); + return do_lwip_dhcp(); } U_BOOT_CMD( @@ -196,13 +187,11 @@ U_BOOT_CMD( #endif #if defined(CONFIG_CMD_WGET) -static int do_wget(struct cmd_tbl *cmdtp, int flag, int argc, char * const argv[]) -{ - return netboot_common(WGET, cmdtp, argc, argv); -} +int do_lwip_wget(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); U_BOOT_CMD( - wget, 3, 1, do_wget, + wget, 3, 1, do_lwip_wget, "boot image via network using HTTP protocol", "[loadAddress] [[hostIPaddr:]path and image name]" ); @@ -456,28 +445,8 @@ static int netboot_common(enum proto_t proto, struct cmd_tbl *cmdtp, int argc, } #if defined(CONFIG_CMD_PING) -static int do_ping(struct cmd_tbl *cmdtp, int flag, int argc, - char *const argv[]) -{ - if (argc < 2) - return CMD_RET_USAGE; - - net_ping_ip = string_to_ip(argv[1]); - if (net_ping_ip.s_addr == 0) - return CMD_RET_USAGE; - - if (net_loop(PING) < 0) { - printf("ping failed; host %s is not alive\n", argv[1]); - return CMD_RET_FAILURE; - } - - printf("host %s is alive\n", argv[1]); - - return CMD_RET_SUCCESS; -} - U_BOOT_CMD( - ping, 2, 1, do_ping, + ping, 2, 1, do_lwip_ping, "send ICMP ECHO_REQUEST to network host", "pingAddress" ); @@ -601,45 +570,8 @@ U_BOOT_CMD( #endif #if defined(CONFIG_CMD_DNS) -int do_dns(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]) -{ - if (argc == 1) - return CMD_RET_USAGE; - - /* - * We should check for a valid hostname: - * - Each label must be between 1 and 63 characters long - * - the entire hostname has a maximum of 255 characters - * - only the ASCII letters 'a' through 'z' (case-insensitive), - * the digits '0' through '9', and the hyphen - * - cannot begin or end with a hyphen - * - no other symbols, punctuation characters, or blank spaces are - * permitted - * but hey - this is a minimalist implmentation, so only check length - * and let the name server deal with things. - */ - if (strlen(argv[1]) >= 255) { - printf("dns error: hostname too long\n"); - return CMD_RET_FAILURE; - } - - net_dns_resolve = argv[1]; - - if (argc == 3) - net_dns_env_var = argv[2]; - else - net_dns_env_var = NULL; - - if (net_loop(DNS) < 0) { - printf("dns lookup of %s failed, check setup\n", argv[1]); - return CMD_RET_FAILURE; - } - - return CMD_RET_SUCCESS; -} - U_BOOT_CMD( - dns, 3, 1, do_dns, + dns, 3, 1, do_lwip_dns, "lookup the IP of a hostname", "hostname [envvar]" ); diff --git a/cmd/pxe.c b/cmd/pxe.c index 677142520b..a31fbd7e40 100644 --- a/cmd/pxe.c +++ b/cmd/pxe.c @@ -42,7 +42,7 @@ static int do_get_tftp(struct pxe_context *ctx, const char *file_path, num_args = 3; } - if (do_tftpb(ctx->cmdtp, 0, num_args, tftp_argv)) + if (do_lwip_tftp(ctx->cmdtp, 0, num_args, tftp_argv)) return -ENOENT; ret = pxe_get_file_size(sizep); diff --git a/include/net.h b/include/net.h index e254df7d7f..de7baeb121 100644 --- a/include/net.h +++ b/include/net.h @@ -54,8 +54,10 @@ struct in_addr { __be32 s_addr; }; +int do_lwip_dhcp(void); + /** - * do_tftpb - Run the tftpboot command + * do_lwip_tftp - Run the tftpboot command * * @cmdtp: Command information for tftpboot * @flag: Command flags (CMD_FLAG_...) @@ -63,7 +65,7 @@ struct in_addr { * @argv: List of arguments * Return: result (see enum command_ret_t) */ -int do_tftpb(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]); +int do_lwip_tftp(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[]); /** * dhcp_run() - Run DHCP on the current ethernet device @@ -514,7 +516,7 @@ extern int net_restart_wrap; /* Tried all network devices */ enum proto_t { BOOTP, RARP, ARP, TFTPGET, DHCP, DHCP6, PING, PING6, DNS, NFS, CDP, NETCONS, SNTP, TFTPSRV, TFTPPUT, LINKLOCAL, FASTBOOT_UDP, FASTBOOT_TCP, - WOL, UDP, NCSI, WGET, RS + WOL, UDP, NCSI, WGET, RS, LWIP }; extern char net_boot_file_name[1024];/* Boot File name */ diff --git a/include/net/lwip.h b/include/net/lwip.h new file mode 100644 index 0000000000..6686a52bfc --- /dev/null +++ b/include/net/lwip.h @@ -0,0 +1,5 @@ + +int do_lwip_ping(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); +int do_lwip_dns(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]); diff --git a/lib/Makefile b/lib/Makefile index 598b5755dd..414f171e74 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -93,8 +93,6 @@ obj-$(CONFIG_LIBAVB) += libavb/ obj-$(CONFIG_$(SPL_TPL_)OF_LIBFDT) += libfdt/ obj-$(CONFIG_$(SPL_TPL_)OF_REAL) += fdtdec_common.o fdtdec.o -obj-y += lwip/ - ifdef CONFIG_SPL_BUILD obj-$(CONFIG_SPL_YMODEM_SUPPORT) += crc16-ccitt.o obj-$(CONFIG_$(SPL_TPL_)HASH) += crc16-ccitt.o diff --git a/lib/lwip/ulwip.h b/lib/lwip/ulwip.h new file mode 100644 index 0000000000..11ca52aa1f --- /dev/null +++ b/lib/lwip/ulwip.h @@ -0,0 +1,9 @@ +/* SPDX-License-Identifier: GPL-2.0 */ + +int ulwip_enabled(void); +int ulwip_in_loop(void); +int ulwip_loop_set(int loop); +int ulwip_exit(int err); +int uboot_lwip_poll(void); +int ulwip_app_get_err(void); +void ulwip_set_tmo(int (*tmo)(void)); From patchwork Wed Aug 2 14:06:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxim Uvarov X-Patchwork-Id: 709177 Delivered-To: patch@linaro.org Received: by 2002:a5d:55c5:0:b0:317:2194:b2bc with SMTP id i5csp931981wrw; Wed, 2 Aug 2023 07:11:57 -0700 (PDT) X-Google-Smtp-Source: APBJJlEFAJrdSQW7ijp0SUKfff7YMX2xSISjPK/c5xEv0Cw/9NR6kfb8BrNhuYvhgZCCGlIIgG4I X-Received: by 2002:a5d:4b85:0:b0:317:69d2:35c2 with SMTP id b5-20020a5d4b85000000b0031769d235c2mr4556324wrt.2.1690985516880; Wed, 02 Aug 2023 07:11:56 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1690985516; cv=none; d=google.com; s=arc-20160816; b=ExLRSs9HLxg4FZdQ0sQ/ERr1hBMe3GicogVFyE4kliWTU0qdaZKOVWBgZWbUQHJwGL 8zNW/CzQmoMoPOrCr53eQaQZ8GMmw3uGLP/BFyeCDQ7I2NTLBCwcew3lkDvrcV3vI/Nn AkPKjFHqoz6X4Mc6L8oiwxtpiOLYmjXVxPejxfr3UzqsyLy5Ksw+COXll1I6OWHkuDG7 U7L/FMSEt193JP8IsroU0Gt/oqxWbRjRVUxxKECtk9zeVFVnafm0ajs8YCJ8uBPhoOg+ 0bdPOTTnCY/SI9wAXRJmlAJXxHbm9LGOY6yhp95CEq24vNfPeAtAhW+imN4UgnYL1CaH ViJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:list-subscribe:list-help:list-post:list-archive :list-unsubscribe:list-id:precedence:content-transfer-encoding :mime-version:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=JJtsxjfH19vANbHLTdIGLZvwNvTFPm6Nw/AWj6HhMv0=; fh=KONqw1VFBW9nCv9imase+52c+XJ0MeVkzLj6SOLcJqQ=; b=U4dhhKyXdiY2u/LfsfwHefWmXYNpduymV9nq0HcToCUHUF27UcaPmitfPKNnLqOdQV pLGP77fcr/nhKjK/kM6Q4LXZdG8ullYCERPj3MPMu8ZfBHYY7Ur7wB/ewJLq12LTXfE7 48O/Dwf/rbs41R/B3PcItXymwYbCSYRj++E+0xQvN49iR3ErJj2zGolj/Sq9AKv1i0fZ TbPwymZCK6XvSHhjSmqJkj+O/xuMVdH8loE2jzWcYhaz/P8WOBpjJ3UI8nv9PPSzJXZ3 nywVwyxHF0UYvH4KTelIZg3WT39ElHxoOdlnBI44T3rPefOdnqUcehmcZzl2aj2+Xpfi tinw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HKnsLaDN; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from phobos.denx.de (phobos.denx.de. [85.214.62.61]) by mx.google.com with ESMTPS id x14-20020a5d490e000000b003111711d88dsi7355857wrq.262.2023.08.02.07.11.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:11:56 -0700 (PDT) Received-SPF: pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) client-ip=85.214.62.61; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=HKnsLaDN; spf=pass (google.com: domain of u-boot-bounces@lists.denx.de designates 85.214.62.61 as permitted sender) smtp.mailfrom=u-boot-bounces@lists.denx.de; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 1356D86BE8; Wed, 2 Aug 2023 16:11:15 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="HKnsLaDN"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 475EB868C9; Wed, 2 Aug 2023 16:11:13 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-lj1-x22b.google.com (mail-lj1-x22b.google.com [IPv6:2a00:1450:4864:20::22b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id E3B3486CA6 for ; Wed, 2 Aug 2023 16:10:06 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=maxim.uvarov@linaro.org Received: by mail-lj1-x22b.google.com with SMTP id 38308e7fff4ca-2b9338e4695so106637231fa.2 for ; Wed, 02 Aug 2023 07:10:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1690985406; x=1691590206; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=JJtsxjfH19vANbHLTdIGLZvwNvTFPm6Nw/AWj6HhMv0=; b=HKnsLaDN9fdsOFSBHfHVd/k7WyUr2QY5HOlAvbj7SiMy2Go08NZwPyR1CtWrY3Vx5N aBDFbZdKxpVv0NksIPqMk7v06U2/xgwwQ4QkXiPfPhBjO9KkF80ZV2ByjESuSVExMnSZ chJ824tPd7K6z0DgQwNH4ci5ynwqvWtM3KNy7CYARizvbrhQhgRbVB4RHj0nvnjVPDr3 fp0K0TKUs46ECdZGCbSj5KlDGUnekCxMtQvnNOS+8dZ2VhhLbwJwVHGoRecVlaDchyTB UGqeQYnrJ2mkk7vC/X6dfPnvnzxU8VJLxOO0XLbJb9Dfair24LZeOvHkkdI2vSkVJ3vw oPSg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1690985406; x=1691590206; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=JJtsxjfH19vANbHLTdIGLZvwNvTFPm6Nw/AWj6HhMv0=; b=bMrvIEF7lPwWgFvf5Vxs0maFZg4YP50Jb18W7s+mAZRc+NyP/rsHiip1tDSQHR85IK 79H0QzrpSeXCtibNEgbYWuWBFS08fRslF5CzmHcdMyD7Ox4Ats6L8JEmzrqAlvze9iRT z79UiGwaLUsdZZKdp1J9Y4lW4ZR9Xrj1Y19Xafgw9Rid9zJTbaCJ2fH9RNPQdu3isHwP RKtTT/OFh8Nat+EksWWblhCyJNqNoed7kI/FNhO7wlFf63TkFoV2OP+7YAKlZk6d+BTm Ll7T1PQyRt103zAh1FWqEjEiDkvcaaA0qaxb0qYLC8g0jN6NGJqO3RISsXyibeK2bpWq 5TOw== X-Gm-Message-State: ABy/qLbarEZRJbdmP4y4uRtsG2IDkgieNxDpb/F8Zo/i5bA4EJOsuEkn yaPUSUOGvrlFJOH8IYc63nPNzqiVAsjfLwxdX6dSWA== X-Received: by 2002:a05:6512:3613:b0:4fe:a2e:890c with SMTP id f19-20020a056512361300b004fe0a2e890cmr3964848lfs.49.1690985405833; Wed, 02 Aug 2023 07:10:05 -0700 (PDT) Received: from localhost.localdomain ([45.82.14.220]) by smtp.gmail.com with ESMTPSA id a12-20020a056512020c00b004fbbef8d4dbsm2982026lfo.121.2023.08.02.07.10.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 02 Aug 2023 07:10:04 -0700 (PDT) From: Maxim Uvarov To: u-boot@lists.denx.de Cc: pbrobinson@redhat.com, ilias.apalodimas@linaro.org, joe.hershberger@ni.com, rfried.dev@gmail.com, trini@konsulko.com, goldsimon@gmx.de, lwip-devel@nongnu.org, Maxim Uvarov Subject: [PATCHv5 13/13] net/lwip: drop old net/wget Date: Wed, 2 Aug 2023 20:06:58 +0600 Message-Id: <20230802140658.10319-14-maxim.uvarov@linaro.org> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230802140658.10319-1-maxim.uvarov@linaro.org> References: <20230802140658.10319-1-maxim.uvarov@linaro.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean After which to lwip variants of working apps we need to drop old code with all dependencies. This commit drop old wget command files. Signed-off-by: Maxim Uvarov --- include/net/wget.h | 22 --- net/Makefile | 1 - net/net.c | 6 - net/wget.c | 440 --------------------------------------------- 4 files changed, 469 deletions(-) delete mode 100644 include/net/wget.h delete mode 100644 net/wget.c diff --git a/include/net/wget.h b/include/net/wget.h deleted file mode 100644 index da0920de11..0000000000 --- a/include/net/wget.h +++ /dev/null @@ -1,22 +0,0 @@ -/* SPDX-License-Identifier: GPL-2.0 */ -/* - * Duncan Hare Copyright 2017 - */ - -/** - * wget_start() - begin wget - */ -void wget_start(void); - -enum wget_state { - WGET_CLOSED, - WGET_CONNECTING, - WGET_CONNECTED, - WGET_TRANSFERRING, - WGET_TRANSFERRED -}; - -#define DEBUG_WGET 0 /* Set to 1 for debug messages */ -#define SERVER_PORT 80 -#define WGET_RETRY_COUNT 30 -#define WGET_TIMEOUT 2000UL diff --git a/net/Makefile b/net/Makefile index 3e2d061338..82cbfb5cc0 100644 --- a/net/Makefile +++ b/net/Makefile @@ -32,7 +32,6 @@ obj-$(CONFIG_TCP_FUNCTION_FASTBOOT) += fastboot_tcp.o obj-$(CONFIG_CMD_WOL) += wol.o obj-$(CONFIG_PROT_UDP) += udp.o obj-$(CONFIG_PROT_TCP) += tcp.o -obj-$(CONFIG_CMD_WGET) += wget.o # Disable this warning as it is triggered by: # sprintf(buf, index ? "foo%d" : "foo", index) diff --git a/net/net.c b/net/net.c index d98e51cb80..ee4a9f845a 100644 --- a/net/net.c +++ b/net/net.c @@ -109,7 +109,6 @@ #include #include #include -#include #include "arp.h" #include "bootp.h" #include "cdp.h" @@ -566,11 +565,6 @@ restart: nfs_start(); break; #endif -#if defined(CONFIG_CMD_WGET) - case WGET: - wget_start(); - break; -#endif #if defined(CONFIG_CMD_CDP) case CDP: cdp_start(); diff --git a/net/wget.c b/net/wget.c deleted file mode 100644 index 2dbfeb1a1d..0000000000 --- a/net/wget.c +++ /dev/null @@ -1,440 +0,0 @@ -// SPDX-License-Identifier: GPL-2.0 -/* - * WGET/HTTP support driver based on U-BOOT's nfs.c - * Copyright Duncan Hare 2017 - */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -static const char bootfile1[] = "GET "; -static const char bootfile3[] = " HTTP/1.0\r\n\r\n"; -static const char http_eom[] = "\r\n\r\n"; -static const char http_ok[] = "200"; -static const char content_len[] = "Content-Length"; -static const char linefeed[] = "\r\n"; -static struct in_addr web_server_ip; -static int our_port; -static int wget_timeout_count; - -struct pkt_qd { - uchar *pkt; - unsigned int tcp_seq_num; - unsigned int len; -}; - -/* - * This is a control structure for out of order packets received. - * The actual packet bufers are in the kernel space, and are - * expected to be overwritten by the downloaded image. - */ -static struct pkt_qd pkt_q[PKTBUFSRX / 4]; -static int pkt_q_idx; -static unsigned long content_length; -static unsigned int packets; - -static unsigned int initial_data_seq_num; - -static enum wget_state current_wget_state; - -static char *image_url; -static unsigned int wget_timeout = WGET_TIMEOUT; - -static enum net_loop_state wget_loop_state; - -/* Timeout retry parameters */ -static u8 retry_action; /* actions for TCP retry */ -static unsigned int retry_tcp_ack_num; /* TCP retry acknowledge number*/ -static unsigned int retry_tcp_seq_num; /* TCP retry sequence number */ -static int retry_len; /* TCP retry length */ - -/** - * store_block() - store block in memory - * @src: source of data - * @offset: offset - * @len: length - */ -static inline int store_block(uchar *src, unsigned int offset, unsigned int len) -{ - ulong newsize = offset + len; - uchar *ptr; - - ptr = map_sysmem(image_load_addr + offset, len); - memcpy(ptr, src, len); - unmap_sysmem(ptr); - - if (net_boot_file_size < (offset + len)) - net_boot_file_size = newsize; - - return 0; -} - -/** - * wget_send_stored() - wget response dispatcher - * - * WARNING, This, and only this, is the place in wget.c where - * SEQUENCE NUMBERS are swapped between incoming (RX) - * and outgoing (TX). - * Procedure wget_handler() is correct for RX traffic. - */ -static void wget_send_stored(void) -{ - u8 action = retry_action; - int len = retry_len; - unsigned int tcp_ack_num = retry_tcp_seq_num + (len == 0 ? 1 : len); - unsigned int tcp_seq_num = retry_tcp_ack_num; - uchar *ptr, *offset; - - switch (current_wget_state) { - case WGET_CLOSED: - debug_cond(DEBUG_WGET, "wget: send SYN\n"); - current_wget_state = WGET_CONNECTING; - net_send_tcp_packet(0, SERVER_PORT, our_port, action, - tcp_seq_num, tcp_ack_num); - packets = 0; - break; - case WGET_CONNECTING: - pkt_q_idx = 0; - net_send_tcp_packet(0, SERVER_PORT, our_port, action, - tcp_seq_num, tcp_ack_num); - - ptr = net_tx_packet + net_eth_hdr_size() + - IP_TCP_HDR_SIZE + TCP_TSOPT_SIZE + 2; - offset = ptr; - - memcpy(offset, &bootfile1, strlen(bootfile1)); - offset += strlen(bootfile1); - - memcpy(offset, image_url, strlen(image_url)); - offset += strlen(image_url); - - memcpy(offset, &bootfile3, strlen(bootfile3)); - offset += strlen(bootfile3); - net_send_tcp_packet((offset - ptr), SERVER_PORT, our_port, - TCP_PUSH, tcp_seq_num, tcp_ack_num); - current_wget_state = WGET_CONNECTED; - break; - case WGET_CONNECTED: - case WGET_TRANSFERRING: - case WGET_TRANSFERRED: - net_send_tcp_packet(0, SERVER_PORT, our_port, action, - tcp_seq_num, tcp_ack_num); - break; - } -} - -static void wget_send(u8 action, unsigned int tcp_seq_num, - unsigned int tcp_ack_num, int len) -{ - retry_action = action; - retry_tcp_ack_num = tcp_ack_num; - retry_tcp_seq_num = tcp_seq_num; - retry_len = len; - - wget_send_stored(); -} - -void wget_fail(char *error_message, unsigned int tcp_seq_num, - unsigned int tcp_ack_num, u8 action) -{ - printf("wget: Transfer Fail - %s\n", error_message); - net_set_timeout_handler(0, NULL); - wget_send(action, tcp_seq_num, tcp_ack_num, 0); -} - -void wget_success(u8 action, unsigned int tcp_seq_num, - unsigned int tcp_ack_num, int len, int packets) -{ - printf("Packets received %d, Transfer Successful\n", packets); - wget_send(action, tcp_seq_num, tcp_ack_num, len); -} - -/* - * Interfaces of U-BOOT - */ -static void wget_timeout_handler(void) -{ - if (++wget_timeout_count > WGET_RETRY_COUNT) { - puts("\nRetry count exceeded; starting again\n"); - wget_send(TCP_RST, 0, 0, 0); - net_start_again(); - } else { - puts("T "); - net_set_timeout_handler(wget_timeout + - WGET_TIMEOUT * wget_timeout_count, - wget_timeout_handler); - wget_send_stored(); - } -} - -#define PKT_QUEUE_OFFSET 0x20000 -#define PKT_QUEUE_PACKET_SIZE 0x800 - -static void wget_connected(uchar *pkt, unsigned int tcp_seq_num, - u8 action, unsigned int tcp_ack_num, unsigned int len) -{ - uchar *pkt_in_q; - char *pos; - int hlen, i; - uchar *ptr1; - - pkt[len] = '\0'; - pos = strstr((char *)pkt, http_eom); - - if (!pos) { - debug_cond(DEBUG_WGET, - "wget: Connected, data before Header %p\n", pkt); - pkt_in_q = (void *)image_load_addr + PKT_QUEUE_OFFSET + - (pkt_q_idx * PKT_QUEUE_PACKET_SIZE); - - ptr1 = map_sysmem((phys_addr_t)pkt_in_q, len); - memcpy(ptr1, pkt, len); - unmap_sysmem(ptr1); - - pkt_q[pkt_q_idx].pkt = pkt_in_q; - pkt_q[pkt_q_idx].tcp_seq_num = tcp_seq_num; - pkt_q[pkt_q_idx].len = len; - pkt_q_idx++; - } else { - debug_cond(DEBUG_WGET, "wget: Connected HTTP Header %p\n", pkt); - /* sizeof(http_eom) - 1 is the string length of (http_eom) */ - hlen = pos - (char *)pkt + sizeof(http_eom) - 1; - pos = strstr((char *)pkt, linefeed); - if (pos > 0) - i = pos - (char *)pkt; - else - i = hlen; - printf("%.*s", i, pkt); - - current_wget_state = WGET_TRANSFERRING; - - if (strstr((char *)pkt, http_ok) == 0) { - debug_cond(DEBUG_WGET, - "wget: Connected Bad Xfer\n"); - initial_data_seq_num = tcp_seq_num + hlen; - wget_loop_state = NETLOOP_FAIL; - wget_send(action, tcp_seq_num, tcp_ack_num, len); - } else { - debug_cond(DEBUG_WGET, - "wget: Connctd pkt %p hlen %x\n", - pkt, hlen); - initial_data_seq_num = tcp_seq_num + hlen; - - pos = strstr((char *)pkt, content_len); - if (!pos) { - content_length = -1; - } else { - pos += sizeof(content_len) + 2; - strict_strtoul(pos, 10, &content_length); - debug_cond(DEBUG_WGET, - "wget: Connected Len %lu\n", - content_length); - } - - net_boot_file_size = 0; - - if (len > hlen) - store_block(pkt + hlen, 0, len - hlen); - - debug_cond(DEBUG_WGET, - "wget: Connected Pkt %p hlen %x\n", - pkt, hlen); - - for (i = 0; i < pkt_q_idx; i++) { - ptr1 = map_sysmem( - (phys_addr_t)(pkt_q[i].pkt), - pkt_q[i].len); - store_block(ptr1, - pkt_q[i].tcp_seq_num - - initial_data_seq_num, - pkt_q[i].len); - unmap_sysmem(ptr1); - debug_cond(DEBUG_WGET, - "wget: Connctd pkt Q %p len %x\n", - pkt_q[i].pkt, pkt_q[i].len); - } - } - } - wget_send(action, tcp_seq_num, tcp_ack_num, len); -} - -/** - * wget_handler() - TCP handler of wget - * @pkt: pointer to the application packet - * @dport: destination TCP port - * @sip: source IP address - * @sport: source TCP port - * @tcp_seq_num: TCP sequential number - * @tcp_ack_num: TCP acknowledgment number - * @action: TCP action (SYN, ACK, FIN, etc) - * @len: packet length - * - * In the "application push" invocation, the TCP header with all - * its information is pointed to by the packet pointer. - */ -static void wget_handler(uchar *pkt, u16 dport, - struct in_addr sip, u16 sport, - u32 tcp_seq_num, u32 tcp_ack_num, - u8 action, unsigned int len) -{ - enum tcp_state wget_tcp_state = tcp_get_tcp_state(); - - net_set_timeout_handler(wget_timeout, wget_timeout_handler); - packets++; - - switch (current_wget_state) { - case WGET_CLOSED: - debug_cond(DEBUG_WGET, "wget: Handler: Error!, State wrong\n"); - break; - case WGET_CONNECTING: - debug_cond(DEBUG_WGET, - "wget: Connecting In len=%x, Seq=%u, Ack=%u\n", - len, tcp_seq_num, tcp_ack_num); - if (!len) { - if (wget_tcp_state == TCP_ESTABLISHED) { - debug_cond(DEBUG_WGET, - "wget: Cting, send, len=%x\n", len); - wget_send(action, tcp_seq_num, tcp_ack_num, - len); - } else { - printf("%.*s", len, pkt); - wget_fail("wget: Handler Connected Fail\n", - tcp_seq_num, tcp_ack_num, action); - } - } - break; - case WGET_CONNECTED: - debug_cond(DEBUG_WGET, "wget: Connected seq=%u, len=%x\n", - tcp_seq_num, len); - if (!len) { - wget_fail("Image not found, no data returned\n", - tcp_seq_num, tcp_ack_num, action); - } else { - wget_connected(pkt, tcp_seq_num, action, tcp_ack_num, len); - } - break; - case WGET_TRANSFERRING: - debug_cond(DEBUG_WGET, - "wget: Transferring, seq=%x, ack=%x,len=%x\n", - tcp_seq_num, tcp_ack_num, len); - - if (tcp_seq_num >= initial_data_seq_num && - store_block(pkt, tcp_seq_num - initial_data_seq_num, - len) != 0) { - wget_fail("wget: store error\n", - tcp_seq_num, tcp_ack_num, action); - return; - } - - switch (wget_tcp_state) { - case TCP_FIN_WAIT_2: - wget_send(TCP_ACK, tcp_seq_num, tcp_ack_num, len); - fallthrough; - case TCP_SYN_SENT: - case TCP_SYN_RECEIVED: - case TCP_CLOSING: - case TCP_FIN_WAIT_1: - case TCP_CLOSED: - net_set_state(NETLOOP_FAIL); - break; - case TCP_ESTABLISHED: - wget_send(TCP_ACK, tcp_seq_num, tcp_ack_num, - len); - wget_loop_state = NETLOOP_SUCCESS; - break; - case TCP_CLOSE_WAIT: /* End of transfer */ - current_wget_state = WGET_TRANSFERRED; - wget_send(action | TCP_ACK | TCP_FIN, - tcp_seq_num, tcp_ack_num, len); - break; - } - break; - case WGET_TRANSFERRED: - printf("Packets received %d, Transfer Successful\n", packets); - net_set_state(wget_loop_state); - break; - } -} - -#define RANDOM_PORT_START 1024 -#define RANDOM_PORT_RANGE 0x4000 - -/** - * random_port() - make port a little random (1024-17407) - * - * Return: random port number from 1024 to 17407 - * - * This keeps the math somewhat trivial to compute, and seems to work with - * all supported protocols/clients/servers - */ -static unsigned int random_port(void) -{ - return RANDOM_PORT_START + (get_timer(0) % RANDOM_PORT_RANGE); -} - -#define BLOCKSIZE 512 - -void wget_start(void) -{ - image_url = strchr(net_boot_file_name, ':'); - if (image_url > 0) { - web_server_ip = string_to_ip(net_boot_file_name); - ++image_url; - net_server_ip = web_server_ip; - } else { - web_server_ip = net_server_ip; - image_url = net_boot_file_name; - } - - debug_cond(DEBUG_WGET, - "wget: Transfer HTTP Server %pI4; our IP %pI4\n", - &web_server_ip, &net_ip); - - /* Check if we need to send across this subnet */ - if (net_gateway.s_addr && net_netmask.s_addr) { - struct in_addr our_net; - struct in_addr server_net; - - our_net.s_addr = net_ip.s_addr & net_netmask.s_addr; - server_net.s_addr = net_server_ip.s_addr & net_netmask.s_addr; - if (our_net.s_addr != server_net.s_addr) - debug_cond(DEBUG_WGET, - "wget: sending through gateway %pI4", - &net_gateway); - } - debug_cond(DEBUG_WGET, "URL '%s'\n", image_url); - - if (net_boot_file_expected_size_in_blocks) { - debug_cond(DEBUG_WGET, "wget: Size is 0x%x Bytes = ", - net_boot_file_expected_size_in_blocks * BLOCKSIZE); - print_size(net_boot_file_expected_size_in_blocks * BLOCKSIZE, - ""); - } - debug_cond(DEBUG_WGET, - "\nwget:Load address: 0x%lx\nLoading: *\b", image_load_addr); - - net_set_timeout_handler(wget_timeout, wget_timeout_handler); - tcp_set_tcp_handler(wget_handler); - - wget_timeout_count = 0; - current_wget_state = WGET_CLOSED; - - our_port = random_port(); - - /* - * Zero out server ether to force arp resolution in case - * the server ip for the previous u-boot command, for example dns - * is not the same as the web server ip. - */ - - memset(net_server_ethaddr, 0, 6); - - wget_send(TCP_SYN, 0, 0, 0); -}