1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22/* 23 * Copyright 1996-2003 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27/* 28 * dhcp.h - Generic DHCP definitions, as per RFC's 2131 and 2132. 29 */ 30 31#ifndef _DHCP_H 32#define _DHCP_H 33 34#pragma ident "%Z%%M% %I% %E% SMI" 35 36#ifdef __cplusplus 37extern "C" { 38#endif 39 40#ifdef _REENTRANT 41#include <thread.h> 42#endif /* _REENTRANT */ 43 44/* 45 * DHCP option codes. 46 */ 47 48#define CD_PAD 0 49#define CD_END 255 50#define CD_SUBNETMASK 1 51#define CD_TIMEOFFSET 2 52#define CD_ROUTER 3 53#define CD_TIMESERV 4 54#define CD_IEN116_NAME_SERV 5 55#define CD_DNSSERV 6 56#define CD_LOG_SERV 7 57#define CD_COOKIE_SERV 8 58#define CD_LPR_SERV 9 59#define CD_IMPRESS_SERV 10 60#define CD_RESOURCE_SERV 11 61#define CD_HOSTNAME 12 62#define CD_BOOT_SIZE 13 63#define CD_DUMP_FILE 14 64#define CD_DNSDOMAIN 15 65#define CD_SWAP_SERV 16 66#define CD_ROOT_PATH 17 67#define CD_EXTEND_PATH 18 68 69/* IP layer parameters */ 70#define CD_IP_FORWARDING_ON 19 71#define CD_NON_LCL_ROUTE_ON 20 72#define CD_POLICY_FILTER 21 73#define CD_MAXIPSIZE 22 74#define CD_IPTTL 23 75#define CD_PATH_MTU_TIMEOUT 24 76#define CD_PATH_MTU_TABLE_SZ 25 77 78/* IP layer parameters per interface */ 79#define CD_MTU 26 80#define CD_ALL_SUBNETS_LCL_ON 27 81#define CD_BROADCASTADDR 28 82#define CD_MASK_DISCVRY_ON 29 83#define CD_MASK_SUPPLIER_ON 30 84#define CD_ROUTER_DISCVRY_ON 31 85#define CD_ROUTER_SOLICIT_SERV 32 86#define CD_STATIC_ROUTE 33 87 88/* Link Layer Parameters per Interface */ 89#define CD_TRAILER_ENCAPS_ON 34 90#define CD_ARP_TIMEOUT 35 91#define CD_ETHERNET_ENCAPS_ON 36 92 93/* TCP Parameters */ 94#define CD_TCP_TTL 37 95#define CD_TCP_KALIVE_INTVL 38 96#define CD_TCP_KALIVE_GRBG_ON 39 97 98/* Application layer parameters */ 99#define CD_NIS_DOMAIN 40 100#define CD_NIS_SERV 41 101#define CD_NTP_SERV 42 102#define CD_VENDOR_SPEC 43 103 104/* NetBIOS parameters */ 105#define CD_NETBIOS_NAME_SERV 44 106#define CD_NETBIOS_DIST_SERV 45 107#define CD_NETBIOS_NODE_TYPE 46 108#define CD_NETBIOS_SCOPE 47 109 110/* X Window parameters */ 111#define CD_XWIN_FONT_SERV 48 112#define CD_XWIN_DISP_SERV 49 113 114/* DHCP protocol extension options */ 115#define CD_REQUESTED_IP_ADDR 50 116#define CD_LEASE_TIME 51 117#define CD_OPTION_OVERLOAD 52 118#define CD_DHCP_TYPE 53 119#define CD_SERVER_ID 54 120#define CD_REQUEST_LIST 55 121#define CD_MESSAGE 56 122#define CD_MAX_DHCP_SIZE 57 123#define CD_T1_TIME 58 124#define CD_T2_TIME 59 125#define CD_CLASS_ID 60 126#define CD_CLIENT_ID 61 127 128/* Netware options */ 129#define CD_NW_IP_DOMAIN 62 130#define CD_NW_IP_OPTIONS 63 131 132/* Nisplus options */ 133#define CD_NISPLUS_DMAIN 64 134#define CD_NISPLUS_SERVS 65 135 136/* Optional sname/bootfile options */ 137#define CD_TFTP_SERV_NAME 66 138#define CD_OPT_BOOTFILE_NAME 67 139 140/* Additional server options */ 141#define CD_MOBILE_IP_AGENT 68 142#define CD_SMTP_SERVS 69 143#define CD_POP3_SERVS 70 144#define CD_NNTP_SERVS 71 145#define CD_WWW_SERVS 72 146#define CD_FINGER_SERVS 73 147#define CD_IRC_SERVS 74 148 149/* Streettalk options */ 150#define CD_STREETTALK_SERVS 75 151#define CD_STREETTALK_DA_SERVS 76 152 153/* User class identifier */ 154#define CD_USER_CLASS_ID 77 155 156/* Newer options */ 157 158#define CD_SLPDA 78 159#define CD_SLPSS 79 160#define CD_AGENTOPT 82 161#define CD_FQDN 89 162#define CD_PXEARCHi 93 163#define CD_PXENIIi 94 164#define CD_PXECID 95 165#define CD_MULTICST 107 166 167#define DHCP_FIRST_OPT CD_SUBNETMASK 168#define DHCP_LAST_STD CD_MULTICST 169#define DHCP_SITE_OPT 128 /* inclusive */ 170#define DHCP_END_SITE 254 171#define DHCP_LAST_OPT DHCP_END_SITE /* last op code */ 172 173#define DHCP_MAX_OPT_SIZE 255 /* maximum option size in octets */ 174 175/* 176 * DHCP Packet. What will fit in a ethernet frame. We may use a smaller 177 * size, based on what our transport can handle. 178 */ 179#define DHCP_DEF_MAX_SIZE 576 /* as spec'ed in RFC 2131 */ 180#define PKT_BUFFER 1486 /* max possible size of pkt buffer */ 181#define BASE_PKT_SIZE 240 /* everything but the options */ 182typedef struct dhcp { 183 uint8_t op; /* message opcode */ 184 uint8_t htype; /* Hardware address type */ 185 uint8_t hlen; /* Hardware address length */ 186 uint8_t hops; /* Used by relay agents */ 187 uint32_t xid; /* transaction id */ 188 uint16_t secs; /* Secs elapsed since client boot */ 189 uint16_t flags; /* DHCP Flags field */ 190 struct in_addr ciaddr; /* client IP addr */ 191 struct in_addr yiaddr; /* 'Your' IP addr. (from server) */ 192 struct in_addr siaddr; /* Boot server IP addr */ 193 struct in_addr giaddr; /* Relay agent IP addr */ 194 uint8_t chaddr[16]; /* Client hardware addr */ 195 uint8_t sname[64]; /* Optl. boot server hostname */ 196 uint8_t file[128]; /* boot file name (ascii path) */ 197 uint8_t cookie[4]; /* Magic cookie */ 198 uint8_t options[60]; /* Options */ 199} PKT; 200 201typedef uint32_t lease_t; /* DHCP lease time (32 bit quantity) */ 202 203/* 204 * DHCP packet types. As per protocol. 205 */ 206#define DISCOVER ((uint8_t)1) 207#define OFFER ((uint8_t)2) 208#define REQUEST ((uint8_t)3) 209#define DECLINE ((uint8_t)4) 210#define ACK ((uint8_t)5) 211#define NAK ((uint8_t)6) 212#define RELEASE ((uint8_t)7) 213#define INFORM ((uint8_t)8) 214 215/* 216 * Generic DHCP protocol defines 217 */ 218#define DHCP_PERM ((lease_t)0xffffffff) /* "permanent" lease time */ 219#define BOOTREQUEST (1) /* BOOTP REQUEST opcode */ 220#define BOOTREPLY (2) /* BOOTP REPLY opcode */ 221#define BOOTMAGIC { 99, 130, 83, 99 } /* rfc1048 magic cookie */ 222#define BCAST_MASK 0x8000 /* BROADCAST flag */ 223 224#ifdef __cplusplus 225} 226#endif 227 228#endif /* _DHCP_H */ 229