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
  37 extern "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 */
 182 typedef 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 
 201 typedef 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 */