Source code upload
[framework/connectivity/dnsmasq.git] / src / dhcp_protocol.h
1 /* dnsmasq is Copyright (c) 2000-2011 Simon Kelley
2
3    This program is free software; you can redistribute it and/or modify
4    it under the terms of the GNU General Public License as published by
5    the Free Software Foundation; version 2 dated June, 1991, or
6    (at your option) version 3 dated 29 June, 2007.
7  
8    This program is distributed in the hope that it will be useful,
9    but WITHOUT ANY WARRANTY; without even the implied warranty of
10    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11    GNU General Public License for more details.
12      
13    You should have received a copy of the GNU General Public License
14    along with this program.  If not, see <http://www.gnu.org/licenses/>.
15 */
16
17 #define BOOTREQUEST              1
18 #define BOOTREPLY                2
19 #define DHCP_COOKIE              0x63825363
20
21 /* The Linux in-kernel DHCP client silently ignores any packet 
22    smaller than this. Sigh...........   */
23 #define MIN_PACKETSZ             300
24
25 #define OPTION_PAD               0
26 #define OPTION_NETMASK           1
27 #define OPTION_ROUTER            3
28 #define OPTION_DNSSERVER         6
29 #define OPTION_HOSTNAME          12
30 #define OPTION_DOMAINNAME        15
31 #define OPTION_BROADCAST         28
32 #define OPTION_VENDOR_CLASS_OPT  43
33 #define OPTION_REQUESTED_IP      50 
34 #define OPTION_LEASE_TIME        51
35 #define OPTION_OVERLOAD          52
36 #define OPTION_MESSAGE_TYPE      53
37 #define OPTION_SERVER_IDENTIFIER 54
38 #define OPTION_REQUESTED_OPTIONS 55
39 #define OPTION_MESSAGE           56
40 #define OPTION_MAXMESSAGE        57
41 #define OPTION_T1                58
42 #define OPTION_T2                59
43 #define OPTION_VENDOR_ID         60
44 #define OPTION_CLIENT_ID         61
45 #define OPTION_SNAME             66
46 #define OPTION_FILENAME          67
47 #define OPTION_USER_CLASS        77
48 #define OPTION_CLIENT_FQDN       81
49 #define OPTION_AGENT_ID          82
50 #define OPTION_ARCH              93
51 #define OPTION_PXE_UUID          97
52 #define OPTION_SUBNET_SELECT     118
53 #define OPTION_DOMAIN_SEARCH     119
54 #define OPTION_SIP_SERVER        120
55 #define OPTION_VENDOR_IDENT      124
56 #define OPTION_VENDOR_IDENT_OPT  125
57 #define OPTION_END               255
58
59 #define SUBOPT_CIRCUIT_ID        1
60 #define SUBOPT_REMOTE_ID         2
61 #define SUBOPT_SUBNET_SELECT     5     /* RFC 3527 */
62 #define SUBOPT_SUBSCR_ID         6     /* RFC 3393 */
63 #define SUBOPT_SERVER_OR         11    /* RFC 5107 */
64
65 #define SUBOPT_PXE_BOOT_ITEM     71    /* PXE standard */
66 #define SUBOPT_PXE_DISCOVERY     6
67 #define SUBOPT_PXE_SERVERS       8
68 #define SUBOPT_PXE_MENU          9
69 #define SUBOPT_PXE_MENU_PROMPT   10
70
71 #define DHCPDISCOVER             1
72 #define DHCPOFFER                2
73 #define DHCPREQUEST              3
74 #define DHCPDECLINE              4
75 #define DHCPACK                  5
76 #define DHCPNAK                  6
77 #define DHCPRELEASE              7
78 #define DHCPINFORM               8
79
80 #define BRDBAND_FORUM_IANA       3561 /* Broadband forum IANA enterprise */
81
82 #define DHCP_CHADDR_MAX 16
83
84 struct dhcp_packet {
85   u8 op, htype, hlen, hops;
86   u32 xid;
87   u16 secs, flags;
88   struct in_addr ciaddr, yiaddr, siaddr, giaddr;
89   u8 chaddr[DHCP_CHADDR_MAX], sname[64], file[128];
90   u8 options[312];
91 };