From: seanedmond@linux.microsoft.com
To: u-boot@lists.denx.de
Cc: joe.hershberger@ni.com, rfried.dev@gmail.com, sjg@chromium.org,
xypron.glpk@gmx.de, ilias.apalodimas@linaro.org
Subject: [PATCH v2 1/3] net: Get pxe config file from dhcp option 209
Date: Mon, 23 Oct 2023 17:21:57 -0700 [thread overview]
Message-ID: <20231024002159.74477-2-seanedmond@linux.microsoft.com> (raw)
In-Reply-To: <20231024002159.74477-1-seanedmond@linux.microsoft.com>
From: Sean Edmond <seanedmond@microsoft.com>
Allow dhcp server pass pxe config file full path by using option 209
Signed-off-by: Sean Edmond <seanedmond@microsoft.com>
---
cmd/Kconfig | 4 ++++
cmd/pxe.c | 10 ++++++++++
net/bootp.c | 21 +++++++++++++++++++++
3 files changed, 35 insertions(+)
diff --git a/cmd/Kconfig b/cmd/Kconfig
index 5bc0a92d57..adbb1a6187 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -1826,6 +1826,10 @@ config BOOTP_PXE_CLIENTARCH
default 0x15 if ARM
default 0x0 if X86
+config BOOTP_PXE_DHCP_OPTION
+ bool "Request & store 'pxe_configfile' from BOOTP/DHCP server"
+ depends on BOOTP_PXE
+
config BOOTP_VCI_STRING
string
depends on CMD_BOOTP
diff --git a/cmd/pxe.c b/cmd/pxe.c
index 704589702f..9404f44518 100644
--- a/cmd/pxe.c
+++ b/cmd/pxe.c
@@ -65,6 +65,8 @@ static int pxe_dhcp_option_path(struct pxe_context *ctx, unsigned long pxefile_a
int ret = get_pxe_file(ctx, pxelinux_configfile, pxefile_addr_r);
free(pxelinux_configfile);
+ /* set to NULL to avoid double-free if DHCP is tried again */
+ pxelinux_configfile = NULL;
return ret;
}
@@ -141,6 +143,14 @@ int pxe_get(ulong pxefile_addr_r, char **bootdirp, ulong *sizep, bool use_ipv6)
env_get("bootfile"), use_ipv6))
return -ENOMEM;
+ if (IS_ENABLED(CONFIG_BOOTP_PXE_DHCP_OPTION) &&
+ pxelinux_configfile && !use_ipv6) {
+ if (pxe_dhcp_option_path(&ctx, pxefile_addr_r) > 0)
+ goto done;
+
+ goto error_exit;
+ }
+
if (IS_ENABLED(CONFIG_DHCP6_PXE_DHCP_OPTION) &&
pxelinux_configfile && use_ipv6) {
if (pxe_dhcp_option_path(&ctx, pxefile_addr_r) > 0)
diff --git a/net/bootp.c b/net/bootp.c
index 7b0f45e18a..6800290963 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -26,6 +26,7 @@
#ifdef CONFIG_BOOTP_RANDOM_DELAY
#include "net_rand.h"
#endif
+#include <malloc.h>
#define BOOTP_VENDOR_MAGIC 0x63825363 /* RFC1048 Magic Cookie */
@@ -601,6 +602,10 @@ static int dhcp_extended(u8 *e, int message_type, struct in_addr server_ip,
*e++ = 42;
*cnt += 1;
#endif
+ if (IS_ENABLED(CONFIG_BOOTP_PXE_DHCP_OPTION)) {
+ *e++ = 209; /* PXELINUX Config File */
+ *cnt += 1;
+ }
/* no options, so back up to avoid sending an empty request list */
if (*cnt == 0)
e -= 2;
@@ -909,6 +914,22 @@ static void dhcp_process_options(uchar *popt, uchar *end)
net_boot_file_name[size] = 0;
}
break;
+ case 209: /* PXELINUX Config File */
+ if (IS_ENABLED(CONFIG_BOOTP_PXE_DHCP_OPTION)) {
+ /* In case it has already been allocated when get DHCP Offer packet,
+ * free first to avoid memory leak.
+ */
+ if (pxelinux_configfile)
+ free(pxelinux_configfile);
+
+ pxelinux_configfile = (char *)malloc((oplen + 1) * sizeof(char));
+
+ if (pxelinux_configfile)
+ strlcpy(pxelinux_configfile, popt + 2, oplen + 1);
+ else
+ printf("Error: Failed to allocate pxelinux_configfile\n");
+ }
+ break;
default:
#if defined(CONFIG_BOOTP_VENDOREX)
if (dhcp_vendorex_proc(popt))
--
2.40.0
next prev parent reply other threads:[~2023-10-24 0:22 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-24 0:21 [PATCH v2 0/3] BOOTP/DHCPv4 enhancements seanedmond
2023-10-24 0:21 ` seanedmond [this message]
2023-10-24 5:54 ` [PATCH v2 1/3] net: Get pxe config file from dhcp option 209 Heinrich Schuchardt
2023-10-24 13:52 ` Peter Robinson
2023-11-04 1:03 ` Sean Edmond
2023-11-04 7:53 ` Heinrich Schuchardt
2023-11-07 23:50 ` Sean Edmond
2023-11-08 0:23 ` Tom Rini
2023-11-08 12:24 ` Peter Robinson
2023-11-09 21:04 ` Tom Rini
2023-11-09 21:35 ` Heinrich Schuchardt
2023-11-09 21:40 ` Tom Rini
2023-10-24 0:21 ` [PATCH v2 2/3] net: bootp: BOOTP/DHCPv4 retransmission improvements seanedmond
2023-10-24 6:06 ` Heinrich Schuchardt
2023-10-24 16:42 ` Sean Edmond
2023-11-04 1:04 ` Sean Edmond
2023-11-04 7:48 ` Heinrich Schuchardt
2023-10-24 0:21 ` [PATCH v2 3/3] net: bootp: add config option BOOTP_RANDOM_XID seanedmond
2023-10-24 6:19 ` Heinrich Schuchardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231024002159.74477-2-seanedmond@linux.microsoft.com \
--to=seanedmond@linux.microsoft.com \
--cc=ilias.apalodimas@linaro.org \
--cc=joe.hershberger@ni.com \
--cc=rfried.dev@gmail.com \
--cc=sjg@chromium.org \
--cc=u-boot@lists.denx.de \
--cc=xypron.glpk@gmx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.