From nobody Fri Sep 11 05:04:25 2026 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hh2XB3RPVz6rb12 for ; Fri, 11 Sep 2026 05:04:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hh2X96Zgbz4CMB for ; Fri, 11 Sep 2026 05:04:25 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789103065; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ppDied+eBh/OP10qmJmavBGIvLGFveULjt+XBOPGBDI=; b=ElI6BQMVV6YaX7HL6nBDxzNYmS4sWT3MAsnCFOp3wfbPPKV8bjLiHjAuM/hXhU2/EIRXND 2ILNdr8h2VCMbGhq1QqnuSKmoA5M0Rrlfz0P6hsfKXUWsNwF2taEadsOuyv1dbm0djm0Pq OqlkU/+EuDVt4m4uxvu51w/IixU8d3nWV+QjmxPiKMgyyeRjtkCSWDi7AGBwv2butaT0w7 9HKgEQAKkNeIc1Y39WjZzGkhglJj8LX1GGyVHGuAunI9Vwyp6P4r0jowtNQj2vBYrKJ0Vn cqkIf+c6OUPSrb12TnjI2GHJy0JsD25HzH3wuWwZEcoGodaEmO/EDPDgkcsfgw== ARC-Seal: i=1; a=rsa-sha256; d=freebsd.org; s=dkim; cv=none; t=1789103065; b=G7WgayY0h6uOlqTKvoYb2Uqc63X/T1upXBNmmB37flWJlnE7YOf8ml+4Skv8ETE/flNTae 0uc3im+CZwLIXfSAXMvPg3tU4eXZIcWwTVa/oOgCH/dxFaBn4Vx8YsObwDsfA9UHKEsQFf HybkwlAmai+VZAdFhEf/4ENRYk6U3AHnji1uXxPa3I1cp1vUeKzJU52uHxqFk2tG/eRZkL kEuWDqYgN6E01yXTQKWFdohURK/30flMfRu9NvYMRCa1ztaUoJ1LuUHJ9si9Eg58bjr4yb v1Tmhaq16UtGUm6Vba1ooE79SK1cE4qzv07HekY0/3c7POrcR2ys8Gl5u8awfg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1789103065; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=ppDied+eBh/OP10qmJmavBGIvLGFveULjt+XBOPGBDI=; b=x5kv7vOKs4J5BcLlJg+VyMHptDD1QfK50kowFW21Ygvm2jx2yc3Q8c+jwFwn7lvg8qYFeG h9YOccnpgcisSOmO5QhfRy3xIHhbd6jS+B4+OH3H6eQnQ+/9L4EqOfiovLIosLQ+rTU2sV hTL9TYDNLL1PRF+XTAIlkv8hxYsUPIbr48ZmA7QCj1pHTTY9/JM2H37dGujXXiXDOslfkT +Sw3CQayERFstOqfKh2XJYzBbqSKJk36R9zQBzLRXk4vkTP5xCXVM5IC5Y329SHmBWGMmc MUqwEm/OQXAj/wHKe7p4p+tMBBk8QW1YCeZycHXzR0q+q9/AJ9B1t/ehCAYkeg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hh2X956QYz10WJ for ; Fri, 11 Sep 2026 05:04:25 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b9f4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 11 Sep 2026 05:04:25 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Warner Losh Subject: git: a098fd021e51 - main - loader: request DHCP initmd option List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: imp X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a098fd021e517df930d8df0ac3a808d63c24252b Auto-Submitted: auto-generated Date: Fri, 11 Sep 2026 05:04:25 +0000 Message-Id: <6aa38bd9.3b9f4.629e7b@gitrepo.freebsd.org> The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=a098fd021e517df930d8df0ac3a808d63c24252b commit a098fd021e517df930d8df0ac3a808d63c24252b Author: Warner Losh AuthorDate: 2026-09-11 04:13:57 +0000 Commit: Warner Losh CommitDate: 2026-09-11 04:15:28 +0000 loader: request DHCP initmd option Request FreeBSD RFC 3925 PEM 2238 DHCP 125 option. Use suboption 1 to specify a ramdisk image to load and use to load the kernel and as the root file system. Differential Revision: https://reviews.freebsd.org/D59428 Sponsored by: Netflix --- stand/libsa/bootp.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++- stand/libsa/bootp.h | 5 +++++ 2 files changed, 63 insertions(+), 1 deletion(-) diff --git a/stand/libsa/bootp.c b/stand/libsa/bootp.c index 6008f0bf8f11..f708006169d0 100644 --- a/stand/libsa/bootp.c +++ b/stand/libsa/bootp.c @@ -69,6 +69,7 @@ static char vm_cmu[4] = VM_CMU; static ssize_t bootpsend(struct iodesc *, void *, size_t); static ssize_t bootprecv(struct iodesc *, void **, void **, time_t, void *); static int vend_rfc1048(u_char *, u_int); +static void vend_vivso(const u_char *, size_t); #ifdef BOOTP_VEND_CMU static void vend_cmu(u_char *); #endif @@ -122,6 +123,15 @@ bootp_fill_request(unsigned char *bp_vend) bcopy("FreeBSD", &bp_vend[off], 7); off += 7; + /* Vendor-Identifying Vendor Class, RFC 3925. */ + bp_vend[off++] = TAG_VI_VENDOR_CLASS; + bp_vend[off++] = 12; + be32enc(&bp_vend[off], FREEBSD_ENTERPRISE_NUMBER); + off += 4; + bp_vend[off++] = 7; + bcopy("FreeBSD", &bp_vend[off], 7); + off += 7; + /* * Client architecture (RFC 4578). Value is 2 bytes big-endian. * Omit entirely for loaders that don't have a spec-defined value. @@ -146,7 +156,7 @@ bootp_fill_request(unsigned char *bp_vend) bp_vend[off++] = 1472 & 0xff; bp_vend[off++] = TAG_PARAM_REQ; - bp_vend[off++] = 7; + bp_vend[off++] = 8; bp_vend[off++] = TAG_ROOTPATH; bp_vend[off++] = TAG_HOSTNAME; bp_vend[off++] = TAG_SWAPSERVER; @@ -154,6 +164,7 @@ bootp_fill_request(unsigned char *bp_vend) bp_vend[off++] = TAG_SUBNET_MASK; bp_vend[off++] = TAG_INTF_MTU; bp_vend[off++] = TAG_SERVERID; + bp_vend[off++] = TAG_VI_VENDOR_OPTS; bp_vend[off] = TAG_END; } @@ -497,6 +508,8 @@ vend_rfc1048(u_char *cp, u_int len) if (intf_mtu <= 0) intf_mtu = be16dec(cp); } + if (tag == TAG_VI_VENDOR_OPTS) + vend_vivso(cp, size); #ifdef SUPPORT_DHCP if (tag == TAG_DHCP_MSGTYPE) { if(*cp != expected_dhcpmsgtype) @@ -513,6 +526,49 @@ vend_rfc1048(u_char *cp, u_int len) return(0); } +static void +vend_freebsd(const u_char *cp, size_t len) +{ + char value[256]; + size_t size; + u_char tag; + + while (len >= 2) { + tag = *cp++; + size = *cp++; + len -= 2; + if (size > len) + return; + if (tag == FREEBSD_VI_INITMD && size < sizeof(value)) { + bcopy(cp, value, size); + value[size] = '\0'; + setenv("dhcp.initmd", value, 0); + } + cp += size; + len -= size; + } +} + +static void +vend_vivso(const u_char *cp, size_t len) +{ + uint32_t enterprise; + size_t size; + + while (len >= 5) { + enterprise = be32dec(cp); + cp += 4; + size = *cp++; + len -= 5; + if (size > len) + return; + if (enterprise == FREEBSD_ENTERPRISE_NUMBER) + vend_freebsd(cp, size); + cp += size; + len -= size; + } +} + #ifdef BOOTP_VEND_CMU static void vend_cmu(u_char *cp) @@ -687,6 +743,7 @@ static struct dhcp_opt dhcp_opt[] = { {86, __TXT, "nds-tree-name"}, {87, __TXT, "nds-context"}, {210, __TXT, "authenticate"}, + {125, __NONE, "vendor-identifying-vendor-options"}, /* use the following entries for arbitrary variables */ {246, __ILIST, ""}, diff --git a/stand/libsa/bootp.h b/stand/libsa/bootp.h index 577449a79292..d5f65d0c6981 100644 --- a/stand/libsa/bootp.h +++ b/stand/libsa/bootp.h @@ -108,6 +108,11 @@ struct bootp { #define TAG_CLIENTID ((unsigned char) 61) #define TAG_USER_CLASS ((unsigned char) 77) #define TAG_CLIENT_ARCH ((unsigned char) 93) /* RFC 4578 */ +#define TAG_VI_VENDOR_CLASS ((unsigned char) 124) /* RFC 3925 */ +#define TAG_VI_VENDOR_OPTS ((unsigned char) 125) /* RFC 3925 */ + +#define FREEBSD_ENTERPRISE_NUMBER 2238 +#define FREEBSD_VI_INITMD 1 #endif #define TAG_END ((unsigned char) 255)