diff options
Diffstat (limited to 'networking/udhcp')
-rw-r--r-- | networking/udhcp/clientpacket.c | 5 | ||||
-rw-r--r-- | networking/udhcp/options.c | 12 | ||||
-rw-r--r-- | networking/udhcp/options.h | 8 | ||||
-rw-r--r-- | networking/udhcp/script.c | 5 |
4 files changed, 17 insertions, 13 deletions
diff --git a/networking/udhcp/clientpacket.c b/networking/udhcp/clientpacket.c index 8ccdfcca2..f091d8067 100644 --- a/networking/udhcp/clientpacket.c +++ b/networking/udhcp/clientpacket.c @@ -62,8 +62,9 @@ static void add_param_req_option(struct dhcp_packet *packet) int i, len = 0; for (i = 0; (c = dhcp_options[i].code) != 0; i++) { - if (((dhcp_options[i].flags & OPTION_REQ) - && !client_config.no_default_options) + if (( (dhcp_options[i].flags & OPTION_REQ) + && !client_config.no_default_options + ) || (client_config.opt_mask[c >> 3] & (1 << (c & 7))) ) { packet->options[end + OPT_DATA + len] = c; diff --git a/networking/udhcp/options.c b/networking/udhcp/options.c index 10ec4597f..6ab5708e6 100644 --- a/networking/udhcp/options.c +++ b/networking/udhcp/options.c @@ -11,17 +11,17 @@ #include "options.h" -/* Supported options are easily added here */ +/* Supported options are easily added here. See RFC2132 */ const struct dhcp_option dhcp_options[] = { /* flags code */ { OPTION_IP | OPTION_REQ, 0x01 }, /* DHCP_SUBNET */ { OPTION_S32 , 0x02 }, /* DHCP_TIME_OFFSET */ { OPTION_IP | OPTION_LIST | OPTION_REQ, 0x03 }, /* DHCP_ROUTER */ { OPTION_IP | OPTION_LIST , 0x04 }, /* DHCP_TIME_SERVER */ - { OPTION_IP | OPTION_LIST , 0x05 }, /* DHCP_NAME_SERVER */ +// { OPTION_IP | OPTION_LIST , 0x05 }, /* DHCP_NAME_SERVER */ { OPTION_IP | OPTION_LIST | OPTION_REQ, 0x06 }, /* DHCP_DNS_SERVER */ { OPTION_IP | OPTION_LIST , 0x07 }, /* DHCP_LOG_SERVER */ - { OPTION_IP | OPTION_LIST , 0x08 }, /* DHCP_COOKIE_SERVER */ +// { OPTION_IP | OPTION_LIST , 0x08 }, /* DHCP_COOKIE_SERVER */ { OPTION_IP | OPTION_LIST , 0x09 }, /* DHCP_LPR_SERVER */ { OPTION_STRING | OPTION_REQ, 0x0c }, /* DHCP_HOST_NAME */ { OPTION_U16 , 0x0d }, /* DHCP_BOOT_SIZE */ @@ -37,7 +37,7 @@ const struct dhcp_option dhcp_options[] = { { OPTION_IP | OPTION_LIST , 0x2c }, /* DHCP_WINS_SERVER */ { OPTION_IP , 0x32 }, /* DHCP_REQUESTED_IP */ { OPTION_U32 , 0x33 }, /* DHCP_LEASE_TIME */ - { OPTION_U8 , 0x35 }, /* dhcptype */ + { OPTION_U8 , 0x35 }, /* DHCP_MESSAGE_TYPE */ { OPTION_IP , 0x36 }, /* DHCP_SERVER_ID */ { OPTION_STRING , 0x38 }, /* DHCP_MESSAGE */ { OPTION_STRING , 0x3C }, /* DHCP_VENDOR */ @@ -68,10 +68,10 @@ const char dhcp_option_strings[] ALIGN1 = "timezone" "\0" /* DHCP_TIME_OFFSET */ "router" "\0" /* DHCP_ROUTER */ "timesrv" "\0" /* DHCP_TIME_SERVER */ - "namesrv" "\0" /* DHCP_NAME_SERVER */ +// "namesrv" "\0" /* DHCP_NAME_SERVER */ "dns" "\0" /* DHCP_DNS_SERVER */ "logsrv" "\0" /* DHCP_LOG_SERVER */ - "cookiesrv" "\0" /* DHCP_COOKIE_SERVER */ +// "cookiesrv" "\0" /* DHCP_COOKIE_SERVER */ "lprsrv" "\0" /* DHCP_LPR_SERVER */ "hostname" "\0" /* DHCP_HOST_NAME */ "bootsize" "\0" /* DHCP_BOOT_SIZE */ diff --git a/networking/udhcp/options.h b/networking/udhcp/options.h index aeed36907..8f6ab0f15 100644 --- a/networking/udhcp/options.h +++ b/networking/udhcp/options.h @@ -41,10 +41,10 @@ enum { #define DHCP_TIME_OFFSET 0x02 #define DHCP_ROUTER 0x03 #define DHCP_TIME_SERVER 0x04 -#define DHCP_NAME_SERVER 0x05 +//#define DHCP_NAME_SERVER 0x05 /* _really_ ancient */ #define DHCP_DNS_SERVER 0x06 #define DHCP_LOG_SERVER 0x07 -#define DHCP_COOKIE_SERVER 0x08 +//#define DHCP_COOKIE_SERVER 0x08 /* "quote of the day" */ #define DHCP_LPR_SERVER 0x09 #define DHCP_HOST_NAME 0x0c #define DHCP_BOOT_SIZE 0x0d @@ -64,8 +64,8 @@ enum { #define DHCP_PARAM_REQ 0x37 #define DHCP_MESSAGE 0x38 #define DHCP_MAX_SIZE 0x39 -#define DHCP_T1 0x3a -#define DHCP_T2 0x3b +//#define DHCP_T1 0x3a +//#define DHCP_T2 0x3b #define DHCP_VENDOR 0x3c #define DHCP_CLIENT_ID 0x3d #define DHCP_FQDN 0x51 diff --git a/networking/udhcp/script.c b/networking/udhcp/script.c index a74697c90..dc658ada8 100644 --- a/networking/udhcp/script.c +++ b/networking/udhcp/script.c @@ -78,8 +78,11 @@ static NOINLINE char *xmalloc_optname_optval(uint8_t *option, const struct dhcp_ *dest++ = '/'; option += 4; optlen = 4; - case OPTION_IP: /* Works regardless of host byte order. */ + case OPTION_IP: dest += sprint_nip(dest, "", option); +// TODO: it can be a list only if (type_p->flags & OPTION_LIST). +// Should we bail out/warn if we see multi-ip option which is +// not allowed to be such? For example, DHCP_BROADCAST... break; case OPTION_BOOLEAN: dest += sprintf(dest, *option ? "yes" : "no"); |