From 130cfcf3fcb188ad5afe3e3187701f932434616b Mon Sep 17 00:00:00 2001 From: Dave Cottlehuber Date: Fri, 22 Nov 2019 20:22:16 +0000 Subject: [PATCH] dhclient: support option 114, default-url ascii This will enable further automation of HTTP UEFI boot loader support by providing a specific option for providing the boot URL to FreeBSD. Documented in: https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml https://kb.isc.org/docs/isc-dhcp-44-manual-pages-dhcp-options https://tools.ietf.org/html/rfc3679 Approved by: emaste MFC after: 2 weeks Sponsored by: SkunkWerks, GmbH Differential Revision: https://reviews.freebsd.org/D22475 --- sbin/dhclient/dhclient.c | 1 + sbin/dhclient/dhcp-options.5 | 5 ++++- sbin/dhclient/dhcp.h | 1 + sbin/dhclient/tables.c | 5 +++-- 4 files changed, 9 insertions(+), 3 deletions(-) diff --git a/sbin/dhclient/dhclient.c b/sbin/dhclient/dhclient.c index 1d013ed57d7a..362cd6cb4c11 100644 --- a/sbin/dhclient/dhclient.c +++ b/sbin/dhclient/dhclient.c @@ -2601,6 +2601,7 @@ check_option(struct client_lease *l, int option) case DHO_DHCP_CLIENT_IDENTIFIER: case DHO_BOOTFILE_NAME: case DHO_DHCP_USER_CLASS_ID: + case DHO_URL: case DHO_END: return (1); case DHO_CLASSLESS_ROUTES: diff --git a/sbin/dhclient/dhcp-options.5 b/sbin/dhclient/dhcp-options.5 index 4b65fa723083..9fe513636ec2 100644 --- a/sbin/dhclient/dhcp-options.5 +++ b/sbin/dhclient/dhcp-options.5 @@ -587,6 +587,9 @@ Servers should be listed in order of preference. The StreetTalk Directory Assistance (STDA) server option specifies a list of STDA servers available to the client. Servers should be listed in order of preference. +.It Ic option url Ar string ; +This option specifies the URL that the client may use when using UEFI +boot from a HTTP server. .El .Sh SEE ALSO .Xr dhclient.conf 5 , @@ -595,7 +598,7 @@ Servers should be listed in order of preference. .Xr dhclient 8 , .Xr dhcpd 8 .Rs -.%R "RFC 2131, RFC 2132" +.%R "RFC 2131, RFC 2132, RFC 3769" .Re .Sh AUTHORS .An -nosplit diff --git a/sbin/dhclient/dhcp.h b/sbin/dhclient/dhcp.h index e4dcfb93271e..9183a9c82aec 100644 --- a/sbin/dhclient/dhcp.h +++ b/sbin/dhclient/dhcp.h @@ -171,6 +171,7 @@ struct dhcp_packet { #define DHO_STREETTALK_SERVER 75 #define DHO_STREETTALK_DA_SERVER 76 #define DHO_DHCP_USER_CLASS_ID 77 +#define DHO_URL 114 #define DHO_DOMAIN_SEARCH 119 #define DHO_CLASSLESS_ROUTES 121 #define DHO_END 255 diff --git a/sbin/dhclient/tables.c b/sbin/dhclient/tables.c index 8f3bf23dfcd0..9225c4fe2051 100644 --- a/sbin/dhclient/tables.c +++ b/sbin/dhclient/tables.c @@ -181,7 +181,7 @@ struct option dhcp_options[256] = { { "option-111", "X", &dhcp_universe, 111 }, { "option-112", "X", &dhcp_universe, 112 }, { "option-113", "X", &dhcp_universe, 113 }, - { "option-114", "X", &dhcp_universe, 114 }, + { "url", "t", &dhcp_universe, 114 }, { "option-115", "X", &dhcp_universe, 115 }, { "option-116", "X", &dhcp_universe, 116 }, { "option-117", "X", &dhcp_universe, 117 }, @@ -404,11 +404,12 @@ unsigned char dhcp_option_default_priority_list[] = { DHO_STREETTALK_DA_SERVER, DHO_DHCP_USER_CLASS_ID, DHO_DOMAIN_SEARCH, + DHO_URL, /* Presently-undefined options... */ 62, 63, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, - 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, + 106, 107, 108, 109, 110, 111, 112, 113, 115, 116, 117, 118, 120, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,