diff options
author | Samuel Mendoza-Jonas <sam@mendozajonas.com> | 2018-05-14 14:29:12 +1000 |
---|---|---|
committer | Denys Vlasenko <vda.linux@googlemail.com> | 2018-05-14 10:46:00 +0200 |
commit | 23cbd7d5bbbf8f5fb65d1ff3a92323f2bb300f63 (patch) | |
tree | 67e6d49b0ef4870192cb63837e248ba666ff452b | |
parent | bcdec1a8b8bf9fb3ea4de96d153b203e12e035fd (diff) | |
download | busybox-w32-23cbd7d5bbbf8f5fb65d1ff3a92323f2bb300f63.tar.gz busybox-w32-23cbd7d5bbbf8f5fb65d1ff3a92323f2bb300f63.tar.bz2 busybox-w32-23cbd7d5bbbf8f5fb65d1ff3a92323f2bb300f63.zip |
udhcpc6: add DHCPv6 boot options
Add support for 'bootfile-url' and 'bootfile-params' as defined by
RFC5970 "DHCPv6 Options for Network Boot".
Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r-- | networking/udhcp/d6_common.h | 3 | ||||
-rw-r--r-- | networking/udhcp/d6_dhcpc.c | 25 |
2 files changed, 28 insertions, 0 deletions
diff --git a/networking/udhcp/d6_common.h b/networking/udhcp/d6_common.h index e9c0397ae..d0506e2bb 100644 --- a/networking/udhcp/d6_common.h +++ b/networking/udhcp/d6_common.h | |||
@@ -128,6 +128,9 @@ struct d6_option { | |||
128 | #define D6_OPT_TZ_POSIX 41 | 128 | #define D6_OPT_TZ_POSIX 41 |
129 | #define D6_OPT_TZ_NAME 42 | 129 | #define D6_OPT_TZ_NAME 42 |
130 | 130 | ||
131 | #define D6_OPT_BOOT_URL 59 | ||
132 | #define D6_OPT_BOOT_PARAM 60 | ||
133 | |||
131 | /*** Other shared functions ***/ | 134 | /*** Other shared functions ***/ |
132 | 135 | ||
133 | struct client6_data_t { | 136 | struct client6_data_t { |
diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c index fa1568b5f..f837bd549 100644 --- a/networking/udhcp/d6_dhcpc.c +++ b/networking/udhcp/d6_dhcpc.c | |||
@@ -38,6 +38,14 @@ | |||
38 | //config: help | 38 | //config: help |
39 | //config: You can request POSIX timezone with "-O tz" and timezone name | 39 | //config: You can request POSIX timezone with "-O tz" and timezone name |
40 | //config: with "-O timezone". | 40 | //config: with "-O timezone". |
41 | //config: | ||
42 | //config:config FEATURE_UDHCPC6_RFC5970 | ||
43 | //config: bool "Support RFC 5970 (Network Boot)" | ||
44 | //config: default y | ||
45 | //config: depends on UDHCPC6 | ||
46 | //config: help | ||
47 | //config: You can request bootfile-url with "-O bootfile_url" and | ||
48 | //config: bootfile-params with "-O bootfile_params". | ||
41 | 49 | ||
42 | //applet:IF_UDHCPC6(APPLET(udhcpc6, BB_DIR_USR_BIN, BB_SUID_DROP)) | 50 | //applet:IF_UDHCPC6(APPLET(udhcpc6, BB_DIR_USR_BIN, BB_SUID_DROP)) |
43 | 51 | ||
@@ -71,6 +79,10 @@ static const struct dhcp_optflag d6_optflags[] = { | |||
71 | { OPTION_STRING, D6_OPT_TZ_POSIX }, | 79 | { OPTION_STRING, D6_OPT_TZ_POSIX }, |
72 | { OPTION_STRING, D6_OPT_TZ_NAME }, | 80 | { OPTION_STRING, D6_OPT_TZ_NAME }, |
73 | #endif | 81 | #endif |
82 | #if ENABLE_FEATURE_UDHCPC6_RFC5970 | ||
83 | { OPTION_STRING, D6_OPT_BOOT_URL }, | ||
84 | { OPTION_STRING, D6_OPT_BOOT_PARAM }, | ||
85 | #endif | ||
74 | { 0, 0 } | 86 | { 0, 0 } |
75 | }; | 87 | }; |
76 | /* Must match d6_optflags[] order */ | 88 | /* Must match d6_optflags[] order */ |
@@ -86,6 +98,11 @@ static const char d6_option_strings[] ALIGN1 = | |||
86 | "tz" "\0" /* D6_OPT_TZ_POSIX */ | 98 | "tz" "\0" /* D6_OPT_TZ_POSIX */ |
87 | "timezone" "\0" /* D6_OPT_TZ_NAME */ | 99 | "timezone" "\0" /* D6_OPT_TZ_NAME */ |
88 | #endif | 100 | #endif |
101 | #if ENABLE_FEATURE_UDHCPC6_RFC5970 | ||
102 | "bootfile_url" "\0" /* D6_OPT_BOOT_URL */ | ||
103 | "bootfile_param" "\0" /* D6_OPT_BOOT_PARAM */ | ||
104 | #endif | ||
105 | |||
89 | "\0"; | 106 | "\0"; |
90 | 107 | ||
91 | #if ENABLE_LONG_OPTS | 108 | #if ENABLE_LONG_OPTS |
@@ -382,6 +399,14 @@ static void option_to_env(uint8_t *option, uint8_t *option_end) | |||
382 | *new_env() = xasprintf("tz_name=%.*s", (int)option[3], (char*)option + 4); | 399 | *new_env() = xasprintf("tz_name=%.*s", (int)option[3], (char*)option + 4); |
383 | break; | 400 | break; |
384 | #endif | 401 | #endif |
402 | case D6_OPT_BOOT_URL: | ||
403 | case D6_OPT_BOOT_PARAM: | ||
404 | { | ||
405 | char *tmp = string_option_to_env(option, option_end); | ||
406 | if (tmp) | ||
407 | *new_env() = tmp; | ||
408 | break; | ||
409 | } | ||
385 | } | 410 | } |
386 | len_m4 -= 4 + option[3]; | 411 | len_m4 -= 4 + option[3]; |
387 | option += 4 + option[3]; | 412 | option += 4 + option[3]; |