| /* | 
 |  * This file is part of the UCB release of Plan 9. It is subject to the license | 
 |  * terms in the LICENSE file found in the top-level directory of this | 
 |  * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No | 
 |  * part of the UCB release of Plan 9, including this file, may be copied, | 
 |  * modified, propagated, or distributed except according to the terms contained | 
 |  * in the LICENSE file. | 
 |  */ | 
 |  | 
 | // Dynamic Host Configuration Protocol / BOOTP | 
 | enum { | 
 | 	OfferTimeout = 60,	// when an offer times out | 
 | 	MaxLease = 60 * 60,	// longest lease for dynamic binding | 
 | 	MinLease = 15 * 60,	// shortest lease for dynamic binding | 
 | 	StaticLease = 30 * 60,	// lease for static binding | 
 |  | 
 | 	IPUDPHDRSIZE = 28,	// size of an IP plus UDP header | 
 | 	MINSUPPORTED = 576,	// biggest IP message the client must support | 
 |  | 
 | 	// lengths of some bootp fields | 
 | 	Maxhwlen = 16, | 
 | 	Maxfilelen = 128, | 
 | 	Maxoptlen = 312 - 4, | 
 |  | 
 | 	// bootp types | 
 | 	Bootrequest = 1, | 
 | 	Bootreply = 2, | 
 |  | 
 | 	// bootp flags | 
 | 	Fbroadcast = 1 << 15, | 
 |  | 
 | 	// dhcp v4 types | 
 | 	Discover = 1, | 
 | 	Offer = 2, | 
 | 	Request = 3, | 
 | 	Decline = 4, | 
 | 	Ack = 5, | 
 | 	Nak = 6, | 
 | 	Release = 7, | 
 | 	Inform = 8, | 
 |  | 
 | 	// bootp option types | 
 | 	OBend = 255, | 
 | 	OBpad = 0, | 
 | 	OBmask = 1, | 
 | 	OBtimeoff = 2, | 
 | 	OBrouter = 3, | 
 | 	OBtimeserver = 4, | 
 | 	OBnameserver = 5, | 
 | 	OBdnserver = 6, | 
 | 	OBlogserver = 7, | 
 | 	OBcookieserver = 8, | 
 | 	OBlprserver = 9, | 
 | 	OBimpressserver = 10, | 
 | 	OBrlserver = 11, | 
 | 	OBhostname = 12,		// 0x0c | 
 | 	OBbflen = 13, | 
 | 	OBdumpfile = 14, | 
 | 	OBdomainname = 15, | 
 | 	OBswapserver = 16,		// 0x10 | 
 | 	OBrootpath = 17, | 
 | 	OBextpath = 18, | 
 | 	OBipforward = 19, | 
 | 	OBnonlocal = 20, | 
 | 	OBpolicyfilter = 21, | 
 | 	OBmaxdatagram = 22, | 
 | 	OBttl = 23, | 
 | 	OBpathtimeout = 24, | 
 | 	OBpathplateau = 25, | 
 | 	OBmtu = 26, | 
 | 	OBsubnetslocal = 27, | 
 | 	OBbaddr = 28, | 
 | 	OBdiscovermask = 29, | 
 | 	OBsupplymask = 30, | 
 | 	OBdiscoverrouter = 31, | 
 | 	OBrsserver = 32,		// 0x20 | 
 | 	OBstaticroutes = 33, | 
 | 	OBtrailerencap = 34, | 
 | 	OBarptimeout = 35, | 
 | 	OBetherencap = 36, | 
 | 	OBtcpttl = 37, | 
 | 	OBtcpka = 38, | 
 | 	OBtcpkag = 39, | 
 | 	OBnisdomain = 40, | 
 | 	OBniserver = 41, | 
 | 	OBntpserver = 42, | 
 | 	OBvendorinfo = 43,		// 0x2b | 
 | 	OBnetbiosns = 44, | 
 | 	OBnetbiosdds = 45, | 
 | 	OBnetbiostype = 46, | 
 | 	OBnetbiosscope = 47, | 
 | 	OBxfontserver = 48,		// 0x30 | 
 | 	OBxdispmanager = 49, | 
 | 	OBnisplusdomain = 64,	// 0x40 | 
 | 	OBnisplusserver = 65, | 
 | 	OBhomeagent = 68, | 
 | 	OBsmtpserver = 69, | 
 | 	OBpop3server = 70, | 
 | 	OBnntpserver = 71, | 
 | 	OBwwwserver = 72, | 
 | 	OBfingerserver = 73, | 
 | 	OBircserver = 74, | 
 | 	OBstserver = 75, | 
 | 	OBstdaserver = 76, | 
 |  | 
 | 	// dhcp v4 options | 
 | 	ODipaddr = 50,			// 0x32 | 
 | 	ODlease = 51, | 
 | 	ODoverload = 52, | 
 | 	ODtype = 53,			// 0x35 | 
 | 	ODserverid = 54,		// 0x36 | 
 | 	ODparams = 55,			// 0x37 | 
 | 	ODmessage = 56, | 
 | 	ODmaxmsg = 57, | 
 | 	ODrenewaltime = 58, | 
 | 	ODrebindingtime = 59, | 
 | 	ODvendorclass = 60, | 
 | 	ODclientid = 61,		// 0x3d | 
 | 	ODtftpserver = 66, | 
 | 	ODbootfile = 67, | 
 |  | 
 | 	ODpxearch = 93,			// see rfc 4578 | 
 | 	ODpxeni = 94, | 
 | 	ODpxeguid = 97, | 
 |  | 
 | 	// plan9 vendor info options, v4 addresses only (deprecated) | 
 | 	OP9fsv4 = 128,			// plan9 file servers | 
 | 	OP9authv4 = 129,		// plan9 auth servers | 
 |  | 
 | 	// plan9 vendor info options, textual addresses, thus v4 or v6 | 
 | 	OP9fs = 130,			// plan9 file servers | 
 | 	OP9auth = 131,			// plan9 auth servers | 
 | 	OP9ipaddr = 132,		// client's address | 
 | 	OP9ipmask = 133,		// client's subnet mask | 
 | 	OP9ipgw = 134,			// client's gateway | 
 | 	// OP9dns = 135,		// dns servers | 
 | }; | 
 |  | 
 | // a lease that never expires | 
 | #define Lforever ~0UL | 
 |  | 
 | // dhcp states | 
 | enum { | 
 | 	Sinit, | 
 | 	Sselecting, | 
 | 	Srequesting, | 
 | 	Sbound, | 
 | 	Srenewing, | 
 | 	Srebinding, | 
 | }; | 
 |  | 
 | struct bootp { | 
 | 	// Udphdr (included because of structure alignment on the alpha) | 
 | 	uint8_t udphdr[Udphdrsize]; | 
 |  | 
 | 	uint8_t op;			// opcode | 
 | 	uint8_t htype;			// hardware type | 
 | 	uint8_t hlen;			// hardware address len | 
 | 	uint8_t hops;			// hops | 
 | 	uint8_t xid[4];			// a random number | 
 | 	uint8_t secs[2];		// elapsed since client started booting | 
 | 	uint8_t flags[2]; | 
 | 	uint8_t ciaddr[IPv4addrlen]; // client IP address (client tells server) | 
 | 	uint8_t yiaddr[IPv4addrlen]; // client IP address (server tells client) | 
 | 	uint8_t siaddr[IPv4addrlen];	// server IP address | 
 | 	uint8_t giaddr[IPv4addrlen];	// gateway IP address | 
 | 	uint8_t chaddr[Maxhwlen];	// client hardware address | 
 | 	char sname[64];			// server host name (optional) | 
 | 	char file[Maxfilelen];		// boot file name | 
 | 	uint8_t optmagic[4]; | 
 | 	uint8_t optdata[Maxoptlen]; | 
 | }; |