162 lines · 3.7 KB · C
RawDownload
/* 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, 	/* 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,}; typedef struct Bootp	Bootp;struct Bootp{	/* Udphdr (included because of structure alignment on the alpha) */	uchar	udphdr[Udphdrsize]; 	uchar	op;			/* opcode */	uchar	htype;			/* hardware type */	uchar	hlen;			/* hardware address len */	uchar	hops;			/* hops */	uchar	xid[4];			/* a random number */	uchar	secs[2];		/* elapsed since client started booting */	uchar	flags[2];	uchar	ciaddr[IPv4addrlen];	/* client IP address (client tells server) */	uchar	yiaddr[IPv4addrlen];	/* client IP address (server tells client) */	uchar	siaddr[IPv4addrlen];	/* server IP address */	uchar	giaddr[IPv4addrlen];	/* gateway IP address */	uchar	chaddr[Maxhwlen];	/* client hardware address */	char	sname[64];		/* server host name (optional) */	char	file[Maxfilelen];	/* boot file name */	uchar	optmagic[4];	uchar	optdata[Maxoptlen];};