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>
This commit is contained in:
Samuel Mendoza-Jonas 2018-05-14 14:29:12 +10:00 committed by Denys Vlasenko
parent bcdec1a8b8
commit 23cbd7d5bb
2 changed files with 28 additions and 0 deletions

View File

@ -128,6 +128,9 @@ struct d6_option {
#define D6_OPT_TZ_POSIX 41 #define D6_OPT_TZ_POSIX 41
#define D6_OPT_TZ_NAME 42 #define D6_OPT_TZ_NAME 42
#define D6_OPT_BOOT_URL 59
#define D6_OPT_BOOT_PARAM 60
/*** Other shared functions ***/ /*** Other shared functions ***/
struct client6_data_t { struct client6_data_t {

View File

@ -38,6 +38,14 @@
//config: help //config: help
//config: You can request POSIX timezone with "-O tz" and timezone name //config: You can request POSIX timezone with "-O tz" and timezone name
//config: with "-O timezone". //config: with "-O timezone".
//config:
//config:config FEATURE_UDHCPC6_RFC5970
//config: bool "Support RFC 5970 (Network Boot)"
//config: default y
//config: depends on UDHCPC6
//config: help
//config: You can request bootfile-url with "-O bootfile_url" and
//config: bootfile-params with "-O bootfile_params".
//applet:IF_UDHCPC6(APPLET(udhcpc6, BB_DIR_USR_BIN, BB_SUID_DROP)) //applet:IF_UDHCPC6(APPLET(udhcpc6, BB_DIR_USR_BIN, BB_SUID_DROP))
@ -70,6 +78,10 @@ static const struct dhcp_optflag d6_optflags[] = {
#if ENABLE_FEATURE_UDHCPC6_RFC4833 #if ENABLE_FEATURE_UDHCPC6_RFC4833
{ OPTION_STRING, D6_OPT_TZ_POSIX }, { OPTION_STRING, D6_OPT_TZ_POSIX },
{ OPTION_STRING, D6_OPT_TZ_NAME }, { OPTION_STRING, D6_OPT_TZ_NAME },
#endif
#if ENABLE_FEATURE_UDHCPC6_RFC5970
{ OPTION_STRING, D6_OPT_BOOT_URL },
{ OPTION_STRING, D6_OPT_BOOT_PARAM },
#endif #endif
{ 0, 0 } { 0, 0 }
}; };
@ -86,6 +98,11 @@ static const char d6_option_strings[] ALIGN1 =
"tz" "\0" /* D6_OPT_TZ_POSIX */ "tz" "\0" /* D6_OPT_TZ_POSIX */
"timezone" "\0" /* D6_OPT_TZ_NAME */ "timezone" "\0" /* D6_OPT_TZ_NAME */
#endif #endif
#if ENABLE_FEATURE_UDHCPC6_RFC5970
"bootfile_url" "\0" /* D6_OPT_BOOT_URL */
"bootfile_param" "\0" /* D6_OPT_BOOT_PARAM */
#endif
"\0"; "\0";
#if ENABLE_LONG_OPTS #if ENABLE_LONG_OPTS
@ -382,6 +399,14 @@ static void option_to_env(uint8_t *option, uint8_t *option_end)
*new_env() = xasprintf("tz_name=%.*s", (int)option[3], (char*)option + 4); *new_env() = xasprintf("tz_name=%.*s", (int)option[3], (char*)option + 4);
break; break;
#endif #endif
case D6_OPT_BOOT_URL:
case D6_OPT_BOOT_PARAM:
{
char *tmp = string_option_to_env(option, option_end);
if (tmp)
*new_env() = tmp;
break;
}
} }
len_m4 -= 4 + option[3]; len_m4 -= 4 + option[3];
option += 4 + option[3]; option += 4 + option[3];