|  | /* | 
|  | * 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]; | 
|  | }; |