From patchwork Sat Sep 21 03:43:40 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mikhail Kshevetskiy X-Patchwork-Id: 1988100 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=iopsys.eu header.i=@iopsys.eu header.a=rsa-sha256 header.s=selector2 header.b=1bFD91xy; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4X9Zqx5RfQz1y1t for ; Sat, 21 Sep 2024 13:44:13 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 5B9D38839E; Sat, 21 Sep 2024 05:44:08 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu 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=iopsys.eu header.i=@iopsys.eu header.b="1bFD91xy"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 663888839A; Sat, 21 Sep 2024 05:44:07 +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=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,SPF_HELO_PASS, SPF_PASS autolearn=no autolearn_force=no version=3.4.2 Received: from EUR03-AM7-obe.outbound.protection.outlook.com (mail-am7eur03on20701.outbound.protection.outlook.com [IPv6:2a01:111:f403:260e::701]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 0D1BD8839E for ; Sat, 21 Sep 2024 05:44:05 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=pass (p=reject dis=none) header.from=iopsys.eu Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=mikhail.kshevetskiy@genexis.eu ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ww/BgsBVGDJDBvD8eoPwDAL7Va70a8kzTw7CPHLUSO7ZhTSnFyEvz73C6mx7611TE84ARqkHM9VjT+S2LzoN1BpuWtuqvNvL0SyQe9c+HsWW6qLHqep7WBdTnMeCwm0JeKBmI03d/fUTxS1auuYAz/BLNlAy8FIx5ZK7lxD4r9RZk1OHxKAfvZBvW5DipOYdghL6UPP2zho/kJOD3XADJRfhTwe0dWweZ6YmiDObt83UdR296i8oGyja9HjJDjujWufTaGaJvd+V+3RNufctUoZTyzGtjdEingROTDxybpEfBCFnkHvftqjD0iOQjaRdXcaPD3twYDMTzVE1J9m3OA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0kXYHMocO2CKSF27iSgyVYOTpEfasNJkN4vyYtEYJ8U=; b=OKpiVGmZ8+VtkugsKCfHnn05dzMzh6a1IOJDPE39vQQ/FrKqPeDhnXB1OEN+sC9rVjIa2RXpsnHxn03NKI4LYXwTd+dkHEpb2RSNXvXVRKh0x7hEiad+arqkXlRzyw+MMraQ8p6SW9Ophhnq+CXLtVRyikYfCs3upthq5MO4/9+SAgq3/OX8XkPcWMZKZUsTD/EoYDAIH55EBYqCdbCtw9txh9WgwtHJZ3rxuD9fX4U1QN3Pz47tAQ+hevo7qUVGzN3k4lapAK5bMG/BVBoiPwiwZkakUUkSs5ydTgZcfRdWaV8dXz/eUVpsyTceE6iv/tPVI2EhKzRaHVnjGG0A1A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=genexis.eu; dmarc=pass action=none header.from=iopsys.eu; dkim=pass header.d=iopsys.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iopsys.eu; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0kXYHMocO2CKSF27iSgyVYOTpEfasNJkN4vyYtEYJ8U=; b=1bFD91xyruGvTZCj4bAx0qL8MWZrOOy+nnFtnx5dJEuvp2XedMeiQ57INdLvxPVVYG8vLWN/ztzygY9ooTwWqx4LzRIXnHkP7DAtXegBEBIuXwnbxoD/wUtZGpMWfgGiaxlQhI2o35/u3p6XkFWZrmTvyIbMSU5Nv94ADbivUYIEiuIbq2lWBqrJw6AP1Ayn4tJshMoR6YykI0AZ6jtnbhpw5WgK1G6XZLYP5olEx9hWA/vmV3p5xH/vgdk1wfT986DbXI7Kqws87Pm8DIvkhuJzFgf2UQkzHJjWf1Fwm6Q99MmM4k3S8yBx/3H4Zf5lOdbib+RIEOW9JdGbMFVJOA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=iopsys.eu; Received: from GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) by DU0PR08MB9418.eurprd08.prod.outlook.com (2603:10a6:10:421::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8005.7; Sat, 21 Sep 2024 03:44:02 +0000 Received: from GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0]) by GV2PR08MB8121.eurprd08.prod.outlook.com ([fe80::4cd3:da80:2532:daa0%2]) with mapi id 15.20.8005.010; Sat, 21 Sep 2024 03:44:02 +0000 From: Mikhail Kshevetskiy To: Simon Glass , Tom Rini , Joe Hershberger , Ramon Fried , Mattijs Korpershoek , Mikhail Kshevetskiy , AKASHI Takahiro , Heinrich Schuchardt , Michal Simek , Anand Moon , Marek Vasut , Ilias Apalodimas , Masahisa Kojima , Sean Anderson , Baruch Siach , Yasuharu Shibata , Richard Weinberger , u-boot@lists.denx.de Subject: [PATCH v7 00/13] net: tcp: improve tcp support Date: Sat, 21 Sep 2024 06:43:40 +0300 Message-ID: <20240921034353.1298452-1-mikhail.kshevetskiy@iopsys.eu> X-Mailer: git-send-email 2.45.2 X-ClientProxiedBy: GV2PEPF00004595.SWEP280.PROD.OUTLOOK.COM (2603:10a6:158:401::440) To GV2PR08MB8121.eurprd08.prod.outlook.com (2603:10a6:150:7d::22) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: GV2PR08MB8121:EE_|DU0PR08MB9418:EE_ X-MS-Office365-Filtering-Correlation-Id: 755392b2-9b0e-479a-d7f3-08dcd9efa1f3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|7416014|52116014|376014|1800799024|366016|38350700014|921020; X-Microsoft-Antispam-Message-Info: cJlpV2iGEH3Vb/pQf/R40EWI+Np8yejlpp1xR4pywDE2MjLuQNnRr4ip+DGo7RyiFsyB9AJg0SHs2zKcavESc9i5jOrWKTAMYTC2oRa/JNCxynFxEf4uFVLUpHEaP2QgkV3MJGj0i6ksiXFBlV+7iDryxiH1jtRTEW/Dd0Ob7KMjovqpJ7EVKaQZKudpl5KkPO15/yRCbiPHtPMjTmJiDkhb07RnUcAsGYwuGlMUsCwIrBsCxYPX7ZToUevT2EUzAE68NphwhCkvFkCwDBgjvdBSaZ6RH/Z152+RpSvBF2SA9dcFjChhpN3dlpc+SAPirXmOBiBfPXzrnrbQoM5RoOYqBJmDyQHGHR2VkcUzZbqNYp2ikaYB/ys45bq/a+cHV5cgJtrNbjkMThmfnQCGB5OAT6UEEG6tbPIRzVcyODsy4rxk+hP1mnaiHYPMaqDw7Kz1r4g3118CKlbgWf7hhsKSSu2/MOu6Wjxg1rqGbR279eHuEabaou96yP7GdG96OUReYrGX1njv0x5+zFAfGkt9Iyta8afnF3X6+N32HMRQWpFdC7jpe5AsEVUNlQ/nZ7gnBFlTPQzST3XUwtzlfMebtyI1v9Dsuo2BWJhLQcSIbfufoT5Q1nP6vRG4GG4F1mBSLMAT4I6C+g2kK7jJjAaAIDgeCZKLdDVSHElYa05GWvSBk/OGW99q1oQC/RAdhdCVU3BGWr6L4IgXZawOKe9DPVkrrBzA+fBDi6qGFgnnzmCO9CSKtBV+TDFr7INgb01RsMI2SX/WdlxruuBIJ3IjNXF30mzINVOudIzCYpDJvu4uyuVt8CN+Ek/WZ1+fAA60ud7GNq/fklVnywnpr7aG8z9kArpMw2GX/en/x628WjRw1QS9gwZU+izSNn1qGb2U/YH6avEzQPizlqm25ZgEya/A/4UfAaLuBkMPM+R1i3XjAglqFkbHsnpKbJg2/B9cJWJ52ZuHjQo1LY+t086cNiTRAM7tXPstvVBtbaAUQitDMH7t17gJHhm1X5lVpAqUJsDVXwj//QNo5qZcZoEmIflncSGEyq/SWdwf64UN0Y1U3rYGwgUZJDaGVIjfnelbrTUXJDD1SpDfEFdSi1bn8vJw79IkQplfD5vRKPlBT9OcK2f4+mMv2hk3r71sRZNzQCzPgNXJgxmYDl+eGQD/ndmvBUdDlWK7RuS4gj4A1m/3BtuV9Nt9tHx/xyb9/70rx3k17DEAHiFtSdlUNl0t0rtQPQoon8gkyb/g74hSXd15hJIaVxESVhWGHp078p4ylj/Sqb9T+659U5uC6e6HvfL0su083TFwYyDhCq/OvgpMjhOo/ech8YzP/CEwECSA/Nkkq6iqqC6YSXN0Oq7nlnN+J4d2HOXFVbkMAJc= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:GV2PR08MB8121.eurprd08.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(7416014)(52116014)(376014)(1800799024)(366016)(38350700014)(921020); DIR:OUT; SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: bHOouV6hDK+0PfADEclZQssXGMvNZ3LWIo56FV8g9nmjxZ/cvETM7DCdejeWFmUXjpniDGijNWCM10ZX4xwpE93P9+GvZLVTpqwf/EpXm/JJHylpPq0K42Ld9Vl1iGjnrY/AS1Z543JzhNs4ZA7b7QTsFq5fIRxC0L+6QIXkXwbfv4sDw5bIpotB8ye037OGAbP6CL+LkXwmnhx2Pu2hkH4RQbVay+TOAZIhgc7ikdvMTcChz5c646I0kbOSgsHOkVVNxIQMdQc+jwKf8wCU0DhyKl9VV0tUUrxu+D+j44q69dswxEHlvzzMMOgPnJUatHUqxFwHOiObtQMRMTy28/frPqQuE5fVz6BX2wSMJb+N4MFS0QQFTEpSOsaYPHWNDZ5DwDRTnCuVXaHHGdPdgmCYcvA/hnPWXfDgmQrNGTCU7aQ0xXUe8FvLX/4jZafTzGpa6LS/4841RPp5tvkn3aShu7CFSjVNCcDzy/k68EVh9C0IOoNpi6u255B2dysKn0+SS+qHzzAKtKHXSzNs980caFy/A+NMfLeqjhoKTMsLE6ppqpjCUGygVfblAM5ks/4CJRWnOzpTi8FzQLi44ug+ttvAtBlUwBchFKHvC3KY7OR8ohl9hoN0l6brsWxo9XKd2lrQE+uM8aOsGz66HbjDRS0dFmjsd1pv5jqRfyL2PhCxFkv0JRdhl56Lzl+bMgfxzdzOWzrywfqDdBJf/68ctgX++T5v8RvuBTAv6x5fAZfxO5Bbiq8uD5juzWk1D2QwWP/fN+k7FgunwuHKC6f76WlXjiFZAmSG+eHtxf1Yc0VzK7uJfx3hjTTdImqW3ayC4fKgjQgzmAPNB3lhBRf6hYL0oi9y6HRrjz90UDcfYZkEcSMMQC2iAa6PxZyvjsRrw8l/+ZgcLKKgDCW++3bIXhb2xfMMIhrDWgG5Qc/E6nyux4Zgsk3ElPgQ7tYVGcG4wqwg9uwFIDGiPVXZWiZeo4W0Cu4QUnVyU5IRxMDgXlmZeCnL3BF5WkHanwxkSt605lURdLxCk8nsqcdEV40eIGe+ocM0lto8lbdpZcpapHH+OfPaUppulC+2NI+s5ijP/bpJVJI3043iN3Fg0b2gz3BWAva39U73+d4Z4HIcKvHOjlFdHGp1wJhHsGM4o9iML8+EKbitSIxm8iwhrQ1w1+f/mjq9EtD17yAxBhcejiLO46JoXHPNf4eQRjysOxg4l9BA6RjIS+TZAPYveux9KjTMmyy/6whKc5jF4SV8dNFh3LlaCqwFMgPs+EDuIkehrBChWTltuAdSvddeuOIV8kb+wwFFRemrfG5uQhkKujPzafj6W9Xzq1Q+dTXrQPL8VCUh8RpuuLRwFtQ+QIgTlQRqaYXyU3UjYSqCNGllEMJ+5HOQ/fmCx6tcEp98J4yagwgcTKC6mXxkPE0wHg9iXhz6oZgvY8YQ3i18fZ+wqS9iotv0q3g2sUq+EC92AHDRUDvxREvm/C6unk9ywTw1oNAJY0SwbthraNomCZZMXeQQVzSuMdfuRhNCMwU49AYzGcjtdcWfsbmOoRLw0l/nLmABWhzRvSI2PTDPSIlvDHqHkHuLmQujqoQpse5+/IUNJi2WqUeYztBTv0XKNRC7GltwHnu/M3fsbnamnk4= X-OriginatorOrg: iopsys.eu X-MS-Exchange-CrossTenant-Network-Message-Id: 755392b2-9b0e-479a-d7f3-08dcd9efa1f3 X-MS-Exchange-CrossTenant-AuthSource: GV2PR08MB8121.eurprd08.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Sep 2024 03:44:01.9680 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8d891be1-7bce-4216-9a99-bee9de02ba58 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: px24g/TM7ZgZV+XhT3WzNzBsXayZXgpeVixdrYhhUtIeLB91wy6L2fjm9aC3ft+fK211/ElmVWcRGpJueUFaVfQQuWug/FZuq5D9AG/t1eg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: DU0PR08MB9418 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 U-Boot support of LWIP is not ready for a moment, but we already have some kind of tcp support. Unfrotunately this support is really bad. Some of the known issues: * tcp packet from other connection can break a current one * tcp send sequence always starts from zero * bad tcp options processing * strange assumptions on packet size for selectiv acknowledge * tcp interface assumes one of the two scenarios: - data downloading from remote host to a board - request-response exchange with a small packets so it's not possible to upload large amount of data from the board to remote host. * wget test generate bad tcp stream, test should fail but it passes instead This series of patches fixes all of the above issuess. The benefits: * A lot of bug was fixed * Better and more reliable TCP state machine * Tcp cliens becomes smaller/simpler * Data uploading was fixed (now it's possible to transmit a huge amount of data from the board to remote host) * Netcat over tcp was implemented. Netcat supports data downloading/uploading from/to remote host in client/server mode. * An example web-server implementation. This code can be used as a base for web-based firmware uploading used by some vendors. Modification was verified with * firmware downloading via u-boot wget command * fastboot over tcp * netcat linux client * Firefox/Chrome/Edge using example web-server implementation Changes v2: * cover letter was added * some patches were removed Changes v3: * better cover letter Changes v4: * fix bug in debug output * add more comments * codestyle fixes Changes v5: * old patches were ocasionally sent with v4 * add back web-server patches * fix bug in debug output * add more comments * codestyle fixes Changes v6: * fix the wget test * improve description of "simplify tcp header filling code" patch Changes v7: * fix include ordering * improve option descriptions * fix a lot of extra brackets and comparisons against NULL / 0 * add empty lines before final returns * fixed a bug with zero size httpd uploads Mikhail Kshevetskiy (13): net/tcp: fix TCP options processing net/tcp: fix selective acknowledge net/tcp: put connection specific data into a tcp_stream structure net/tcp: add connection info to tcp_stream structure net/tcp: rename ack_edge and seq_init to more common rcv_nxt and irs net/tcp: improve tcp framework, use better state machine test/cmd/wget: fix the test net/tcp: simplify tcp header filling code net/tcp: define a fallback value for rcv_wnd size net/net: fix include ordering net/netcat: add netcat over tcp support net/httpd: add httpd common code net/httpd-upload: an example web-server implementation for file uploading arch/sandbox/include/asm/eth.h | 4 + cmd/Kconfig | 35 + cmd/net.c | 55 +- include/net.h | 7 +- include/net/httpd-upload.h | 12 + include/net/httpd.h | 64 ++ include/net/netcat.h | 20 + include/net/tcp.h | 235 +++++- include/net/wget.h | 8 - net/Kconfig | 14 + net/Makefile | 3 + net/fastboot_tcp.c | 193 +++-- net/httpd-upload.c | 170 +++++ net/httpd.c | 730 ++++++++++++++++++ net/net.c | 60 +- net/netcat.c | 194 +++++ net/tcp.c | 1259 ++++++++++++++++++++++---------- net/wget.c | 481 ++++-------- test/cmd/wget.c | 45 +- 19 files changed, 2691 insertions(+), 898 deletions(-) create mode 100644 include/net/httpd-upload.h create mode 100644 include/net/httpd.h create mode 100644 include/net/netcat.h create mode 100644 net/httpd-upload.c create mode 100644 net/httpd.c create mode 100644 net/netcat.c