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