diff options
Diffstat (limited to 'gdhcp/common.c')
-rwxr-xr-x | gdhcp/common.c | 110 |
1 files changed, 2 insertions, 108 deletions
diff --git a/gdhcp/common.c b/gdhcp/common.c index b8c5091a..8f7a65cc 100755 --- a/gdhcp/common.c +++ b/gdhcp/common.c @@ -39,6 +39,7 @@ #include "gdhcp.h" #include "common.h" +#include "../src/connman.h" static const DHCPOption client_options[] = { { OPTION_IP, 0x01 }, /* subnet-mask */ @@ -60,42 +61,6 @@ static const DHCPOption client_options[] = { { OPTION_UNKNOWN, 0x00 }, }; -#define URANDOM "/dev/urandom" -static int random_fd = -1; - -int dhcp_get_random(uint64_t *val) -{ - int r; - - if (random_fd < 0) { - random_fd = open(URANDOM, O_RDONLY); - if (random_fd < 0) { - r = -errno; - *val = random(); - - return r; - } - } - - if (read(random_fd, val, sizeof(uint64_t)) < 0) { - r = -errno; - *val = random(); - - return r; - } - - return 0; -} - -void dhcp_cleanup_random(void) -{ - if (random_fd < 0) - return; - - close(random_fd); - random_fd = -1; -} - GDHCPOptionType dhcp_get_code_type(uint8_t code) { int i; @@ -182,71 +147,6 @@ int dhcp_end_option(uint8_t *optionptr) return i; } -/* get a rough idea of how long an option will be */ -static const uint8_t len_of_option_as_string[] = { - [OPTION_IP] = sizeof("255.255.255.255 "), - [OPTION_STRING] = 1, - [OPTION_U8] = sizeof("255 "), - [OPTION_U16] = sizeof("65535 "), - [OPTION_U32] = sizeof("4294967295 "), -}; - -static int sprint_nip(char *dest, const char *pre, const uint8_t *ip) -{ - return sprintf(dest, "%s%u.%u.%u.%u", pre, ip[0], ip[1], ip[2], ip[3]); -} - -/* Create "opt_value1 option_value2 ..." string */ -char *malloc_option_value_string(uint8_t *option, GDHCPOptionType type) -{ - unsigned upper_length; - int len, optlen; - char *dest, *ret; - - len = option[OPT_LEN - OPT_DATA]; - type &= OPTION_TYPE_MASK; - optlen = dhcp_option_lengths[type]; - if (optlen == 0) - return NULL; - upper_length = len_of_option_as_string[type] * - ((unsigned)len / (unsigned)optlen); - dest = ret = g_malloc(upper_length + 1); - if (ret == NULL) - return NULL; - - while (len >= optlen) { - switch (type) { - case OPTION_IP: - dest += sprint_nip(dest, "", option); - break; - case OPTION_U16: { - uint16_t val_u16 = get_be16(option); - dest += sprintf(dest, "%u", val_u16); - break; - } - case OPTION_U32: { - uint32_t val_u32 = get_be32(option); - dest += sprintf(dest, "%u", val_u32); - break; - } - case OPTION_STRING: - memcpy(dest, option, len); - dest[len] = '\0'; - return ret; - default: - break; - } - option += optlen; - len -= optlen; - if (len <= 0) - break; - *dest++ = ' '; - *dest = '\0'; - } - - return ret; -} - uint8_t *dhcpv6_get_option(struct dhcpv6_packet *packet, uint16_t pkt_len, int code, uint16_t *option_len, int *option_count) { @@ -397,8 +297,6 @@ void dhcp_add_option_uint32(struct dhcp_packet *packet, uint8_t code, put_be32(data, option + OPT_DATA); dhcp_add_binary_option(packet, option); - - return; } void dhcp_add_option_uint16(struct dhcp_packet *packet, uint8_t code, @@ -414,8 +312,6 @@ void dhcp_add_option_uint16(struct dhcp_packet *packet, uint8_t code, put_be16(data, option + OPT_DATA); dhcp_add_binary_option(packet, option); - - return; } void dhcp_add_option_uint8(struct dhcp_packet *packet, uint8_t code, @@ -431,8 +327,6 @@ void dhcp_add_option_uint8(struct dhcp_packet *packet, uint8_t code, option[OPT_DATA] = data; dhcp_add_binary_option(packet, option); - - return; } void dhcp_init_header(struct dhcp_packet *packet, char type) @@ -465,7 +359,7 @@ void dhcpv6_init_header(struct dhcpv6_packet *packet, uint8_t type) packet->message = type; - dhcp_get_random(&rand); + __connman_util_get_random(&rand); id = rand; packet->transaction_id[0] = (id >> 16) & 0xff; |