| Commit | Line | Data |
|---|---|---|
| 3c8fe83f | 1 | /* $OpenBSD: src/sbin/dhclient/dhcp.h,v 1.9 2011/05/11 14:38:36 krw Exp $ */ |
| 846204b6 HT |
2 | |
| 3 | /* Protocol structures... */ | |
| 4 | ||
| 5 | /* | |
| 6 | * Copyright (c) 1995, 1996 The Internet Software Consortium. | |
| 7 | * All rights reserved. | |
| 8 | * | |
| 9 | * Redistribution and use in source and binary forms, with or without | |
| 10 | * modification, are permitted provided that the following conditions | |
| 11 | * are met: | |
| 12 | * | |
| 13 | * 1. Redistributions of source code must retain the above copyright | |
| 14 | * notice, this list of conditions and the following disclaimer. | |
| 15 | * 2. Redistributions in binary form must reproduce the above copyright | |
| 16 | * notice, this list of conditions and the following disclaimer in the | |
| 17 | * documentation and/or other materials provided with the distribution. | |
| 18 | * 3. Neither the name of The Internet Software Consortium nor the names | |
| 19 | * of its contributors may be used to endorse or promote products derived | |
| 20 | * from this software without specific prior written permission. | |
| 21 | * | |
| 22 | * THIS SOFTWARE IS PROVIDED BY THE INTERNET SOFTWARE CONSORTIUM AND | |
| 23 | * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, | |
| 24 | * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF | |
| 25 | * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | |
| 26 | * DISCLAIMED. IN NO EVENT SHALL THE INTERNET SOFTWARE CONSORTIUM OR | |
| 27 | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
| 28 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
| 29 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF | |
| 30 | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | |
| 31 | * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | |
| 32 | * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT | |
| 33 | * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | |
| 34 | * SUCH DAMAGE. | |
| 35 | * | |
| 36 | * This software has been written for the Internet Software Consortium | |
| 37 | * by Ted Lemon <mellon@fugue.com> in cooperation with Vixie | |
| 38 | * Enterprises. To learn more about the Internet Software Consortium, | |
| 39 | * see ``http://www.vix.com/isc''. To learn more about Vixie | |
| 40 | * Enterprises, see ``http://www.vix.com''. | |
| 41 | */ | |
| 42 | ||
| 43 | #define DHCP_UDP_OVERHEAD (20 + /* IP header */ \ | |
| 44 | 8) /* UDP header */ | |
| 45 | #define DHCP_SNAME_LEN 64 | |
| 46 | #define DHCP_FILE_LEN 128 | |
| 47 | #define DHCP_FIXED_NON_UDP 236 | |
| 48 | #define DHCP_FIXED_LEN (DHCP_FIXED_NON_UDP + DHCP_UDP_OVERHEAD) | |
| 49 | /* Everything but options. */ | |
| 50 | #define DHCP_MTU_MAX 1500 | |
| 51 | #define DHCP_OPTION_LEN (DHCP_MTU_MAX - DHCP_FIXED_LEN) | |
| 52 | ||
| 53 | #define BOOTP_MIN_LEN 300 | |
| 54 | ||
| 55 | struct dhcp_packet { | |
| 56 | u_int8_t op; /* Message opcode/type */ | |
| 57 | u_int8_t htype; /* Hardware addr type (see net/if_types.h) */ | |
| 58 | u_int8_t hlen; /* Hardware addr length */ | |
| 59 | u_int8_t hops; /* Number of relay agent hops from client */ | |
| 60 | u_int32_t xid; /* Transaction ID */ | |
| 61 | u_int16_t secs; /* Seconds since client started looking */ | |
| 62 | u_int16_t flags; /* Flag bits */ | |
| 63 | struct in_addr ciaddr; /* Client IP address (if already in use) */ | |
| 64 | struct in_addr yiaddr; /* Client IP address */ | |
| 65 | struct in_addr siaddr; /* IP address of next server to talk to */ | |
| 66 | struct in_addr giaddr; /* DHCP relay agent IP address */ | |
| 67 | unsigned char chaddr[16]; /* Client hardware address */ | |
| 68 | char sname[DHCP_SNAME_LEN]; /* Server name */ | |
| 69 | char file[DHCP_FILE_LEN]; /* Boot filename */ | |
| 70 | unsigned char options[DHCP_OPTION_LEN]; | |
| 71 | /* Optional parameters | |
| 72 | (actual length dependent on MTU). */ | |
| 73 | }; | |
| 74 | ||
| 75 | /* BOOTP (rfc951) message types */ | |
| 76 | #define BOOTREQUEST 1 | |
| 77 | #define BOOTREPLY 2 | |
| 78 | ||
| 79 | /* Possible values for flags field... */ | |
| 80 | #define BOOTP_BROADCAST 32768L | |
| 81 | ||
| 82 | /* Possible values for hardware type (htype) field... */ | |
| 83 | #define HTYPE_ETHER 1 /* Ethernet */ | |
| 84 | #define HTYPE_IEEE802 6 /* IEEE 802.2 Token Ring... */ | |
| 85 | #define HTYPE_FDDI 8 /* FDDI... */ | |
| 86 | ||
| 87 | /* Magic cookie validating dhcp options field (and bootp vendor | |
| 88 | extensions field). */ | |
| 3c8fe83f AHJ |
89 | #define DHCP_OPTIONS_COOKIE "\143\202\123\143" |
| 90 | #define DHCP_OPTIONS_MESSAGE_TYPE "\065\001\000" | |
| 846204b6 HT |
91 | |
| 92 | /* DHCP Option codes: */ | |
| 93 | ||
| 94 | #define DHO_PAD 0 | |
| 95 | #define DHO_SUBNET_MASK 1 | |
| 96 | #define DHO_TIME_OFFSET 2 | |
| 97 | #define DHO_ROUTERS 3 | |
| 98 | #define DHO_TIME_SERVERS 4 | |
| 99 | #define DHO_NAME_SERVERS 5 | |
| 100 | #define DHO_DOMAIN_NAME_SERVERS 6 | |
| 101 | #define DHO_LOG_SERVERS 7 | |
| 102 | #define DHO_COOKIE_SERVERS 8 | |
| 103 | #define DHO_LPR_SERVERS 9 | |
| 104 | #define DHO_IMPRESS_SERVERS 10 | |
| 105 | #define DHO_RESOURCE_LOCATION_SERVERS 11 | |
| 106 | #define DHO_HOST_NAME 12 | |
| 107 | #define DHO_BOOT_SIZE 13 | |
| 108 | #define DHO_MERIT_DUMP 14 | |
| 109 | #define DHO_DOMAIN_NAME 15 | |
| 110 | #define DHO_SWAP_SERVER 16 | |
| 111 | #define DHO_ROOT_PATH 17 | |
| 112 | #define DHO_EXTENSIONS_PATH 18 | |
| 113 | #define DHO_IP_FORWARDING 19 | |
| 114 | #define DHO_NON_LOCAL_SOURCE_ROUTING 20 | |
| 115 | #define DHO_POLICY_FILTER 21 | |
| 116 | #define DHO_MAX_DGRAM_REASSEMBLY 22 | |
| 117 | #define DHO_DEFAULT_IP_TTL 23 | |
| 118 | #define DHO_PATH_MTU_AGING_TIMEOUT 24 | |
| 119 | #define DHO_PATH_MTU_PLATEAU_TABLE 25 | |
| 120 | #define DHO_INTERFACE_MTU 26 | |
| 121 | #define DHO_ALL_SUBNETS_LOCAL 27 | |
| 122 | #define DHO_BROADCAST_ADDRESS 28 | |
| 123 | #define DHO_PERFORM_MASK_DISCOVERY 29 | |
| 124 | #define DHO_MASK_SUPPLIER 30 | |
| 125 | #define DHO_ROUTER_DISCOVERY 31 | |
| 126 | #define DHO_ROUTER_SOLICITATION_ADDRESS 32 | |
| 127 | #define DHO_STATIC_ROUTES 33 | |
| 128 | #define DHO_TRAILER_ENCAPSULATION 34 | |
| 129 | #define DHO_ARP_CACHE_TIMEOUT 35 | |
| 130 | #define DHO_IEEE802_3_ENCAPSULATION 36 | |
| 131 | #define DHO_DEFAULT_TCP_TTL 37 | |
| 132 | #define DHO_TCP_KEEPALIVE_INTERVAL 38 | |
| 133 | #define DHO_TCP_KEEPALIVE_GARBAGE 39 | |
| 134 | #define DHO_NIS_DOMAIN 40 | |
| 135 | #define DHO_NIS_SERVERS 41 | |
| 136 | #define DHO_NTP_SERVERS 42 | |
| 137 | #define DHO_VENDOR_ENCAPSULATED_OPTIONS 43 | |
| 138 | #define DHO_NETBIOS_NAME_SERVERS 44 | |
| 139 | #define DHO_NETBIOS_DD_SERVER 45 | |
| 140 | #define DHO_NETBIOS_NODE_TYPE 46 | |
| 141 | #define DHO_NETBIOS_SCOPE 47 | |
| 142 | #define DHO_FONT_SERVERS 48 | |
| 143 | #define DHO_X_DISPLAY_MANAGER 49 | |
| 144 | #define DHO_DHCP_REQUESTED_ADDRESS 50 | |
| 145 | #define DHO_DHCP_LEASE_TIME 51 | |
| 146 | #define DHO_DHCP_OPTION_OVERLOAD 52 | |
| 147 | #define DHO_DHCP_MESSAGE_TYPE 53 | |
| 148 | #define DHO_DHCP_SERVER_IDENTIFIER 54 | |
| 149 | #define DHO_DHCP_PARAMETER_REQUEST_LIST 55 | |
| 150 | #define DHO_DHCP_MESSAGE 56 | |
| 151 | #define DHO_DHCP_MAX_MESSAGE_SIZE 57 | |
| 152 | #define DHO_DHCP_RENEWAL_TIME 58 | |
| 153 | #define DHO_DHCP_REBINDING_TIME 59 | |
| 154 | #define DHO_DHCP_CLASS_IDENTIFIER 60 | |
| 155 | #define DHO_DHCP_CLIENT_IDENTIFIER 61 | |
| f64350ef | 156 | #define DHO_TFTP_SERVER 66 |
| 846204b6 HT |
157 | #define DHO_DHCP_USER_CLASS_ID 77 |
| 158 | #define DHO_END 255 | |
| 159 | ||
| 160 | /* DHCP message types. */ | |
| 161 | #define DHCPDISCOVER 1 | |
| 162 | #define DHCPOFFER 2 | |
| 163 | #define DHCPREQUEST 3 | |
| 164 | #define DHCPDECLINE 4 | |
| 165 | #define DHCPACK 5 | |
| 166 | #define DHCPNAK 6 | |
| 167 | #define DHCPRELEASE 7 | |
| 168 | #define DHCPINFORM 8 |