Gentle ping...
Please check if the community accepts this submission.

> -----邮件原件-----
> 发件人: zhousiqi (A)
> 发送时间: 2023年7月3日 11:23
> 收件人: 'busybox@busybox.net' <busybox@busybox.net>
> 主题: Re: [Patch] Enable udhcpc6 in the busybox to obtain the SNTP server.
> 
> Gentle ping... Is this function easy to use and is the community willing to 
> accept
> it?
> In addition, can the community provide a default6.script for udhcpc6?
> ------------------------------------------------------
> 
> Dear BusyBox maintainers,
> 
> I am writing to propose a patch for udhcpc6 that adds support for retrieving
> SNTP (Simple Network Time Protocol) servers. Currently, udhcpc6 does not
> support this function, which limits its usefulness in certain environments.
> My patch extends the existing -O option in udhcpc6 to include a new option, -O
> sntpsrv. When the -O sntpsrv option is used, udhcpc6 will request SNTP servers
> from the DHCPv6 server, and will configure the system's time accordingly.
> I have tested this patch on my own system, and have verified that it works as
> expected. I believe that this patch will be useful to other users who need to
> retrieve SNTP servers using udhcpc6.
> Thank you for your time and consideration.
> 
>                               Best regards,
> 
>                               Zhou
> 
> From 57e404b2a227e40fffe4d56045885939fa0e00d6 Mon Sep 17 00:00:00
> 2001
> From: Zhou Siqi <zhousi...@huawei.com>
> Date: Tue, 6 Jun 2023 15:46:36 +0800
> Subject: [PATCH] The sntp server helps synchronize clock signals between the
> client and the server. Most DHCP software in the industry supports this
> function.Currently, udhcpc6 does not support the function of obtaining the
> SNTP server.This modification enables udhcpc6 to support this function.
> 
> Signed-off-by: Zhou Siqi <zhousi...@huawei.com>
> ---
>  examples/var_service/dhcp_if/convert2sntpconf | 30 +++++++++++++
>  networking/udhcp/Config.src                   |  8 ++++
>  networking/udhcp/d6_common.h                  |  3 ++
>  networking/udhcp/d6_dhcpc.c                   | 61
> +++++++++++++++++----------
>  4 files changed, 79 insertions(+), 23 deletions(-)  create mode 100644
> examples/var_service/dhcp_if/convert2sntpconf
> 
> diff --git a/examples/var_service/dhcp_if/convert2sntpconf
> b/examples/var_service/dhcp_if/convert2sntpconf
> new file mode 100644
> index 0000000..c23e914
> --- /dev/null
> +++ b/examples/var_service/dhcp_if/convert2sntpconf
> @@ -0,0 +1,30 @@
> +#!/bin/sh
> +# This example shows how to obtain the SNTP server information from the
> configuration information obtained by the client.
> +# convert:
> +# (Client configuration information)
> +# dhcptype=5
> +# lease=97200
> +# interface=eth0
> +# ip=2000:192:168::64:84/64
> +# mask=64
> +# dns=fec0:70:4000::22:33:40 fec0:70:4000::22:33:41
> +fec0:70:4000::22:33:42 # domain=lab.example.com example.com #
> +sntpsrv=fec0:0:0:23::43 fec0:0:0:23::44
> +
> +# into:
> +
> +#let cfg=cfg+1
> +#sntpip[$cfg]=...
> +
> +exec >/dev/null
> +exec 2>&1
> +
> +test "$interface" || exit 1
> +test "$ip" || exit 1
> +
> +{
> +for n in $sntpsrv; do
> +     echo "let cfg=cfg+1"
> +     echo "sntpip[\$cfg]='$n'"
> +done
> +} >"$1"
> diff --git a/networking/udhcp/Config.src b/networking/udhcp/Config.src index
> 8c8c11c..574c33c 100644
> --- a/networking/udhcp/Config.src
> +++ b/networking/udhcp/Config.src
> @@ -171,3 +171,11 @@ config FEATURE_UDHCP_8021Q
>       help
>       If selected, both client and server will support passing of VLAN
>       ID and priority via options 132 and 133 as per 802.1Q.
> +
> +config FEATURE_UDHCPC6_RFC4075
> +     bool "Support udhcpc6 obtain the SNTP servers."
> +     default y
> +     depends on UDHCPC6
> +     help
> +     If selected, the IPv6 client udhcpc6 can obtain the SNTP servers.
> +
> diff --git a/networking/udhcp/d6_common.h
> b/networking/udhcp/d6_common.h index 9dfde77..49e1b5b 100644
> --- a/networking/udhcp/d6_common.h
> +++ b/networking/udhcp/d6_common.h
> @@ -87,6 +87,9 @@ struct d6_option {
>  #define D6_OPT_IA_PD         25
>  #define D6_OPT_IAPREFIX      26
> 
> +/* Adapted from dhcp */
> +#define D6_OPT_SNTP_SERVERS  31
> +
>  /* RFC 4704 "The DHCPv6 Client FQDN Option"
>   * uint16    option-code     OPTION_CLIENT_FQDN (39)
>   * uint16    option-len      1 + length of domain name
> diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c
> index 8d11a75..8707da1 100644
> --- a/networking/udhcp/d6_dhcpc.c
> +++ b/networking/udhcp/d6_dhcpc.c
> @@ -81,6 +81,9 @@ static const struct dhcp_optflag d6_optflags[] = {
>       { OPTION_STRING,
> D6_OPT_BOOT_URL },
>       { OPTION_STRING,
> D6_OPT_BOOT_PARAM },
>  #endif
> +#if ENABLE_FEATURE_UDHCPC6_RFC4075
> +     { OPTION_6RD | OPTION_LIST      | OPTION_REQ,
> D6_OPT_SNTP_SERVERS },
> +#endif
>       { OPTION_STRING,                                0xd1 }, /*
> DHCP_PXE_CONF_FILE */
>       { OPTION_STRING,                                0xd2 }, /*
> DHCP_PXE_PATH_PREFIX */
>       { 0, 0 }
> @@ -102,6 +105,9 @@ static const char d6_option_strings[] ALIGN1 =
>       "bootfile_url" "\0" /* D6_OPT_BOOT_URL */
>       "bootfile_param" "\0" /* D6_OPT_BOOT_PARAM */  #endif
> +#if ENABLE_FEATURE_UDHCPC6_RFC4075
> +     "sntpsrv" "\0"  /* D6_OPT_SNTP_SERVERS */
> +#endif
>       "pxeconffile" "\0" /* DHCP_PXE_CONF_FILE  */
>       "pxepathprefix" "\0" /* DHCP_PXE_PATH_PREFIX  */
>       "\0";
> @@ -243,10 +249,34 @@ static char *string_option_to_env(const uint8_t
> *option,
>       return xasprintf("%s=%.*s", name, val_len, (char*)option + 4);  }
> 
> +static void handle_server_info(char *dev_key, const uint8_t *option,
> +int addrs, int option_offset) {
> +     char *dlist;
> +
> +     /* Make sure payload-size is a multiple of 16 */
> +     if ((option[3] & 0x0f) != 0)
> +             return;
> +
> +     /* Get the number of addresses on the option */
> +     addrs = option[3] >> 4;
> +
> +     /* Setup environment variable */
> +     *new_env() = dlist = xmalloc(strlen(dev_key) + addrs * 40 - 1);
> +     dlist = stpcpy(dlist, dev_key);
> +     option_offset = 0;
> +
> +     while (addrs--) {
> +             dlist += sprint_nip6(dlist, option + 4 + option_offset);
> +             option_offset += 16;
> +             if (addrs)
> +                     *dlist++ = ' ';
> +     }
> +}
> +
>  /* put all the parameters into the environment */  static void
> option_to_env(const uint8_t *option, const uint8_t *option_end)  { -#if
> ENABLE_FEATURE_UDHCPC6_RFC3646
> +#if ENABLE_FEATURE_UDHCPC6_RFC3646 ||
> ENABLE_FEATURE_UDHCPC6_RFC4075
>       int addrs, option_offset;
>  #endif
>       /* "length minus 4" */
> @@ -339,28 +369,7 @@ static void option_to_env(const uint8_t *option, const
> uint8_t *option_end)
>                       break;
>  #if ENABLE_FEATURE_UDHCPC6_RFC3646
>               case D6_OPT_DNS_SERVERS: {
> -                     char *dlist;
> -
> -                     /* Make sure payload-size is a multiple of 16 */
> -                     if ((option[3] & 0x0f) != 0)
> -                             break;
> -
> -                     /* Get the number of addresses on the option */
> -                     addrs = option[3] >> 4;
> -
> -                     /* Setup environment variable */
> -                     *new_env() = dlist = xmalloc(4 + addrs * 40 - 1);
> -                     dlist = stpcpy(dlist, "dns=");
> -                     option_offset = 0;
> -
> -                     while (addrs--) {
> -                             sprint_nip6(dlist, option + 4 + option_offset);
> -                             dlist += 39;
> -                             option_offset += 16;
> -                             if (addrs)
> -                                     *dlist++ = ' ';
> -                     }
> -
> +                     handle_server_info("dns=",option,addrs,option_offset);
>                       break;
>               }
>               case D6_OPT_DOMAIN_LIST: {
> @@ -406,6 +415,12 @@ static void option_to_env(const uint8_t *option, const
> uint8_t *option_end)
>                       *new_env() = xasprintf("tz_name=%.*s", (int)option[3],
> (char*)option + 4);
>                       break;
>  #endif
> +#if ENABLE_FEATURE_UDHCPC6_RFC4075
> +             case D6_OPT_SNTP_SERVERS: {
> +                     
> handle_server_info("sntpsrv=",option,addrs,option_offset);
> +                     break;
> +             }
> +#endif
>               case D6_OPT_BOOT_URL:
>               case D6_OPT_BOOT_PARAM:
>               case 0xd1: /* DHCP_PXE_CONF_FILE */
> --
> 2.12.3
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to