xref: /plan9/sys/src/cmd/ip/dhcp.h (revision b94bb474148e9d24a82a427863d9c9eb4c20f4ae)
1e47528f3SDavid du Colombier /* Dynamic Host Configuration Protocol / BOOTP */
27dd7cddfSDavid du Colombier enum
37dd7cddfSDavid du Colombier {
47dd7cddfSDavid du Colombier 	OfferTimeout=	60,		/* when an offer times out */
57dd7cddfSDavid du Colombier 	MaxLease=	60*60,		/* longest lease for dynamic binding */
67dd7cddfSDavid du Colombier 	MinLease=	15*60,		/* shortest lease for dynamic binding */
77dd7cddfSDavid du Colombier 	StaticLease=	30*60,		/* lease for static binding */
87dd7cddfSDavid du Colombier 
97dd7cddfSDavid du Colombier 	IPUDPHDRSIZE=	28,		/* size of an IP plus UDP header */
107dd7cddfSDavid du Colombier 	MINSUPPORTED=	576,		/* biggest IP message the client must support */
117dd7cddfSDavid du Colombier 
127dd7cddfSDavid du Colombier 	/* lengths of some bootp fields */
137dd7cddfSDavid du Colombier 	Maxhwlen=	16,
147dd7cddfSDavid du Colombier 	Maxfilelen=	128,
157dd7cddfSDavid du Colombier 	Maxoptlen=	312-4,
167dd7cddfSDavid du Colombier 
177dd7cddfSDavid du Colombier 	/* bootp types */
187dd7cddfSDavid du Colombier 	Bootrequest=	1,
197dd7cddfSDavid du Colombier 	Bootreply= 	2,
207dd7cddfSDavid du Colombier 
217dd7cddfSDavid du Colombier 	/* bootp flags */
227dd7cddfSDavid du Colombier 	Fbroadcast=	1<<15,
237dd7cddfSDavid du Colombier 
24e47528f3SDavid du Colombier 	/* dhcp v4 types */
257dd7cddfSDavid du Colombier 	Discover=	1,
267dd7cddfSDavid du Colombier 	Offer=		2,
277dd7cddfSDavid du Colombier 	Request=	3,
287dd7cddfSDavid du Colombier 	Decline=	4,
297dd7cddfSDavid du Colombier 	Ack=		5,
307dd7cddfSDavid du Colombier 	Nak=		6,
317dd7cddfSDavid du Colombier 	Release=	7,
327dd7cddfSDavid du Colombier 	Inform=		8,
337dd7cddfSDavid du Colombier 
347dd7cddfSDavid du Colombier 	/* bootp option types */
357dd7cddfSDavid du Colombier 	OBend=			255,
367dd7cddfSDavid du Colombier 	OBpad=			0,
377dd7cddfSDavid du Colombier 	OBmask=			1,
387dd7cddfSDavid du Colombier 	OBtimeoff=		2,
397dd7cddfSDavid du Colombier 	OBrouter=		3,
407dd7cddfSDavid du Colombier 	OBtimeserver=		4,
417dd7cddfSDavid du Colombier 	OBnameserver=		5,
427dd7cddfSDavid du Colombier 	OBdnserver=		6,
437dd7cddfSDavid du Colombier 	OBlogserver=		7,
447dd7cddfSDavid du Colombier 	OBcookieserver=		8,
457dd7cddfSDavid du Colombier 	OBlprserver=		9,
467dd7cddfSDavid du Colombier 	OBimpressserver=	10,
477dd7cddfSDavid du Colombier 	OBrlserver=		11,
480a84db5eSDavid du Colombier 	OBhostname=		12,	/* 0x0c */
497dd7cddfSDavid du Colombier 	OBbflen=		13,
507dd7cddfSDavid du Colombier 	OBdumpfile=		14,
517dd7cddfSDavid du Colombier 	OBdomainname=		15,
527dd7cddfSDavid du Colombier 	OBswapserver=		16,	/* 0x10 */
537dd7cddfSDavid du Colombier 	OBrootpath=		17,
547dd7cddfSDavid du Colombier 	OBextpath=		18,
557dd7cddfSDavid du Colombier 	OBipforward=		19,
567dd7cddfSDavid du Colombier 	OBnonlocal=		20,
577dd7cddfSDavid du Colombier 	OBpolicyfilter=		21,
587dd7cddfSDavid du Colombier 	OBmaxdatagram=		22,
597dd7cddfSDavid du Colombier 	OBttl=			23,
607dd7cddfSDavid du Colombier 	OBpathtimeout=		24,
617dd7cddfSDavid du Colombier 	OBpathplateau=		25,
627dd7cddfSDavid du Colombier 	OBmtu=			26,
637dd7cddfSDavid du Colombier 	OBsubnetslocal=		27,
647dd7cddfSDavid du Colombier 	OBbaddr=		28,
657dd7cddfSDavid du Colombier 	OBdiscovermask=		29,
667dd7cddfSDavid du Colombier 	OBsupplymask=		30,
677dd7cddfSDavid du Colombier 	OBdiscoverrouter=	31,
687dd7cddfSDavid du Colombier 	OBrsserver=		32,	/* 0x20 */
697dd7cddfSDavid du Colombier 	OBstaticroutes=		33,
707dd7cddfSDavid du Colombier 	OBtrailerencap=		34,
717dd7cddfSDavid du Colombier 	OBarptimeout=		35,
727dd7cddfSDavid du Colombier 	OBetherencap=		36,
737dd7cddfSDavid du Colombier 	OBtcpttl=		37,
747dd7cddfSDavid du Colombier 	OBtcpka=		38,
757dd7cddfSDavid du Colombier 	OBtcpkag=		39,
767dd7cddfSDavid du Colombier 	OBnisdomain=		40,
777dd7cddfSDavid du Colombier 	OBniserver=		41,
787dd7cddfSDavid du Colombier 	OBntpserver=		42,
797dd7cddfSDavid du Colombier 	OBvendorinfo=		43,	/* 0x2b */
807dd7cddfSDavid du Colombier 	OBnetbiosns=		44,
817dd7cddfSDavid du Colombier 	OBnetbiosdds=		45,
827dd7cddfSDavid du Colombier 	OBnetbiostype=		46,
837dd7cddfSDavid du Colombier 	OBnetbiosscope=		47,
847dd7cddfSDavid du Colombier 	OBxfontserver=		48,	/* 0x30 */
857dd7cddfSDavid du Colombier 	OBxdispmanager=		49,
867dd7cddfSDavid du Colombier 	OBnisplusdomain=	64,	/* 0x40 */
877dd7cddfSDavid du Colombier 	OBnisplusserver=	65,
887dd7cddfSDavid du Colombier 	OBhomeagent=		68,
897dd7cddfSDavid du Colombier 	OBsmtpserver=		69,
907dd7cddfSDavid du Colombier 	OBpop3server=		70,
917dd7cddfSDavid du Colombier 	OBnntpserver=		71,
927dd7cddfSDavid du Colombier 	OBwwwserver=		72,
937dd7cddfSDavid du Colombier 	OBfingerserver=		73,
947dd7cddfSDavid du Colombier 	OBircserver=		74,
957dd7cddfSDavid du Colombier 	OBstserver=		75,
967dd7cddfSDavid du Colombier 	OBstdaserver=		76,
977dd7cddfSDavid du Colombier 
98e47528f3SDavid du Colombier 	/* dhcp v4 options */
997dd7cddfSDavid du Colombier 	ODipaddr=		50,	/* 0x32 */
1007dd7cddfSDavid du Colombier 	ODlease=		51,
1017dd7cddfSDavid du Colombier 	ODoverload=		52,
1027dd7cddfSDavid du Colombier 	ODtype=			53,	/* 0x35 */
1037dd7cddfSDavid du Colombier 	ODserverid=		54,	/* 0x36 */
10480ee5cbfSDavid du Colombier 	ODparams=		55,	/* 0x37 */
1057dd7cddfSDavid du Colombier 	ODmessage=		56,
1067dd7cddfSDavid du Colombier 	ODmaxmsg=		57,
1077dd7cddfSDavid du Colombier 	ODrenewaltime=		58,
1087dd7cddfSDavid du Colombier 	ODrebindingtime=	59,
1097dd7cddfSDavid du Colombier 	ODvendorclass=		60,
1107dd7cddfSDavid du Colombier 	ODclientid=		61,	/* 0x3d */
1117dd7cddfSDavid du Colombier 	ODtftpserver=		66,
1127dd7cddfSDavid du Colombier 	ODbootfile=		67,
1137dd7cddfSDavid du Colombier 
114*b94bb474SDavid du Colombier 	ODpxearch=		93,	/* see rfc 4578 */
115*b94bb474SDavid du Colombier 	ODpxeni=		94,
116*b94bb474SDavid du Colombier 	ODpxeguid=		97,
117*b94bb474SDavid du Colombier 
1180a84db5eSDavid du Colombier 	/* plan9 vendor info options, v4 addresses only (deprecated) */
1190a84db5eSDavid du Colombier 	OP9fsv4=		128,	/* plan9 file servers */
1200a84db5eSDavid du Colombier 	OP9authv4=		129,	/* plan9 auth servers */
1210a84db5eSDavid du Colombier 
1220a84db5eSDavid du Colombier 	/* plan9 vendor info options, textual addresses, thus v4 or v6 */
1230a84db5eSDavid du Colombier 	OP9fs=			130,	/* plan9 file servers */
1240a84db5eSDavid du Colombier 	OP9auth=		131,	/* plan9 auth servers */
1250a84db5eSDavid du Colombier 	OP9ipaddr=		132,	/* client's address */
1260a84db5eSDavid du Colombier 	OP9ipmask=		133,	/* client's subnet mask */
1270a84db5eSDavid du Colombier 	OP9ipgw=		134,	/* client's gateway */
1280a84db5eSDavid du Colombier /*	OP9dns=			135,	/* dns servers */
1297dd7cddfSDavid du Colombier };
1307dd7cddfSDavid du Colombier 
1317dd7cddfSDavid du Colombier /* a lease that never expires */
132e47528f3SDavid du Colombier #define Lforever	~0UL
1337dd7cddfSDavid du Colombier 
1347dd7cddfSDavid du Colombier /* dhcp states */
1357dd7cddfSDavid du Colombier enum {
1367dd7cddfSDavid du Colombier 	Sinit,
1377dd7cddfSDavid du Colombier 	Sselecting,
1387dd7cddfSDavid du Colombier 	Srequesting,
1397dd7cddfSDavid du Colombier 	Sbound,
1407dd7cddfSDavid du Colombier 	Srenewing,
1417dd7cddfSDavid du Colombier 	Srebinding,
1427dd7cddfSDavid du Colombier };
1437dd7cddfSDavid du Colombier 
1447dd7cddfSDavid du Colombier typedef struct Bootp	Bootp;
1457dd7cddfSDavid du Colombier struct Bootp
1467dd7cddfSDavid du Colombier {
1477dd7cddfSDavid du Colombier 	/* Udphdr (included because of structure alignment on the alpha) */
148f27a9a5aSDavid du Colombier 	uchar	udphdr[Udphdrsize];
1497dd7cddfSDavid du Colombier 
1507dd7cddfSDavid du Colombier 	uchar	op;			/* opcode */
1517dd7cddfSDavid du Colombier 	uchar	htype;			/* hardware type */
1527dd7cddfSDavid du Colombier 	uchar	hlen;			/* hardware address len */
1537dd7cddfSDavid du Colombier 	uchar	hops;			/* hops */
1547dd7cddfSDavid du Colombier 	uchar	xid[4];			/* a random number */
1557dd7cddfSDavid du Colombier 	uchar	secs[2];		/* elapsed since client started booting */
1567dd7cddfSDavid du Colombier 	uchar	flags[2];
1577dd7cddfSDavid du Colombier 	uchar	ciaddr[IPv4addrlen];	/* client IP address (client tells server) */
1587dd7cddfSDavid du Colombier 	uchar	yiaddr[IPv4addrlen];	/* client IP address (server tells client) */
1597dd7cddfSDavid du Colombier 	uchar	siaddr[IPv4addrlen];	/* server IP address */
1607dd7cddfSDavid du Colombier 	uchar	giaddr[IPv4addrlen];	/* gateway IP address */
1617dd7cddfSDavid du Colombier 	uchar	chaddr[Maxhwlen];	/* client hardware address */
1627dd7cddfSDavid du Colombier 	char	sname[64];		/* server host name (optional) */
1637dd7cddfSDavid du Colombier 	char	file[Maxfilelen];	/* boot file name */
1647dd7cddfSDavid du Colombier 	uchar	optmagic[4];
1657dd7cddfSDavid du Colombier 	uchar	optdata[Maxoptlen];
1667dd7cddfSDavid du Colombier };
167