blob: 8c80485be3c9516a7e114578fd53d83f12aefbf1 [file] [log] [blame]
"Robert P. J. Day"63fc1a92006-07-02 19:47:05 +00001/* vi: set sw=4 ts=4: */
Mike Frysinger7031f622006-05-08 03:20:50 +00002/* options.h */
Denis Vlasenkof81e8db2009-04-09 12:35:13 +00003#ifndef UDHCP_OPTIONS_H
4#define UDHCP_OPTIONS_H 1
Mike Frysinger7031f622006-05-08 03:20:50 +00005
Denis Vlasenkof81e8db2009-04-09 12:35:13 +00006PUSH_AND_SET_FUNCTION_VISIBILITY_TO_HIDDEN
Denis Vlasenko98636eb2008-05-09 17:59:34 +00007
Denis Vlasenkobd79c3d2009-04-01 12:36:09 +00008#define TYPE_MASK 0x0F
Mike Frysinger7031f622006-05-08 03:20:50 +00009
10enum {
Denis Vlasenko6884f662007-11-23 00:08:54 +000011 OPTION_IP = 1,
Mike Frysinger7031f622006-05-08 03:20:50 +000012 OPTION_IP_PAIR,
13 OPTION_STRING,
Denis Vlasenko35a064b2008-11-06 00:49:59 +000014#if ENABLE_FEATURE_UDHCP_RFC3397
Denis Vlasenko50664732007-02-27 21:15:08 +000015 OPTION_STR1035, /* RFC1035 compressed domain name list */
16#endif
Mike Frysinger7031f622006-05-08 03:20:50 +000017 OPTION_BOOLEAN,
18 OPTION_U8,
19 OPTION_U16,
20 OPTION_S16,
21 OPTION_U32,
22 OPTION_S32
23};
24
Denis Vlasenkobd79c3d2009-04-01 12:36:09 +000025#define OPTION_REQ 0x10 /* have the client request this option */
26#define OPTION_LIST 0x20 /* There can be a list of 1 or more of these */
Mike Frysinger7031f622006-05-08 03:20:50 +000027
Denis Vlasenkofbd29182007-04-07 01:05:47 +000028/*****************************************************************/
29/* Do not modify below here unless you know what you are doing!! */
30/*****************************************************************/
31
32/* DHCP protocol -- see RFC 2131 */
Denis Vlasenkofbd29182007-04-07 01:05:47 +000033#define DHCP_MAGIC 0x63825363
34
35/* DHCP option codes (partial list) */
Denis Vlasenkobd79c3d2009-04-01 12:36:09 +000036#define DHCP_PADDING 0x00
37#define DHCP_SUBNET 0x01
38#define DHCP_TIME_OFFSET 0x02
39#define DHCP_ROUTER 0x03
40#define DHCP_TIME_SERVER 0x04
41#define DHCP_NAME_SERVER 0x05
42#define DHCP_DNS_SERVER 0x06
43#define DHCP_LOG_SERVER 0x07
44#define DHCP_COOKIE_SERVER 0x08
45#define DHCP_LPR_SERVER 0x09
46#define DHCP_HOST_NAME 0x0c
47#define DHCP_BOOT_SIZE 0x0d
48#define DHCP_DOMAIN_NAME 0x0f
49#define DHCP_SWAP_SERVER 0x10
50#define DHCP_ROOT_PATH 0x11
51#define DHCP_IP_TTL 0x17
52#define DHCP_MTU 0x1a
53#define DHCP_BROADCAST 0x1c
54#define DHCP_NTP_SERVER 0x2a
55#define DHCP_WINS_SERVER 0x2c
56#define DHCP_REQUESTED_IP 0x32
57#define DHCP_LEASE_TIME 0x33
58#define DHCP_OPTION_OVERLOAD 0x34
59#define DHCP_MESSAGE_TYPE 0x35
60#define DHCP_SERVER_ID 0x36
61#define DHCP_PARAM_REQ 0x37
62#define DHCP_MESSAGE 0x38
63#define DHCP_MAX_SIZE 0x39
64#define DHCP_T1 0x3a
65#define DHCP_T2 0x3b
66#define DHCP_VENDOR 0x3c
67#define DHCP_CLIENT_ID 0x3d
68#define DHCP_FQDN 0x51
69#define DHCP_END 0xFF
70/* Offsets in option byte sequence */
71#define OPT_CODE 0
72#define OPT_LEN 1
73#define OPT_DATA 2
74/* Bits in "overload" option */
75#define OPTION_FIELD 0
76#define FILE_FIELD 1
77#define SNAME_FIELD 2
Denis Vlasenkofbd29182007-04-07 01:05:47 +000078
Denis Vlasenkobd79c3d2009-04-01 12:36:09 +000079#define BOOTREQUEST 1
80#define BOOTREPLY 2
Denis Vlasenkofbd29182007-04-07 01:05:47 +000081
Denis Vlasenkobd79c3d2009-04-01 12:36:09 +000082#define ETH_10MB 1
83#define ETH_10MB_LEN 6
Denis Vlasenkofbd29182007-04-07 01:05:47 +000084
Denis Vlasenkobd79c3d2009-04-01 12:36:09 +000085#define DHCPDISCOVER 1 /* client -> server */
86#define DHCPOFFER 2 /* client <- server */
87#define DHCPREQUEST 3 /* client -> server */
88#define DHCPDECLINE 4 /* client -> server */
89#define DHCPACK 5 /* client <- server */
90#define DHCPNAK 6 /* client <- server */
91#define DHCPRELEASE 7 /* client -> server */
92#define DHCPINFORM 8 /* client -> server */
Denis Vlasenkofbd29182007-04-07 01:05:47 +000093
Mike Frysinger7031f622006-05-08 03:20:50 +000094struct dhcp_option {
Denis Vlasenkob539c842007-11-29 08:17:45 +000095 uint8_t flags;
Mike Frysinger7031f622006-05-08 03:20:50 +000096 uint8_t code;
97};
98
Denis Vlasenkoc90c3f32006-11-23 12:57:49 +000099extern const struct dhcp_option dhcp_options[];
Denis Vlasenkob539c842007-11-29 08:17:45 +0000100extern const char dhcp_option_strings[];
101extern const uint8_t dhcp_option_lengths[];
Mike Frysinger7031f622006-05-08 03:20:50 +0000102
Denys Vlasenko31af3d52009-06-17 11:57:09 +0200103uint8_t *get_option(struct dhcp_packet *packet, int code) FAST_FUNC;
Denis Vlasenkof1980f62008-09-26 09:34:59 +0000104int end_option(uint8_t *optionptr) FAST_FUNC;
105int add_option_string(uint8_t *optionptr, uint8_t *string) FAST_FUNC;
106int add_simple_option(uint8_t *optionptr, uint8_t code, uint32_t data) FAST_FUNC;
Denis Vlasenko35a064b2008-11-06 00:49:59 +0000107#if ENABLE_FEATURE_UDHCP_RFC3397
Denis Vlasenkof1980f62008-09-26 09:34:59 +0000108char *dname_dec(const uint8_t *cstr, int clen, const char *pre) FAST_FUNC;
109uint8_t *dname_enc(const uint8_t *cstr, int clen, const char *src, int *retlen) FAST_FUNC;
Denis Vlasenko50664732007-02-27 21:15:08 +0000110#endif
Mike Frysinger7031f622006-05-08 03:20:50 +0000111
Denis Vlasenkof81e8db2009-04-09 12:35:13 +0000112POP_SAVED_FUNCTION_VISIBILITY
Denis Vlasenko98636eb2008-05-09 17:59:34 +0000113
Mike Frysinger7031f622006-05-08 03:20:50 +0000114#endif