[prev in list] [next in list] [prev in thread] [next in thread]
List: busybox
Subject: Re: [PATCH v2 6/6] udhcpc6: Set -x options in request
From: Denys Vlasenko <vda.linux () googlemail ! com>
Date: 2018-05-14 9:13:27
Message-ID: CAK1hOcP-FwgAJKLdafJHPi+KcAAfF8CkqfXgkPDpNFXVvtoe_A () mail ! gmail ! com
[Download RAW message or body]
Applied with some edits.
Please try current git.
On Mon, May 14, 2018 at 6:29 AM, Samuel Mendoza-Jonas
<sam@mendozajonas.com> wrote:
> Signed-off-by: Samuel Mendoza-Jonas <sam@mendozajonas.com>
> ---
> networking/udhcp/common.c | 19 +++++++++++++++----
> networking/udhcp/common.h | 4 ++++
> networking/udhcp/d6_dhcpc.c | 10 +++++++++-
> 3 files changed, 28 insertions(+), 5 deletions(-)
>
> diff --git a/networking/udhcp/common.c b/networking/udhcp/common.c
> index bc4606293..7e4b71390 100644
> --- a/networking/udhcp/common.c
> +++ b/networking/udhcp/common.c
> @@ -411,10 +411,21 @@ static NOINLINE void attach_option(
> /* make a new option */
> log2("attaching option %02x to list", optflag->code);
> new = xmalloc(sizeof(*new));
> - new->data = xmalloc(length + OPT_DATA);
> - new->data[OPT_CODE] = optflag->code;
> - new->data[OPT_LEN] = length;
> - memcpy(new->data + OPT_DATA, (allocated ? allocated : buffer), length);
> + if (addr_type == CLIENT_CONFIG_DHCPV6) {
> + new->data = xmalloc(length + D6_OPT_DATA);
> + new->data[D6_OPT_CODE] = optflag->code >> 8;
> + new->data[D6_OPT_CODE + 1] = optflag->code & 0xff;
> + new->data[D6_OPT_LEN] = length >> 8;
> + new->data[D6_OPT_LEN + 1] = length & 0xff;
> + memcpy(new->data + D6_OPT_DATA, (allocated ? allocated : buffer),
> + length);
> + } else {
> + new->data = xmalloc(length + OPT_DATA);
> + new->data[OPT_CODE] = optflag->code;
> + new->data[OPT_LEN] = length;
> + memcpy(new->data + OPT_DATA, (allocated ? allocated : buffer),
> + length);
> + }
>
> curr = opt_list;
> while (*curr && (*curr)->data[OPT_CODE] < optflag->code)
> diff --git a/networking/udhcp/common.h b/networking/udhcp/common.h
> index e8c3dc2af..15499197c 100644
> --- a/networking/udhcp/common.h
> +++ b/networking/udhcp/common.h
> @@ -164,6 +164,10 @@ enum {
> #define OPT_CODE 0
> #define OPT_LEN 1
> #define OPT_DATA 2
> +/* Offsets in option byte sequence for DHCPv6 */
> +#define D6_OPT_CODE 0
> +#define D6_OPT_LEN 2
> +#define D6_OPT_DATA 4
> /* Bits in "overload" option */
> #define OPTION_FIELD 0
> #define FILE_FIELD 1
> diff --git a/networking/udhcp/d6_dhcpc.c b/networking/udhcp/d6_dhcpc.c
> index 26ce147c4..8bdff6e10 100644
> --- a/networking/udhcp/d6_dhcpc.c
> +++ b/networking/udhcp/d6_dhcpc.c
> @@ -486,8 +486,11 @@ static uint8_t *init_d6_packet(struct d6_packet *packet, char type, uint32_t xid
>
> static uint8_t *add_d6_client_options(uint8_t *ptr)
> {
> + struct option_set *curr;
> uint8_t *start = ptr;
> unsigned option;
> + uint16_t len;
> +
>
> ptr += 4;
> for (option = 1; option < 256; option++) {
> @@ -510,7 +513,12 @@ static uint8_t *add_d6_client_options(uint8_t *ptr)
> ptr = mempcpy(ptr, &opt_fqdn_req, sizeof(opt_fqdn_req));
> #endif
> /* Add -x options if any */
> - //...
> + curr = client_config.options;
> + while (curr) {
> + len = curr->data[D6_OPT_LEN] << 8 | (curr->data[D6_OPT_LEN + 1] & 0xff);
> + ptr = mempcpy(ptr, curr->data, D6_OPT_DATA + len);
> + curr = curr->next;
> + }
>
> return ptr;
> }
> --
> 2.17.0
>
> _______________________________________________
> busybox mailing list
> busybox@busybox.net
> http://lists.busybox.net/mailman/listinfo/busybox
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic