1 |
/* vi: set sw=4 ts=4: */ |
/* vi: set sw=4 ts=4: */ |
2 |
/* options.h */ |
/* options.h */ |
3 |
#ifndef _OPTIONS_H |
#ifndef UDHCP_OPTIONS_H |
4 |
#define _OPTIONS_H |
#define UDHCP_OPTIONS_H 1 |
5 |
|
|
6 |
#if __GNUC_PREREQ(4,1) |
PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN |
|
# pragma GCC visibility push(hidden) |
|
|
#endif |
|
7 |
|
|
8 |
#define TYPE_MASK 0x0F |
#define TYPE_MASK 0x0F |
9 |
|
|
10 |
enum { |
enum { |
11 |
OPTION_IP = 1, |
OPTION_IP = 1, |
19 |
OPTION_U16, |
OPTION_U16, |
20 |
OPTION_S16, |
OPTION_S16, |
21 |
OPTION_U32, |
OPTION_U32, |
22 |
OPTION_S32 |
OPTION_S32, |
23 |
|
OPTION_STATIC_ROUTES, |
24 |
}; |
}; |
25 |
|
|
26 |
#define OPTION_REQ 0x10 /* have the client request this option */ |
/* Client requests this option by default */ |
27 |
#define OPTION_LIST 0x20 /* There can be a list of 1 or more of these */ |
#define OPTION_REQ 0x10 |
28 |
|
/* There can be a list of 1 or more of these */ |
29 |
|
#define OPTION_LIST 0x20 |
30 |
|
|
31 |
/*****************************************************************/ |
/*****************************************************************/ |
32 |
/* Do not modify below here unless you know what you are doing!! */ |
/* Do not modify below here unless you know what you are doing!! */ |
35 |
/* DHCP protocol -- see RFC 2131 */ |
/* DHCP protocol -- see RFC 2131 */ |
36 |
#define DHCP_MAGIC 0x63825363 |
#define DHCP_MAGIC 0x63825363 |
37 |
|
|
|
|
|
38 |
/* DHCP option codes (partial list) */ |
/* DHCP option codes (partial list) */ |
39 |
#define DHCP_PADDING 0x00 |
#define DHCP_PADDING 0x00 |
40 |
#define DHCP_SUBNET 0x01 |
#define DHCP_SUBNET 0x01 |
41 |
#define DHCP_TIME_OFFSET 0x02 |
#define DHCP_TIME_OFFSET 0x02 |
42 |
#define DHCP_ROUTER 0x03 |
#define DHCP_ROUTER 0x03 |
43 |
#define DHCP_TIME_SERVER 0x04 |
#define DHCP_TIME_SERVER 0x04 |
44 |
#define DHCP_NAME_SERVER 0x05 |
#define DHCP_NAME_SERVER 0x05 |
45 |
#define DHCP_DNS_SERVER 0x06 |
#define DHCP_DNS_SERVER 0x06 |
46 |
#define DHCP_LOG_SERVER 0x07 |
#define DHCP_LOG_SERVER 0x07 |
47 |
#define DHCP_COOKIE_SERVER 0x08 |
#define DHCP_COOKIE_SERVER 0x08 |
48 |
#define DHCP_LPR_SERVER 0x09 |
#define DHCP_LPR_SERVER 0x09 |
49 |
#define DHCP_HOST_NAME 0x0c |
#define DHCP_HOST_NAME 0x0c |
50 |
#define DHCP_BOOT_SIZE 0x0d |
#define DHCP_BOOT_SIZE 0x0d |
51 |
#define DHCP_DOMAIN_NAME 0x0f |
#define DHCP_DOMAIN_NAME 0x0f |
52 |
#define DHCP_SWAP_SERVER 0x10 |
#define DHCP_SWAP_SERVER 0x10 |
53 |
#define DHCP_ROOT_PATH 0x11 |
#define DHCP_ROOT_PATH 0x11 |
54 |
#define DHCP_IP_TTL 0x17 |
#define DHCP_IP_TTL 0x17 |
55 |
#define DHCP_MTU 0x1a |
#define DHCP_MTU 0x1a |
56 |
#define DHCP_BROADCAST 0x1c |
#define DHCP_BROADCAST 0x1c |
57 |
#define DHCP_NTP_SERVER 0x2a |
#define DHCP_NTP_SERVER 0x2a |
58 |
#define DHCP_WINS_SERVER 0x2c |
#define DHCP_WINS_SERVER 0x2c |
59 |
#define DHCP_REQUESTED_IP 0x32 |
#define DHCP_REQUESTED_IP 0x32 |
60 |
#define DHCP_LEASE_TIME 0x33 |
#define DHCP_LEASE_TIME 0x33 |
61 |
#define DHCP_OPTION_OVER 0x34 |
#define DHCP_OPTION_OVERLOAD 0x34 |
62 |
#define DHCP_MESSAGE_TYPE 0x35 |
#define DHCP_MESSAGE_TYPE 0x35 |
63 |
#define DHCP_SERVER_ID 0x36 |
#define DHCP_SERVER_ID 0x36 |
64 |
#define DHCP_PARAM_REQ 0x37 |
#define DHCP_PARAM_REQ 0x37 |
65 |
#define DHCP_MESSAGE 0x38 |
#define DHCP_MESSAGE 0x38 |
66 |
#define DHCP_MAX_SIZE 0x39 |
#define DHCP_MAX_SIZE 0x39 |
67 |
#define DHCP_T1 0x3a |
#define DHCP_T1 0x3a |
68 |
#define DHCP_T2 0x3b |
#define DHCP_T2 0x3b |
69 |
#define DHCP_VENDOR 0x3c |
#define DHCP_VENDOR 0x3c |
70 |
#define DHCP_CLIENT_ID 0x3d |
#define DHCP_CLIENT_ID 0x3d |
71 |
#define DHCP_FQDN 0x51 |
#define DHCP_FQDN 0x51 |
72 |
#define DHCP_END 0xFF |
#define DHCP_STATIC_ROUTES 0x79 |
73 |
|
#define DHCP_END 0xFF |
74 |
|
/* Offsets in option byte sequence */ |
75 |
#define BOOTREQUEST 1 |
#define OPT_CODE 0 |
76 |
#define BOOTREPLY 2 |
#define OPT_LEN 1 |
77 |
|
#define OPT_DATA 2 |
78 |
#define ETH_10MB 1 |
/* Bits in "overload" option */ |
79 |
#define ETH_10MB_LEN 6 |
#define OPTION_FIELD 0 |
80 |
|
#define FILE_FIELD 1 |
81 |
#define DHCPDISCOVER 1 /* client -> server */ |
#define SNAME_FIELD 2 |
82 |
#define DHCPOFFER 2 /* client <- server */ |
|
83 |
#define DHCPREQUEST 3 /* client -> server */ |
#define BOOTREQUEST 1 |
84 |
#define DHCPDECLINE 4 /* client -> server */ |
#define BOOTREPLY 2 |
85 |
#define DHCPACK 5 /* client <- server */ |
|
86 |
#define DHCPNAK 6 /* client <- server */ |
#define ETH_10MB 1 |
87 |
#define DHCPRELEASE 7 /* client -> server */ |
#define ETH_10MB_LEN 6 |
88 |
#define DHCPINFORM 8 /* client -> server */ |
|
89 |
|
#define DHCPDISCOVER 1 /* client -> server */ |
90 |
#define OPTION_FIELD 0 |
#define DHCPOFFER 2 /* client <- server */ |
91 |
#define FILE_FIELD 1 |
#define DHCPREQUEST 3 /* client -> server */ |
92 |
#define SNAME_FIELD 2 |
#define DHCPDECLINE 4 /* client -> server */ |
93 |
|
#define DHCPACK 5 /* client <- server */ |
94 |
/* miscellaneous defines */ |
#define DHCPNAK 6 /* client <- server */ |
95 |
#define OPT_CODE 0 |
#define DHCPRELEASE 7 /* client -> server */ |
96 |
#define OPT_LEN 1 |
#define DHCPINFORM 8 /* client -> server */ |
|
#define OPT_DATA 2 |
|
97 |
|
|
98 |
struct dhcp_option { |
struct dhcp_option { |
99 |
uint8_t flags; |
uint8_t flags; |
104 |
extern const char dhcp_option_strings[]; |
extern const char dhcp_option_strings[]; |
105 |
extern const uint8_t dhcp_option_lengths[]; |
extern const uint8_t dhcp_option_lengths[]; |
106 |
|
|
107 |
uint8_t *get_option(struct dhcpMessage *packet, int code) FAST_FUNC; |
uint8_t *get_option(struct dhcp_packet *packet, int code) FAST_FUNC; |
108 |
int end_option(uint8_t *optionptr) FAST_FUNC; |
int end_option(uint8_t *optionptr) FAST_FUNC; |
109 |
int add_option_string(uint8_t *optionptr, uint8_t *string) FAST_FUNC; |
int add_option_string(uint8_t *optionptr, uint8_t *string) FAST_FUNC; |
110 |
int add_simple_option(uint8_t *optionptr, uint8_t code, uint32_t data) FAST_FUNC; |
int add_simple_option(uint8_t *optionptr, uint8_t code, uint32_t data) FAST_FUNC; |
113 |
uint8_t *dname_enc(const uint8_t *cstr, int clen, const char *src, int *retlen) FAST_FUNC; |
uint8_t *dname_enc(const uint8_t *cstr, int clen, const char *src, int *retlen) FAST_FUNC; |
114 |
#endif |
#endif |
115 |
|
|
116 |
#if __GNUC_PREREQ(4,1) |
POP_SAVED_FUNCTION_VISIBILITY |
|
# pragma GCC visibility pop |
|
|
#endif |
|
117 |
|
|
118 |
#endif |
#endif |