Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2073327/?format=api
{ "id": 2073327, "url": "http://patchwork.ozlabs.org/api/patches/2073327/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/20250415211819.1254435-6-jerome.forissier@linaro.org/", "project": { "id": 18, "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api", "name": "U-Boot", "link_name": "uboot", "list_id": "u-boot.lists.denx.de", "list_email": "u-boot@lists.denx.de", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<20250415211819.1254435-6-jerome.forissier@linaro.org>", "list_archive_url": null, "date": "2025-04-15T21:17:40", "name": "[v2,05/11] drivers: net: sandbox: add support for NET_LWIP", "commit_ref": null, "pull_url": null, "state": "accepted", "archived": false, "hash": "7ac02392430cfaf2d0d325cd8ce24694c5bd7204", "submitter": { "id": 69192, "url": "http://patchwork.ozlabs.org/api/people/69192/?format=api", "name": "Jerome Forissier", "email": "jerome.forissier@linaro.org" }, "delegate": { "id": 157425, "url": "http://patchwork.ozlabs.org/api/users/157425/?format=api", "username": "jforissier", "first_name": "Jerome", "last_name": "Forissier", "email": "jerome.forissier@linaro.org" }, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/20250415211819.1254435-6-jerome.forissier@linaro.org/mbox/", "series": [ { "id": 452941, "url": "http://patchwork.ozlabs.org/api/series/452941/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=452941", "date": "2025-04-15T21:17:35", "name": "lwIP sandbox tests", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/452941/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2073327/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2073327/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<u-boot-bounces@lists.denx.de>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=sT+5Xyz2;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=85.214.62.61; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)", "phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=linaro.org", "phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de", "phobos.denx.de;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.b=\"sT+5Xyz2\";\n\tdkim-atps=neutral", "phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=linaro.org", "phobos.denx.de;\n spf=pass smtp.mailfrom=jerome.forissier@linaro.org" ], "Received": [ "from phobos.denx.de (phobos.denx.de [85.214.62.61])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange X25519 server-signature ECDSA (secp384r1))\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4ZccV1262Gz1yJ9\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 16 Apr 2025 07:19:05 +1000 (AEST)", "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 6D63982BB4;\n\tTue, 15 Apr 2025 23:18:39 +0200 (CEST)", "by phobos.denx.de (Postfix, from userid 109)\n id 84F4482B97; Tue, 15 Apr 2025 23:18:36 +0200 (CEST)", "from mail-wr1-x435.google.com (mail-wr1-x435.google.com\n [IPv6:2a00:1450:4864:20::435])\n (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id 1101282B54\n for <u-boot@lists.denx.de>; Tue, 15 Apr 2025 23:18:34 +0200 (CEST)", "by mail-wr1-x435.google.com with SMTP id\n ffacd0b85a97d-39c0dfad22aso3546455f8f.2\n for <u-boot@lists.denx.de>; Tue, 15 Apr 2025 14:18:34 -0700 (PDT)", "from builder.. ([2a01:e0a:3cb:7bb0:6ebc:6ce:770e:95f9])\n by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-39eaf43cce3sm15530917f8f.74.2025.04.15.14.18.32\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 15 Apr 2025 14:18:33 -0700 (PDT)" ], "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,\n DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED,\n SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1744751913; x=1745356713; darn=lists.denx.de;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=nF+a3elx5t5wSW2ShO5zA1eAO1aO2amXsczOOvtouI4=;\n b=sT+5Xyz2fu3dOpB9UfudJcIco4eNd9rB+N44F3QcnyEvLnopnf2HJFVmw9liHbbtP0\n r7Da55pFDeDBfmyIY/fGU4SsjPYRP8kVZ/9tzd4C1mk+FB6uBUEzzKVv/ZvKl1R2wxZ1\n +oyhwg4nIYB+SrPpEiqirjbbMmnaT/LZZkwNRqaXzHGScOQBO07+heRP3YhReAQc0KNS\n dhW/UdntWR5yVsuLcG8CWtIt5PIpzwJ7/UCKrT0B8Q651nx0TwZ8Hhj4/fHEt8Kue4ru\n ycZ3TmUNjx3/tbfiGbtjdm603zIZhbl445TGwoVcT5GR7as3skuv9ZrYwFoMrnj2JX8M\n zR0g==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1744751913; x=1745356713;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=nF+a3elx5t5wSW2ShO5zA1eAO1aO2amXsczOOvtouI4=;\n b=QveAloAnZ8J8ixu6fK7NVp7qIqjTlrDojU+oImAwjec2hMxiyC97VnJ5lCeWkAa9Cp\n oU+t6tZFFXwbdR+mI0ONLITEbMYcopVWqWuEmIFRpQuTIX7mC6EqF0ml0XISAxBg2XnA\n JfO1g7E1DQj0tBQh/wcDuR0PCyYK3JYEAJ4NAueOS1bzqIJRdTR7BRqxSPA9Rk2k7tEg\n ++UA2z2qj60rCGKaLYq9qMtvGjLshpN20WPDPKxisRi2xPsy+k6vvR9wzVH66QAVZwk7\n yIIXTijFAOLtkFTiNEifqtKblDl0xEw8noV6ojhCpd0fbMu0odOrhyQzzNyRoI2NDCO1\n oEoQ==", "X-Gm-Message-State": "AOJu0Yx8Dz0ctefvsAihFKcvNuIHce7iiqxZEfAevJt8lh3UuOeaO+a+\n 0VU71y3N6KsiTQhM8GWxGVIqZX40TMmJ/H1t2oEm7aMG/x8Xk8DJ/n0g7kkvyqjdQGfWFEaNjhY\n f14w=", "X-Gm-Gg": "ASbGncuQzu25MzAE+7IbMdQFhT93I2m+ktuvTQOyW+7CrOWsEgEol1HzWQcLR9zlklt\n I+D1YvVEdm5XfQ5rtcs9NM8su9ruNloJezxq/69/HKkGVAnyLjY9ldu3BhtQVh7vd8k6I5gHOEk\n JY9FX7UJvmFfR/ANrKPOHEz2D6hpA7t/7Eevqu2KYEIoDcgsXo2a06X8q0j3RiyHHmragXG/1SR\n PAFvbVLX73rlp/MFCFMsRWmFtDAZ6o0lI0f9owbnIrTdWZDxLp+Npocg8wwLI6ZIPurFDfr+pfE\n g6dkDRlupZfMAWVrM38iaHjnjktS4FfW2OGstYoOz3jp9WxO", "X-Google-Smtp-Source": "\n AGHT+IEA9oMyEQ8bjkIBnDmM2O6VxfRHlHC2lnFEyX27VxMPVQAY87HmnW2QKTO2JHduMtNvVOTmzA==", "X-Received": "by 2002:a05:6000:4020:b0:39c:1401:679c with SMTP id\n ffacd0b85a97d-39ee2736cdamr861799f8f.21.1744751913267;\n Tue, 15 Apr 2025 14:18:33 -0700 (PDT)", "From": "Jerome Forissier <jerome.forissier@linaro.org>", "To": "U-Boot mailing list <u-boot@lists.denx.de>", "Cc": "Jerome Forissier <jerome.forissier@linaro.org>,\n Simon Glass <sjg@chromium.org>, Boon Khai Ng <boon.khai.ng@intel.com>,\n Christophe ROULLIER <christophe.roullier@foss.st.com>,\n Hanyuan Zhao <hanyuan-z@qq.com>,\n Ilias Apalodimas <ilias.apalodimas@linaro.org>,\n Joe Hershberger <joe.hershberger@ni.com>, Marek Vasut <marex@denx.de>,\n Markus Gothe <markus.gothe@genexis.eu>, Philip Oberfichtner <pro@denx.de>,\n Ramon Fried <rfried.dev@gmail.com>, Robert Marko <robert.marko@sartura.hr>,\n Romain Naour <romain.naour@smile.fr>, Tom Rini <trini@konsulko.com>,\n Weijie Gao <weijie.gao@mediatek.com>", "Subject": "[PATCH v2 05/11] drivers: net: sandbox: add support for NET_LWIP", "Date": "Tue, 15 Apr 2025 23:17:40 +0200", "Message-ID": "<20250415211819.1254435-6-jerome.forissier@linaro.org>", "X-Mailer": "git-send-email 2.43.0", "In-Reply-To": "<20250415211819.1254435-1-jerome.forissier@linaro.org>", "References": "<20250415211819.1254435-1-jerome.forissier@linaro.org>", "MIME-Version": "1.0", "Content-Transfer-Encoding": "8bit", "X-BeenThere": "u-boot@lists.denx.de", "X-Mailman-Version": "2.1.39", "Precedence": "list", "List-Id": "U-Boot discussion <u-boot.lists.denx.de>", "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>", "List-Archive": "<https://lists.denx.de/pipermail/u-boot/>", "List-Post": "<mailto:u-boot@lists.denx.de>", "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>", "List-Subscribe": "<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>", "Errors-To": "u-boot-bounces@lists.denx.de", "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>", "X-Virus-Scanned": "clamav-milter 0.103.8 at phobos.denx.de", "X-Virus-Status": "Clean" }, "content": "Make the sandbox mock ethernet driver (drivers/net/sandbox.c) compatible\nwith NET_LWIP by not relying on any of the structures or functions\ndefined in net-legacy.h. This is done by providing local definitions of\nthe various protocol structures (Ethernet, ARP, IPv4, ICMP). Drop the\nstub driver that was introduced specifically for NET_LWIP\n(drivers/net/sandbox-lwip.c).\n\nSigned-off-by: Jerome Forissier <jerome.forissier@linaro.org>\nReviewed-by: Simon Glass <sjg@chromium.org>\n---\n\n(no changes since v1)\n\n drivers/net/Kconfig | 13 +-\n drivers/net/Makefile | 1 -\n drivers/net/sandbox-lwip.c | 85 -------------\n drivers/net/sandbox.c | 240 ++++++++++++++++++++++++-------------\n 4 files changed, 160 insertions(+), 179 deletions(-)\n delete mode 100644 drivers/net/sandbox-lwip.c", "diff": "diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig\nindex 3db784faedd..933bad9b00b 100644\n--- a/drivers/net/Kconfig\n+++ b/drivers/net/Kconfig\n@@ -350,7 +350,7 @@ config ESSEDMA\n \n config ETH_SANDBOX\n \tdepends on SANDBOX\n-\tdepends on NET\n+\tdepends on NET || NET_LWIP\n \tdefault y\n \tbool \"Sandbox: Mocked Ethernet driver\"\n \thelp\n@@ -359,17 +359,6 @@ config ETH_SANDBOX\n \n \t This driver is particularly useful in the test/dm/eth.c tests\n \n-config ETH_SANDBOX_LWIP\n-\tdepends on SANDBOX\n-\tdepends on NET_LWIP\n-\tdefault y\n-\tbool \"Sandbox: Mocked Ethernet driver (for NET_LWIP)\"\n-\thelp\n-\t This driver is meant as a replacement for ETH_SANDBOX when\n-\t the network stack is NET_LWIP rather than NET. It currently\n-\t does nothing, i.e. it drops the sent packets and never receives\n-\t data.\n-\n config ETH_SANDBOX_RAW\n \tdepends on SANDBOX\n \tdepends on NET\ndiff --git a/drivers/net/Makefile b/drivers/net/Makefile\nindex d919d437c08..128ae89db05 100644\n--- a/drivers/net/Makefile\n+++ b/drivers/net/Makefile\n@@ -40,7 +40,6 @@ obj-$(CONFIG_ETH_DESIGNWARE_SOCFPGA) += dwmac_socfpga.o\n obj-$(CONFIG_ETH_SANDBOX) += sandbox.o\n obj-$(CONFIG_ETH_SANDBOX_RAW) += sandbox-raw-bus.o\n obj-$(CONFIG_ETH_SANDBOX_RAW) += sandbox-raw.o\n-obj-$(CONFIG_ETH_SANDBOX_LWIP) += sandbox-lwip.o\n obj-$(CONFIG_FEC_MXC) += fec_mxc.o\n obj-$(CONFIG_FMAN_ENET) += fm/\n obj-$(CONFIG_FMAN_ENET) += fsl_mdio.o\ndiff --git a/drivers/net/sandbox-lwip.c b/drivers/net/sandbox-lwip.c\ndeleted file mode 100644\nindex 3721033c310..00000000000\n--- a/drivers/net/sandbox-lwip.c\n+++ /dev/null\n@@ -1,85 +0,0 @@\n-// SPDX-License-Identifier: GPL-2.0\n-/*\n- * Copyright (c) 2015 National Instruments\n- *\n- * (C) Copyright 2015\n- * Joe Hershberger <joe.hershberger@ni.com>\n- */\n-\n-#include <dm.h>\n-#include <log.h>\n-#include <malloc.h>\n-#include <net.h>\n-#include <asm/eth.h>\n-#include <asm/global_data.h>\n-#include <asm/test.h>\n-\n-DECLARE_GLOBAL_DATA_PTR;\n-\n-static int sb_lwip_eth_start(struct udevice *dev)\n-{\n-\tdebug(\"eth_sandbox_lwip: Start\\n\");\n-\n-\treturn 0;\n-}\n-\n-static int sb_lwip_eth_send(struct udevice *dev, void *packet, int length)\n-{\n-\tdebug(\"eth_sandbox_lwip: Send packet %d\\n\", length);\n-\n-\treturn -ENOTSUPP;\n-}\n-\n-static int sb_lwip_eth_recv(struct udevice *dev, int flags, uchar **packetp)\n-{\n-\treturn -EAGAIN;\n-}\n-\n-static int sb_lwip_eth_free_pkt(struct udevice *dev, uchar *packet, int length)\n-{\n-\treturn 0;\n-}\n-\n-static void sb_lwip_eth_stop(struct udevice *dev)\n-{\n-}\n-\n-static int sb_lwip_eth_write_hwaddr(struct udevice *dev)\n-{\n-\treturn 0;\n-}\n-\n-static const struct eth_ops sb_eth_ops = {\n-\t.start\t\t\t= sb_lwip_eth_start,\n-\t.send\t\t\t= sb_lwip_eth_send,\n-\t.recv\t\t\t= sb_lwip_eth_recv,\n-\t.free_pkt\t\t= sb_lwip_eth_free_pkt,\n-\t.stop\t\t\t= sb_lwip_eth_stop,\n-\t.write_hwaddr\t\t= sb_lwip_eth_write_hwaddr,\n-};\n-\n-static int sb_lwip_eth_remove(struct udevice *dev)\n-{\n-\treturn 0;\n-}\n-\n-static int sb_lwip_eth_of_to_plat(struct udevice *dev)\n-{\n-\treturn 0;\n-}\n-\n-static const struct udevice_id sb_eth_ids[] = {\n-\t{ .compatible = \"sandbox,eth\" },\n-\t{ }\n-};\n-\n-U_BOOT_DRIVER(eth_sandbox) = {\n-\t.name\t= \"eth_lwip_sandbox\",\n-\t.id\t= UCLASS_ETH,\n-\t.of_match = sb_eth_ids,\n-\t.of_to_plat = sb_lwip_eth_of_to_plat,\n-\t.remove\t= sb_lwip_eth_remove,\n-\t.ops\t= &sb_eth_ops,\n-\t.priv_auto\t= 0,\n-\t.plat_auto\t= sizeof(struct eth_pdata),\n-};\ndiff --git a/drivers/net/sandbox.c b/drivers/net/sandbox.c\nindex fe3627db6e3..2011fd31f41 100644\n--- a/drivers/net/sandbox.c\n+++ b/drivers/net/sandbox.c\n@@ -9,13 +9,84 @@\n #include <dm.h>\n #include <log.h>\n #include <malloc.h>\n-#include <net.h>\n #include <asm/eth.h>\n #include <asm/global_data.h>\n #include <asm/test.h>\n+#include <asm/types.h>\n+\n+/*\n+ * Structure definitions for network protocols. Since this file is used for\n+ * both NET and NET_LWIP, and given that the two network stacks do have\n+ * conflicting types (for instance struct icmp_hdr), it is on purpose that the\n+ * structures are defined locally with minimal dependencies -- <asm/types.h> is\n+ * included for the bit types and that's it.\n+ */\n+\n+#define ETHADDR_LEN 6\n+#define IP4_LEN 4\n+\n+struct ethhdr {\n+ u8 dst[ETHADDR_LEN];\n+ u8 src[ETHADDR_LEN];\n+ u16 protlen;\n+} __attribute__((packed));\n+\n+#define ETHHDR_SIZE (sizeof(struct ethhdr))\n+\n+struct arphdr {\n+\tu16 htype;\n+\tu16 ptype;\n+\tu8 hlen;\n+\tu8 plen;\n+\tu16 op;\n+} __attribute__((packed));\n+\n+#define ARPHDR_SIZE (sizeof(struct arphdr))\n+\n+#define ARP_REQUEST\t1\n+#define ARP_REPLY\t2\n+\n+struct arpdata {\n+\tu8 sha[ETHADDR_LEN];\n+\tu32 spa;\n+\tu8 tha[ETHADDR_LEN];\n+\tu32 tpa;\n+} __attribute__((packed));\n+\n+#define ARPDATA_SIZE (sizeof(struct arpdata))\n+\n+struct iphdr {\n+\tu8 hl_v;\n+\tu8 tos;\n+\tu16 len;\n+\tu16 id;\n+\tu16 off;\n+\tu8 ttl;\n+\tu8 prot;\n+\tu16 sum;\n+\tu32 src;\n+\tu32 dst;\n+} __attribute__((packed));\n+\n+#define IPHDR_SIZE (sizeof(struct iphdr))\n+\n+struct icmphdr {\n+\tu8 type;\n+\tu8 code;\n+\tu16 checksum;\n+\tu16 id;\n+\tu16 sequence;\n+} __attribute__((packed));\n+\n+#define ICMPHDR_SIZE (sizeof(struct icmphdr))\n+\n+#define ICMP_ECHO_REQUEST\t8\n+#define ICMP_ECHO_REPLY\t\t0\n+#define IPPROTO_ICMP\t\t1\n \n DECLARE_GLOBAL_DATA_PTR;\n \n+static const u8 null_ethaddr[6];\n static bool skip_timeout;\n \n /*\n@@ -59,17 +130,19 @@ int sandbox_eth_arp_req_to_reply(struct udevice *dev, void *packet,\n \t\t\t\t unsigned int len)\n {\n \tstruct eth_sandbox_priv *priv = dev_get_priv(dev);\n-\tstruct ethernet_hdr *eth = packet;\n-\tstruct arp_hdr *arp;\n-\tstruct ethernet_hdr *eth_recv;\n-\tstruct arp_hdr *arp_recv;\n+\tstruct ethhdr *eth = packet;\n+\tstruct arphdr *arp;\n+\tstruct arpdata *arpd;\n+\tstruct ethhdr *eth_recv;\n+\tstruct arphdr *arp_recv;\n+\tstruct arpdata *arp_recvd;\n \n-\tif (ntohs(eth->et_protlen) != PROT_ARP)\n+\tif (ntohs(eth->protlen) != PROT_ARP)\n \t\treturn -EAGAIN;\n \n-\tarp = packet + ETHER_HDR_SIZE;\n+\tarp = packet + ETHHDR_SIZE;\n \n-\tif (ntohs(arp->ar_op) != ARPOP_REQUEST)\n+\tif (ntohs(arp->op) != ARP_REQUEST)\n \t\treturn -EAGAIN;\n \n \t/* Don't allow the buffer to overrun */\n@@ -77,27 +150,29 @@ int sandbox_eth_arp_req_to_reply(struct udevice *dev, void *packet,\n \t\treturn 0;\n \n \t/* store this as the assumed IP of the fake host */\n-\tpriv->fake_host_ipaddr = net_read_ip(&arp->ar_tpa);\n+\tarpd = (struct arpdata *)(arp + 1);\n+\tpriv->fake_host_ipaddr.s_addr = arpd->tpa;\n \n \t/* Formulate a fake response */\n \teth_recv = (void *)priv->recv_packet_buffer[priv->recv_packets];\n-\tmemcpy(eth_recv->et_dest, eth->et_src, ARP_HLEN);\n-\tmemcpy(eth_recv->et_src, priv->fake_host_hwaddr, ARP_HLEN);\n-\teth_recv->et_protlen = htons(PROT_ARP);\n+\tmemcpy(eth_recv->dst, eth->src, ETHADDR_LEN);\n+\tmemcpy(eth_recv->src, priv->fake_host_hwaddr, ETHADDR_LEN);\n+\teth_recv->protlen = htons(PROT_ARP);\n \n-\tarp_recv = (void *)eth_recv + ETHER_HDR_SIZE;\n-\tarp_recv->ar_hrd = htons(ARP_ETHER);\n-\tarp_recv->ar_pro = htons(PROT_IP);\n-\tarp_recv->ar_hln = ARP_HLEN;\n-\tarp_recv->ar_pln = ARP_PLEN;\n-\tarp_recv->ar_op = htons(ARPOP_REPLY);\n-\tmemcpy(&arp_recv->ar_sha, priv->fake_host_hwaddr, ARP_HLEN);\n-\tnet_write_ip(&arp_recv->ar_spa, priv->fake_host_ipaddr);\n-\tmemcpy(&arp_recv->ar_tha, &arp->ar_sha, ARP_HLEN);\n-\tnet_copy_ip(&arp_recv->ar_tpa, &arp->ar_spa);\n+\tarp_recv = (void *)eth_recv + ETHHDR_SIZE;\n+\tarp_recv->htype = htons(ARP_ETHER);\n+\tarp_recv->ptype = htons(PROT_IP);\n+\tarp_recv->hlen = ETHADDR_LEN;\n+\tarp_recv->plen = IP4_LEN;\n+\tarp_recv->op = htons(ARP_REPLY);\n+\tarp_recvd = (struct arpdata *)(arp_recv + 1);\n+\tmemcpy(&arp_recvd->sha, priv->fake_host_hwaddr, ETHADDR_LEN);\n+\tarp_recvd->spa = priv->fake_host_ipaddr.s_addr;\n+\tmemcpy(&arp_recvd->tha, &arpd->sha, ETHADDR_LEN);\n+\tarp_recvd->tpa = arpd->spa;\n \n-\tpriv->recv_packet_length[priv->recv_packets] =\n-\t\tETHER_HDR_SIZE + ARP_HDR_SIZE;\n+\tpriv->recv_packet_length[priv->recv_packets] = ETHHDR_SIZE +\n+\t\tARPHDR_SIZE + ARPDATA_SIZE;\n \t++priv->recv_packets;\n \n \treturn 0;\n@@ -114,22 +189,22 @@ int sandbox_eth_ping_req_to_reply(struct udevice *dev, void *packet,\n \t\t\t\t unsigned int len)\n {\n \tstruct eth_sandbox_priv *priv = dev_get_priv(dev);\n-\tstruct ethernet_hdr *eth = packet;\n-\tstruct ip_udp_hdr *ip;\n-\tstruct icmp_hdr *icmp;\n-\tstruct ethernet_hdr *eth_recv;\n-\tstruct ip_udp_hdr *ipr;\n-\tstruct icmp_hdr *icmpr;\n+\tstruct ethhdr *eth = packet;\n+\tstruct iphdr *ip;\n+\tstruct icmphdr *icmp;\n+\tstruct ethhdr *eth_recv;\n+\tstruct iphdr *ipr;\n+\tstruct icmphdr *icmpr;\n \n-\tif (ntohs(eth->et_protlen) != PROT_IP)\n+\tif (ntohs(eth->protlen) != PROT_IP)\n \t\treturn -EAGAIN;\n \n-\tip = packet + ETHER_HDR_SIZE;\n+\tip = packet + ETHHDR_SIZE;\n \n-\tif (ip->ip_p != IPPROTO_ICMP)\n+\tif (ip->prot != IPPROTO_ICMP)\n \t\treturn -EAGAIN;\n \n-\ticmp = (struct icmp_hdr *)&ip->udp_src;\n+\ticmp = (struct icmphdr *)(ip + 1);\n \n \tif (icmp->type != ICMP_ECHO_REQUEST)\n \t\treturn -EAGAIN;\n@@ -141,19 +216,19 @@ int sandbox_eth_ping_req_to_reply(struct udevice *dev, void *packet,\n \t/* reply to the ping */\n \teth_recv = (void *)priv->recv_packet_buffer[priv->recv_packets];\n \tmemcpy(eth_recv, packet, len);\n-\tipr = (void *)eth_recv + ETHER_HDR_SIZE;\n-\ticmpr = (struct icmp_hdr *)&ipr->udp_src;\n-\tmemcpy(eth_recv->et_dest, eth->et_src, ARP_HLEN);\n-\tmemcpy(eth_recv->et_src, priv->fake_host_hwaddr, ARP_HLEN);\n-\tipr->ip_sum = 0;\n-\tipr->ip_off = 0;\n-\tnet_copy_ip((void *)&ipr->ip_dst, &ip->ip_src);\n-\tnet_write_ip((void *)&ipr->ip_src, priv->fake_host_ipaddr);\n-\tipr->ip_sum = compute_ip_checksum(ipr, IP_HDR_SIZE);\n+\tipr = (void *)eth_recv + ETHHDR_SIZE;\n+\ticmpr = (struct icmphdr *)(ipr + 1);\n+\tmemcpy(eth_recv->dst, eth->src, ETHADDR_LEN);\n+\tmemcpy(eth_recv->src, priv->fake_host_hwaddr, ETHADDR_LEN);\n+\tipr->sum = 0;\n+\tipr->off = 0;\n+\tipr->dst = ip->src;\n+\tipr->src = priv->fake_host_ipaddr.s_addr;\n+\tipr->sum = compute_ip_checksum(ipr, IPHDR_SIZE);\n \n \ticmpr->type = ICMP_ECHO_REPLY;\n \ticmpr->checksum = 0;\n-\ticmpr->checksum = compute_ip_checksum(icmpr, ICMP_HDR_SIZE);\n+\ticmpr->checksum = compute_ip_checksum(icmpr, ICMPHDR_SIZE);\n \n \tpriv->recv_packet_length[priv->recv_packets] = len;\n \t++priv->recv_packets;\n@@ -171,8 +246,9 @@ int sandbox_eth_ping_req_to_reply(struct udevice *dev, void *packet,\n int sandbox_eth_recv_arp_req(struct udevice *dev)\n {\n \tstruct eth_sandbox_priv *priv = dev_get_priv(dev);\n-\tstruct ethernet_hdr *eth_recv;\n-\tstruct arp_hdr *arp_recv;\n+\tstruct ethhdr *eth_recv;\n+\tstruct arphdr *arp_recv;\n+\tstruct arpdata *arp_recvd;\n \n \t/* Don't allow the buffer to overrun */\n \tif (priv->recv_packets >= PKTBUFSRX)\n@@ -180,23 +256,24 @@ int sandbox_eth_recv_arp_req(struct udevice *dev)\n \n \t/* Formulate a fake request */\n \teth_recv = (void *)priv->recv_packet_buffer[priv->recv_packets];\n-\tmemcpy(eth_recv->et_dest, net_bcast_ethaddr, ARP_HLEN);\n-\tmemcpy(eth_recv->et_src, priv->fake_host_hwaddr, ARP_HLEN);\n-\teth_recv->et_protlen = htons(PROT_ARP);\n+\tmemcpy(eth_recv->dst, net_bcast_ethaddr, ETHADDR_LEN);\n+\tmemcpy(eth_recv->src, priv->fake_host_hwaddr, ETHADDR_LEN);\n+\teth_recv->protlen = htons(PROT_ARP);\n \n-\tarp_recv = (void *)eth_recv + ETHER_HDR_SIZE;\n-\tarp_recv->ar_hrd = htons(ARP_ETHER);\n-\tarp_recv->ar_pro = htons(PROT_IP);\n-\tarp_recv->ar_hln = ARP_HLEN;\n-\tarp_recv->ar_pln = ARP_PLEN;\n-\tarp_recv->ar_op = htons(ARPOP_REQUEST);\n-\tmemcpy(&arp_recv->ar_sha, priv->fake_host_hwaddr, ARP_HLEN);\n-\tnet_write_ip(&arp_recv->ar_spa, priv->fake_host_ipaddr);\n-\tmemcpy(&arp_recv->ar_tha, net_null_ethaddr, ARP_HLEN);\n-\tnet_write_ip(&arp_recv->ar_tpa, net_ip);\n+\tarp_recv = (void *)eth_recv + ETHHDR_SIZE;\n+\tarp_recv->htype = htons(ARP_ETHER);\n+\tarp_recv->ptype = htons(PROT_IP);\n+\tarp_recv->hlen = ETHADDR_LEN;\n+\tarp_recv->plen = IP4_LEN;\n+\tarp_recv->op = htons(ARP_REQUEST);\n+\tarp_recvd = (struct arpdata *)(arp_recv + 1);\n+\tmemcpy(&arp_recvd->sha, priv->fake_host_hwaddr, ETHADDR_LEN);\n+\tarp_recvd->spa = priv->fake_host_ipaddr.s_addr;\n+\tmemcpy(&arp_recvd->tha, null_ethaddr, ETHADDR_LEN);\n+\tarp_recvd->tpa = net_ip.s_addr;\n \n \tpriv->recv_packet_length[priv->recv_packets] =\n-\t\tETHER_HDR_SIZE + ARP_HDR_SIZE;\n+\t\tETHHDR_SIZE + ARPHDR_SIZE + ARPDATA_SIZE;\n \t++priv->recv_packets;\n \n \treturn 0;\n@@ -212,9 +289,10 @@ int sandbox_eth_recv_arp_req(struct udevice *dev)\n int sandbox_eth_recv_ping_req(struct udevice *dev)\n {\n \tstruct eth_sandbox_priv *priv = dev_get_priv(dev);\n-\tstruct ethernet_hdr *eth_recv;\n-\tstruct ip_udp_hdr *ipr;\n-\tstruct icmp_hdr *icmpr;\n+\tstruct eth_pdata *pdata = dev_get_plat(dev);\n+\tstruct ethhdr *eth_recv;\n+\tstruct iphdr *ipr;\n+\tstruct icmphdr *icmpr;\n \n \t/* Don't allow the buffer to overrun */\n \tif (priv->recv_packets >= PKTBUFSRX)\n@@ -223,31 +301,31 @@ int sandbox_eth_recv_ping_req(struct udevice *dev)\n \t/* Formulate a fake ping */\n \teth_recv = (void *)priv->recv_packet_buffer[priv->recv_packets];\n \n-\tmemcpy(eth_recv->et_dest, net_ethaddr, ARP_HLEN);\n-\tmemcpy(eth_recv->et_src, priv->fake_host_hwaddr, ARP_HLEN);\n-\teth_recv->et_protlen = htons(PROT_IP);\n+\tmemcpy(eth_recv->dst, pdata->enetaddr, ETHADDR_LEN);\n+\tmemcpy(eth_recv->src, priv->fake_host_hwaddr, ETHADDR_LEN);\n+\teth_recv->protlen = htons(PROT_IP);\n \n-\tipr = (void *)eth_recv + ETHER_HDR_SIZE;\n-\tipr->ip_hl_v = 0x45;\n-\tipr->ip_len = htons(IP_ICMP_HDR_SIZE);\n-\tipr->ip_off = htons(IP_FLAGS_DFRAG);\n-\tipr->ip_p = IPPROTO_ICMP;\n-\tipr->ip_sum = 0;\n-\tnet_write_ip(&ipr->ip_src, priv->fake_host_ipaddr);\n-\tnet_write_ip(&ipr->ip_dst, net_ip);\n-\tipr->ip_sum = compute_ip_checksum(ipr, IP_HDR_SIZE);\n+\tipr = (void *)eth_recv + ETHHDR_SIZE;\n+\tipr->hl_v = 0x45;\n+\tipr->len = htons(IPHDR_SIZE + ICMPHDR_SIZE);\n+\tipr->off = htons(IP_FLAGS_DFRAG);\n+\tipr->prot = IPPROTO_ICMP;\n+\tipr->sum = 0;\n+\tipr->src = priv->fake_host_ipaddr.s_addr;\n+\tipr->dst = net_ip.s_addr;\n+\tipr->sum = compute_ip_checksum(ipr, IPHDR_SIZE);\n \n-\ticmpr = (struct icmp_hdr *)&ipr->udp_src;\n+\ticmpr = (struct icmphdr *)(ipr + 1);\n \n \ticmpr->type = ICMP_ECHO_REQUEST;\n \ticmpr->code = 0;\n \ticmpr->checksum = 0;\n-\ticmpr->un.echo.id = 0;\n-\ticmpr->un.echo.sequence = htons(1);\n-\ticmpr->checksum = compute_ip_checksum(icmpr, ICMP_HDR_SIZE);\n+\ticmpr->id = 0;\n+\ticmpr->sequence = htons(1);\n+\ticmpr->checksum = compute_ip_checksum(icmpr, ICMPHDR_SIZE);\n \n \tpriv->recv_packet_length[priv->recv_packets] =\n-\t\tETHER_HDR_SIZE + IP_ICMP_HDR_SIZE;\n+\t\tETHHDR_SIZE + IPHDR_SIZE + ICMPHDR_SIZE;\n \t++priv->recv_packets;\n \n \treturn 0;\n@@ -398,7 +476,7 @@ static int sb_eth_write_hwaddr(struct udevice *dev)\n \n \tdebug(\"eth_sandbox %s: Write HW ADDR - %pM\\n\", dev->name,\n \t pdata->enetaddr);\n-\tmemcpy(priv->fake_host_hwaddr, pdata->enetaddr, ARP_HLEN);\n+\tmemcpy(priv->fake_host_hwaddr, pdata->enetaddr, ETHADDR_LEN);\n \treturn 0;\n }\n \n", "prefixes": [ "v2", "05/11" ] }