dhcp.h revision 7c478bd95313f5f23a4c958a745db2134aa03244
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 1996-2003 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
/*
* dhcp.h - Generic DHCP definitions, as per RFC's 2131 and 2132.
*/
#ifndef _DHCP_H
#define _DHCP_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _REENTRANT
#include <thread.h>
#endif /* _REENTRANT */
/*
* DHCP option codes.
*/
#define CD_PAD 0
#define CD_END 255
#define CD_SUBNETMASK 1
#define CD_TIMEOFFSET 2
#define CD_ROUTER 3
#define CD_TIMESERV 4
#define CD_IEN116_NAME_SERV 5
#define CD_DNSSERV 6
#define CD_LOG_SERV 7
#define CD_COOKIE_SERV 8
#define CD_LPR_SERV 9
#define CD_IMPRESS_SERV 10
#define CD_RESOURCE_SERV 11
#define CD_HOSTNAME 12
#define CD_BOOT_SIZE 13
#define CD_DUMP_FILE 14
#define CD_DNSDOMAIN 15
#define CD_SWAP_SERV 16
#define CD_ROOT_PATH 17
#define CD_EXTEND_PATH 18
/* IP layer parameters */
#define CD_IP_FORWARDING_ON 19
#define CD_NON_LCL_ROUTE_ON 20
#define CD_POLICY_FILTER 21
#define CD_MAXIPSIZE 22
#define CD_IPTTL 23
#define CD_PATH_MTU_TIMEOUT 24
#define CD_PATH_MTU_TABLE_SZ 25
/* IP layer parameters per interface */
#define CD_MTU 26
#define CD_ALL_SUBNETS_LCL_ON 27
#define CD_BROADCASTADDR 28
#define CD_MASK_DISCVRY_ON 29
#define CD_MASK_SUPPLIER_ON 30
#define CD_ROUTER_DISCVRY_ON 31
#define CD_ROUTER_SOLICIT_SERV 32
#define CD_STATIC_ROUTE 33
/* Link Layer Parameters per Interface */
#define CD_TRAILER_ENCAPS_ON 34
#define CD_ARP_TIMEOUT 35
#define CD_ETHERNET_ENCAPS_ON 36
/* TCP Parameters */
#define CD_TCP_TTL 37
#define CD_TCP_KALIVE_INTVL 38
#define CD_TCP_KALIVE_GRBG_ON 39
/* Application layer parameters */
#define CD_NIS_DOMAIN 40
#define CD_NIS_SERV 41
#define CD_NTP_SERV 42
#define CD_VENDOR_SPEC 43
/* NetBIOS parameters */
#define CD_NETBIOS_NAME_SERV 44
#define CD_NETBIOS_DIST_SERV 45
#define CD_NETBIOS_NODE_TYPE 46
#define CD_NETBIOS_SCOPE 47
/* X Window parameters */
#define CD_XWIN_FONT_SERV 48
#define CD_XWIN_DISP_SERV 49
/* DHCP protocol extension options */
#define CD_REQUESTED_IP_ADDR 50
#define CD_LEASE_TIME 51
#define CD_OPTION_OVERLOAD 52
#define CD_DHCP_TYPE 53
#define CD_SERVER_ID 54
#define CD_REQUEST_LIST 55
#define CD_MESSAGE 56
#define CD_MAX_DHCP_SIZE 57
#define CD_T1_TIME 58
#define CD_T2_TIME 59
#define CD_CLASS_ID 60
#define CD_CLIENT_ID 61
/* Netware options */
#define CD_NW_IP_DOMAIN 62
#define CD_NW_IP_OPTIONS 63
/* Nisplus options */
#define CD_NISPLUS_DMAIN 64
#define CD_NISPLUS_SERVS 65
/* Optional sname/bootfile options */
#define CD_TFTP_SERV_NAME 66
#define CD_OPT_BOOTFILE_NAME 67
/* Additional server options */
#define CD_MOBILE_IP_AGENT 68
#define CD_SMTP_SERVS 69
#define CD_POP3_SERVS 70
#define CD_NNTP_SERVS 71
#define CD_WWW_SERVS 72
#define CD_FINGER_SERVS 73
#define CD_IRC_SERVS 74
/* Streettalk options */
#define CD_STREETTALK_SERVS 75
#define CD_STREETTALK_DA_SERVS 76
/* User class identifier */
#define CD_USER_CLASS_ID 77
/* Newer options */
#define CD_SLPDA 78
#define CD_SLPSS 79
#define CD_AGENTOPT 82
#define CD_FQDN 89
#define CD_PXEARCHi 93
#define CD_PXENIIi 94
#define CD_PXECID 95
#define CD_MULTICST 107
#define DHCP_FIRST_OPT CD_SUBNETMASK
#define DHCP_LAST_STD CD_MULTICST
#define DHCP_SITE_OPT 128 /* inclusive */
#define DHCP_END_SITE 254
#define DHCP_LAST_OPT DHCP_END_SITE /* last op code */
#define DHCP_MAX_OPT_SIZE 255 /* maximum option size in octets */
/*
* DHCP Packet. What will fit in a ethernet frame. We may use a smaller
* size, based on what our transport can handle.
*/
#define DHCP_DEF_MAX_SIZE 576 /* as spec'ed in RFC 2131 */
#define PKT_BUFFER 1486 /* max possible size of pkt buffer */
#define BASE_PKT_SIZE 240 /* everything but the options */
typedef struct dhcp {
uint8_t op; /* message opcode */
uint8_t htype; /* Hardware address type */
uint8_t hlen; /* Hardware address length */
uint8_t hops; /* Used by relay agents */
uint32_t xid; /* transaction id */
uint16_t secs; /* Secs elapsed since client boot */
uint16_t flags; /* DHCP Flags field */
struct in_addr ciaddr; /* client IP addr */
struct in_addr yiaddr; /* 'Your' IP addr. (from server) */
struct in_addr siaddr; /* Boot server IP addr */
struct in_addr giaddr; /* Relay agent IP addr */
uint8_t chaddr[16]; /* Client hardware addr */
uint8_t sname[64]; /* Optl. boot server hostname */
uint8_t file[128]; /* boot file name (ascii path) */
uint8_t cookie[4]; /* Magic cookie */
uint8_t options[60]; /* Options */
} PKT;
typedef uint32_t lease_t; /* DHCP lease time (32 bit quantity) */
/*
* DHCP packet types. As per protocol.
*/
#define DISCOVER ((uint8_t)1)
#define OFFER ((uint8_t)2)
#define REQUEST ((uint8_t)3)
#define DECLINE ((uint8_t)4)
#define ACK ((uint8_t)5)
#define NAK ((uint8_t)6)
#define RELEASE ((uint8_t)7)
#define INFORM ((uint8_t)8)
/*
* Generic DHCP protocol defines
*/
#define DHCP_PERM ((lease_t)0xffffffff) /* "permanent" lease time */
#define BOOTREQUEST (1) /* BOOTP REQUEST opcode */
#define BOOTREPLY (2) /* BOOTP REPLY opcode */
#define BOOTMAGIC { 99, 130, 83, 99 } /* rfc1048 magic cookie */
#define BCAST_MASK 0x8000 /* BROADCAST flag */
#ifdef __cplusplus
}
#endif
#endif /* _DHCP_H */