diff --git a/stand/common/dev_net.c b/stand/common/dev_net.c index 897b09c648eb..aecb5bcde81c 100644 --- a/stand/common/dev_net.c +++ b/stand/common/dev_net.c @@ -248,6 +248,7 @@ static int net_getparams(int sock) { char buf[MAXHOSTNAMELEN]; + const char *val; n_long rootaddr, smask; #ifdef SUPPORT_BOOTP @@ -306,6 +307,8 @@ net_getparams(int sock) return (EIO); } exit: + if ((val = getenv("dhcp.root-path")) != NULL) + strlcpy(rootpath, val, sizeof(rootpath)); if ((rootaddr = net_parse_rootpath()) != htonl(INADDR_NONE)) rootip.s_addr = rootaddr; diff --git a/stand/efi/loader/main.c b/stand/efi/loader/main.c index fa4647101d62..bfb221ee80f5 100644 --- a/stand/efi/loader/main.c +++ b/stand/efi/loader/main.c @@ -1382,6 +1382,12 @@ main(int argc, CHAR16 *argv[]) devinit(); + /* + * Parse command line arguments before any operation that may configure + * the network so DHCP overrides are available on the first attempt. + */ + howto = parse_args(argc, argv); + /* * If we didn't find a ipxe image, and we're netbooting, try to * download an initmd that the dhcp server tells us about. @@ -1394,7 +1400,6 @@ main(int argc, CHAR16 *argv[]) * args (eg -h) or via the UEFI ConOut variable. */ has_kbd = has_keyboard(); - howto = parse_args(argc, argv); if (!has_kbd && (howto & RB_PROBE)) howto |= RB_SERIAL | RB_MULTIPLE; howto &= ~RB_PROBE; diff --git a/stand/libsa/bootp.c b/stand/libsa/bootp.c index f708006169d0..8cbcede7bb0e 100644 --- a/stand/libsa/bootp.c +++ b/stand/libsa/bootp.c @@ -474,9 +474,7 @@ vend_rfc1048(u_char *cp, u_int len) bcopy(cp, &rootip.s_addr, sizeof(rootip.s_addr)); } if (tag == TAG_ROOTPATH) { - if ((val = getenv("dhcp.root-path")) == NULL) - val = (const char *)cp; - strlcpy(rootpath, val, sizeof(rootpath)); + strlcpy(rootpath, (const char *)cp, sizeof(rootpath)); } if (tag == TAG_HOSTNAME) { if ((val = getenv("dhcp.host-name")) == NULL)