udhcpc6: add DHCPv6 boot options
authorSamuel Mendoza-Jonas <sam@mendozajonas.com>
Mon, 14 May 2018 04:29:12 +0000 (14:29 +1000)
committerDenys Vlasenko <vda.linux@googlemail.com>
Mon, 14 May 2018 08:46:00 +0000 (10:46 +0200)
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>
networking/udhcp/d6_common.h
networking/udhcp/d6_dhcpc.c

index e9c0397ae474ac05633071bb24ed650011881abd..d0506e2bbd7c4c22ad38275d2a7e0506881ada9d 100644 (file)
@@ -128,6 +128,9 @@ struct d6_option {
 #define D6_OPT_TZ_POSIX      41
 #define D6_OPT_TZ_NAME       42
 
+#define D6_OPT_BOOT_URL      59
+#define D6_OPT_BOOT_PARAM    60
+
 /*** Other shared functions ***/
 
 struct client6_data_t {
index fa1568b5f23c26e9a367f67d442f548fab8c1dbd..f837bd54993a6de730b7c3be50d61d3d5f0b96b0 100644 (file)
 //config:      help
 //config:      You can request POSIX timezone with "-O tz" and timezone name
 //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))
 
@@ -70,6 +78,10 @@ static const struct dhcp_optflag d6_optflags[] = {
 #if ENABLE_FEATURE_UDHCPC6_RFC4833
        { OPTION_STRING,                                D6_OPT_TZ_POSIX },
        { 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
        { 0, 0 }
 };
@@ -86,6 +98,11 @@ static const char d6_option_strings[] ALIGN1 =
        "tz" "\0"       /* D6_OPT_TZ_POSIX */
        "timezone" "\0" /* D6_OPT_TZ_NAME */
 #endif
+#if ENABLE_FEATURE_UDHCPC6_RFC5970
+       "bootfile_url" "\0" /* D6_OPT_BOOT_URL */
+       "bootfile_param" "\0" /* D6_OPT_BOOT_PARAM */
+#endif
+
        "\0";
 
 #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);
                        break;
 #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];
                option += 4 + option[3];