busybox/networking/udhcp/dhcpc.h
Martin Lewis 9914d8b861 udhcpc: add support for long options
Duplicate options are currently overridden (only the last option is kept).
This leads to unexpected behavior when using long options.

The patch adds support for long options in compliance with RFC 3396.

Fixes #13136.

function                                             old     new   delta
udhcp_run_script                                     601     725    +124
optitem_unset_env_and_free                             -      38     +38
putenvp                                               46      59     +13
static.xmalloc_optname_optval                        718     717      -1
------------------------------------------------------------------------------
(add/remove: 1/0 grow/shrink: 2/1 up/down: 175/-1)            Total: 174 bytes

Signed-off-by: Martin Lewis <martin.lewis.x84@gmail.com>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
2020-08-13 16:48:07 +02:00

48 lines
1.6 KiB
C

/* vi: set sw=4 ts=4: */
/*
* Licensed under GPLv2, see file LICENSE in this source tree.
*/
#ifndef UDHCP_DHCPC_H
#define UDHCP_DHCPC_H 1
PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
struct client_data_t {
uint8_t client_mac[6]; /* Our mac address */
IF_FEATURE_UDHCP_PORT(uint16_t port;)
int ifindex; /* Index number of the interface to use */
uint8_t opt_mask[256 / 8]; /* Bitmask of options to send (-O option) */
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ TODO: DHCPv6 has 16-bit option numbers
const char *interface; /* The name of the interface to use */
char *pidfile; /* Optionally store the process ID */
const char *script; /* User script to run at dhcp events */
struct option_set *options; /* list of DHCP options to send to server */
uint8_t *clientid; /* Optional client id to use */
uint8_t *vendorclass; /* Optional vendor class-id to use */
uint8_t *hostname; /* Optional hostname to use */
uint8_t *fqdn; /* Optional fully qualified domain name to use */
llist_t *envp; /* list of DHCP options used for env vars */
unsigned first_secs;
unsigned last_secs;
int sockfd;
smallint listen_mode;
smallint state;
} FIX_ALIASING;
/* server_config sits in 1st half of bb_common_bufsiz1 */
#define client_data (*(struct client_data_t*)(&bb_common_bufsiz1[COMMON_BUFSIZE / 2]))
#if ENABLE_FEATURE_UDHCP_PORT
#define CLIENT_PORT (client_data.port)
#define CLIENT_PORT6 (client_data.port)
#else
#define CLIENT_PORT 68
#define CLIENT_PORT6 546
#endif
POP_SAVED_FUNCTION_VISIBILITY
#endif