File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / dhcdrop / src / dhcp.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue Feb 21 22:25:35 2012 UTC (13 years, 4 months ago) by misho
Branches: dhcdrop, MAIN
CVS tags: v0_5, HEAD
dhcdrop

    1: #ifndef DHCP_H_
    2: #define DHCP_H_
    3: 
    4: /* dhcp.h
    5: 
    6:    Protocol structures... */
    7: 
    8: /*
    9:  * Copyright (c) 2004-2005 by Internet Systems Consortium, Inc. ("ISC")
   10:  * Copyright (c) 1995-2003 by Internet Software Consortium
   11:  *
   12:  * Permission to use, copy, modify, and distribute this software for any
   13:  * purpose with or without fee is hereby granted, provided that the above
   14:  * copyright notice and this permission notice appear in all copies.
   15:  *
   16:  * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
   17:  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
   18:  * MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
   19:  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
   20:  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   21:  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
   22:  * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
   23:  *
   24:  *   Internet Systems Consortium, Inc.
   25:  *   950 Charter Street
   26:  *   Redwood City, CA 94063
   27:  *   <info@isc.org>
   28:  *   http://www.isc.org/
   29:  *
   30:  * This software has been written for Internet Systems Consortium
   31:  * by Ted Lemon in cooperation with Vixie Enterprises.  To learn more
   32:  * about Internet Systems Consortium, see ``http://www.isc.org''.
   33:  * To learn more about Vixie Enterprises, see ``http://www.vix.com''.
   34:  */
   35: 
   36: #define DHCP_UDP_OVERHEAD	(20 + /* IP header */			\
   37: 				 8)   /* UDP header */
   38: #define DHCP_SNAME_LEN		64
   39: #define DHCP_FILE_LEN		128
   40: #define DHCP_FIXED_NON_UDP	236
   41: #define DHCP_FIXED_LEN		(DHCP_FIXED_NON_UDP + DHCP_UDP_OVERHEAD)
   42: 						/* Everything but options. */
   43: #define DHCP_MTU_MAX		1500
   44: #define DHCP_OPTION_LEN		(DHCP_MTU_MAX - DHCP_FIXED_LEN)
   45: 
   46: #define BOOTP_MIN_LEN		300
   47: #define DHCP_MIN_LEN            548
   48: 
   49: struct dhcp_packet {
   50:   	uint8_t  op;		/* 0: Message opcode/type */
   51: 	uint8_t  htype;	/* 1: Hardware addr type (net/if_types.h) */
   52: 	uint8_t  hlen;		/* 2: Hardware addr length */
   53: 	uint8_t  hops;		/* 3: Number of relay agent hops from client */
   54: 	uint32_t xid;		/* 4: Transaction ID */
   55: 	uint16_t secs;		/* 8: Seconds since client started looking */
   56: 	uint16_t flags;	/* 10: Flag bits */
   57: 	struct in_addr ciaddr;	/* 12: Client IP address (if already in use) */
   58: 	struct in_addr yiaddr;	/* 16: Client IP address */
   59: 	struct in_addr siaddr;	/* 18: IP address of next server to talk to */
   60: 	struct in_addr giaddr;	/* 20: DHCP relay agent IP address */
   61: 	unsigned char chaddr [16];	/* 24: Client hardware address */
   62: 	char sname [DHCP_SNAME_LEN];	/* 40: Server name */
   63: 	char file [DHCP_FILE_LEN];	/* 104: Boot filename */
   64: 	unsigned char options [DHCP_OPTION_LEN];
   65: 				/* 212: Optional parameters
   66: 				   (actual length dependent on MTU). */
   67: };
   68: 
   69: /* BOOTP (rfc951) message types */
   70: #define	BOOTREQUEST	1
   71: #define BOOTREPLY	2
   72: 
   73: /* Possible values for flags field... */
   74: #define BOOTP_BROADCAST 32768L
   75: 
   76: /* Possible values for hardware type (htype) field... */
   77: #define HTYPE_ETHER	1               /* Ethernet 10Mbps              */
   78: #define HTYPE_IEEE802	6               /* IEEE 802.2 Token Ring...	*/
   79: #define HTYPE_FDDI	8		/* FDDI...			*/
   80: 
   81: /* Magic cookie validating dhcp options field (and bootp vendor
   82:    extensions field). */
   83: #define DHCP_OPTIONS_COOKIE	"\143\202\123\143"
   84: 
   85: /* DHCP Option codes: */
   86: 
   87: #define DHO_PAD				0
   88: #define DHO_SUBNET_MASK			1
   89: #define DHO_TIME_OFFSET			2
   90: #define DHO_ROUTERS			3
   91: #define DHO_TIME_SERVERS		4
   92: #define DHO_NAME_SERVERS		5
   93: #define DHO_DOMAIN_NAME_SERVERS		6
   94: #define DHO_LOG_SERVERS			7
   95: #define DHO_COOKIE_SERVERS		8
   96: #define DHO_LPR_SERVERS			9
   97: #define DHO_IMPRESS_SERVERS		10
   98: #define DHO_RESOURCE_LOCATION_SERVERS	11
   99: #define DHO_HOST_NAME			12
  100: #define DHO_BOOT_SIZE			13
  101: #define DHO_MERIT_DUMP			14
  102: #define DHO_DOMAIN_NAME			15
  103: #define DHO_SWAP_SERVER			16
  104: #define DHO_ROOT_PATH			17
  105: #define DHO_EXTENSIONS_PATH		18
  106: #define DHO_IP_FORWARDING		19
  107: #define DHO_NON_LOCAL_SOURCE_ROUTING	20
  108: #define DHO_POLICY_FILTER		21
  109: #define DHO_MAX_DGRAM_REASSEMBLY	22
  110: #define DHO_DEFAULT_IP_TTL		23
  111: #define DHO_PATH_MTU_AGING_TIMEOUT	24
  112: #define DHO_PATH_MTU_PLATEAU_TABLE	25
  113: #define DHO_INTERFACE_MTU		26
  114: #define DHO_ALL_SUBNETS_LOCAL		27
  115: #define DHO_BROADCAST_ADDRESS		28
  116: #define DHO_PERFORM_MASK_DISCOVERY	29
  117: #define DHO_MASK_SUPPLIER		30
  118: #define DHO_ROUTER_DISCOVERY		31
  119: #define DHO_ROUTER_SOLICITATION_ADDRESS	32
  120: #define DHO_STATIC_ROUTES		33
  121: #define DHO_TRAILER_ENCAPSULATION	34
  122: #define DHO_ARP_CACHE_TIMEOUT		35
  123: #define DHO_IEEE802_3_ENCAPSULATION	36
  124: #define DHO_DEFAULT_TCP_TTL		37
  125: #define DHO_TCP_KEEPALIVE_INTERVAL	38
  126: #define DHO_TCP_KEEPALIVE_GARBAGE	39
  127: #define DHO_NIS_DOMAIN			40
  128: #define DHO_NIS_SERVERS			41
  129: #define DHO_NTP_SERVERS			42
  130: #define DHO_VENDOR_ENCAPSULATED_OPTIONS	43
  131: #define DHO_NETBIOS_NAME_SERVERS	44
  132: #define DHO_NETBIOS_DD_SERVER		45
  133: #define DHO_NETBIOS_NODE_TYPE		46
  134: #define DHO_NETBIOS_SCOPE		47
  135: #define DHO_FONT_SERVERS		48
  136: #define DHO_X_DISPLAY_MANAGER		49
  137: #define DHO_DHCP_REQUESTED_ADDRESS	50
  138: #define DHO_DHCP_LEASE_TIME		51
  139: #define DHO_DHCP_OPTION_OVERLOAD	52
  140: #define DHO_DHCP_MESSAGE_TYPE		53
  141: #define DHO_DHCP_SERVER_IDENTIFIER	54
  142: #define DHO_DHCP_PARAMETER_REQUEST_LIST	55
  143: #define DHO_DHCP_MESSAGE		56
  144: #define DHO_DHCP_MAX_MESSAGE_SIZE	57
  145: #define DHO_DHCP_RENEWAL_TIME		58
  146: #define DHO_DHCP_REBINDING_TIME		59
  147: #define DHO_VENDOR_CLASS_IDENTIFIER	60
  148: #define DHO_DHCP_CLIENT_IDENTIFIER	61
  149: #define DHO_NWIP_DOMAIN_NAME		62
  150: #define DHO_NWIP_SUBOPTIONS		63
  151: #define DHO_USER_CLASS			77
  152: #define DHO_FQDN			81
  153: #define DHO_DHCP_AGENT_OPTIONS		82
  154: #define DHO_SUBNET_SELECTION		118 /* RFC3011! */
  155: /* The DHO_AUTHENTICATE option is not a standard yet, so I've
  156:    allocated an option out of the "local" option space for it on a
  157:    temporary basis.  Once an option code number is assigned, I will
  158:    immediately and shamelessly break this, so don't count on it
  159:    continuing to work. */
  160: #define DHO_AUTHENTICATE		210
  161: 
  162: #define DHO_END				255
  163: 
  164: /* DHCP message types. */
  165: #define DHCPDISCOVER	1
  166: #define DHCPOFFER	2
  167: #define DHCPREQUEST	3
  168: #define DHCPDECLINE	4
  169: #define DHCPACK		5
  170: #define DHCPNAK		6
  171: #define DHCPRELEASE	7
  172: #define DHCPINFORM	8
  173: 
  174: #ifndef _WIN32
  175: 
  176: /* Relay Agent Information option subtypes: */
  177: #define RAI_CIRCUIT_ID	1
  178: #define RAI_REMOTE_ID	2
  179: #define RAI_AGENT_ID	3
  180: 
  181: /* FQDN suboptions: */
  182: #define FQDN_NO_CLIENT_UPDATE		1
  183: #define FQDN_SERVER_UPDATE		2
  184: #define FQDN_ENCODED			3
  185: #define FQDN_RCODE1			4
  186: #define FQDN_RCODE2			5
  187: #define FQDN_HOSTNAME			6
  188: #define FQDN_DOMAINNAME			7
  189: #define FQDN_FQDN			8
  190: #define FQDN_SUBOPTION_COUNT		8
  191: 
  192: #endif
  193: 
  194: #endif /* #ifndef DHCP_H_ */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>