mirror of
https://github.com/sheumann/hush.git
synced 2024-08-21 11:28:57 +00:00
udhcpc: make -O <numeric_opt> work. Closes 5402
function old new delta udhcpc_main 2642 2685 +43 udhcp_recv_raw_packet 414 415 +1 d6_recv_raw_packet 248 249 +1 udhcpc6_main 2430 2413 -17 add_client_options 239 213 -26 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 3/2 up/down: 45/-43) Total: 2 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
0e941d5427
commit
293c94564c
@ -965,8 +965,6 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
SERVER_PORT = CLIENT_PORT - 1;
|
SERVER_PORT = CLIENT_PORT - 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (opt & OPT_o)
|
|
||||||
client_config.no_default_options = 1;
|
|
||||||
while (list_O) {
|
while (list_O) {
|
||||||
char *optstr = llist_pop(&list_O);
|
char *optstr = llist_pop(&list_O);
|
||||||
unsigned n = bb_strtou(optstr, NULL, 0);
|
unsigned n = bb_strtou(optstr, NULL, 0);
|
||||||
@ -976,6 +974,16 @@ int udhcpc6_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
}
|
}
|
||||||
client_config.opt_mask[n >> 3] |= 1 << (n & 7);
|
client_config.opt_mask[n >> 3] |= 1 << (n & 7);
|
||||||
}
|
}
|
||||||
|
if (!(opt & OPT_o)) {
|
||||||
|
/*
|
||||||
|
unsigned i, n;
|
||||||
|
for (i = 0; (n = dhcp_optflags[i].code) != 0; i++) {
|
||||||
|
if (dhcp_optflags[i].flags & OPTION_REQ) {
|
||||||
|
client_config.opt_mask[n >> 3] |= 1 << (n & 7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
while (list_x) {
|
while (list_x) {
|
||||||
char *optstr = llist_pop(&list_x);
|
char *optstr = llist_pop(&list_x);
|
||||||
char *colon = strchr(optstr, ':');
|
char *colon = strchr(optstr, ':');
|
||||||
|
@ -589,7 +589,6 @@ static void init_packet(struct dhcp_packet *packet, char type)
|
|||||||
|
|
||||||
static void add_client_options(struct dhcp_packet *packet)
|
static void add_client_options(struct dhcp_packet *packet)
|
||||||
{
|
{
|
||||||
uint8_t c;
|
|
||||||
int i, end, len;
|
int i, end, len;
|
||||||
|
|
||||||
udhcp_add_simple_option(packet, DHCP_MAX_SIZE, htons(IP_UDP_DHCP_SIZE));
|
udhcp_add_simple_option(packet, DHCP_MAX_SIZE, htons(IP_UDP_DHCP_SIZE));
|
||||||
@ -599,13 +598,9 @@ static void add_client_options(struct dhcp_packet *packet)
|
|||||||
* No bounds checking because it goes towards the head of the packet. */
|
* No bounds checking because it goes towards the head of the packet. */
|
||||||
end = udhcp_end_option(packet->options);
|
end = udhcp_end_option(packet->options);
|
||||||
len = 0;
|
len = 0;
|
||||||
for (i = 0; (c = dhcp_optflags[i].code) != 0; i++) {
|
for (i = 1; i < DHCP_END; i++) {
|
||||||
if (( (dhcp_optflags[i].flags & OPTION_REQ)
|
if (client_config.opt_mask[i >> 3] & (1 << (i & 7))) {
|
||||||
&& !client_config.no_default_options
|
packet->options[end + OPT_DATA + len] = i;
|
||||||
)
|
|
||||||
|| (client_config.opt_mask[c >> 3] & (1 << (c & 7)))
|
|
||||||
) {
|
|
||||||
packet->options[end + OPT_DATA + len] = c;
|
|
||||||
len++;
|
len++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1257,8 +1252,6 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
SERVER_PORT = CLIENT_PORT - 1;
|
SERVER_PORT = CLIENT_PORT - 1;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
if (opt & OPT_o)
|
|
||||||
client_config.no_default_options = 1;
|
|
||||||
while (list_O) {
|
while (list_O) {
|
||||||
char *optstr = llist_pop(&list_O);
|
char *optstr = llist_pop(&list_O);
|
||||||
unsigned n = bb_strtou(optstr, NULL, 0);
|
unsigned n = bb_strtou(optstr, NULL, 0);
|
||||||
@ -1268,6 +1261,14 @@ int udhcpc_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
}
|
}
|
||||||
client_config.opt_mask[n >> 3] |= 1 << (n & 7);
|
client_config.opt_mask[n >> 3] |= 1 << (n & 7);
|
||||||
}
|
}
|
||||||
|
if (!(opt & OPT_o)) {
|
||||||
|
unsigned i, n;
|
||||||
|
for (i = 0; (n = dhcp_optflags[i].code) != 0; i++) {
|
||||||
|
if (dhcp_optflags[i].flags & OPTION_REQ) {
|
||||||
|
client_config.opt_mask[n >> 3] |= 1 << (n & 7);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
while (list_x) {
|
while (list_x) {
|
||||||
char *optstr = llist_pop(&list_x);
|
char *optstr = llist_pop(&list_x);
|
||||||
char *colon = strchr(optstr, ':');
|
char *colon = strchr(optstr, ':');
|
||||||
|
@ -9,7 +9,6 @@ PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
|
|||||||
|
|
||||||
struct client_config_t {
|
struct client_config_t {
|
||||||
uint8_t client_mac[6]; /* Our mac address */
|
uint8_t client_mac[6]; /* Our mac address */
|
||||||
char no_default_options; /* Do not include default options in request */
|
|
||||||
IF_FEATURE_UDHCP_PORT(uint16_t port;)
|
IF_FEATURE_UDHCP_PORT(uint16_t port;)
|
||||||
int ifindex; /* Index number of the interface to use */
|
int ifindex; /* Index number of the interface to use */
|
||||||
uint8_t opt_mask[256 / 8]; /* Bitmask of options to send (-O option) */
|
uint8_t opt_mask[256 / 8]; /* Bitmask of options to send (-O option) */
|
||||||
|
Loading…
Reference in New Issue
Block a user