xref: /plan9/sys/src/9/pcboot/pxe.h (revision 25210b069a6ed8c047fa67220cf1dff32812f121)
1*25210b06SDavid du Colombier /* from <ip.h> */
2*25210b06SDavid du Colombier 
3*25210b06SDavid du Colombier enum
4*25210b06SDavid du Colombier {
5*25210b06SDavid du Colombier 	ETHER_HDR	= 14,
6*25210b06SDavid du Colombier 	ET_IP		= 0x800,
7*25210b06SDavid du Colombier 
8*25210b06SDavid du Colombier 	IP_VER		= 0x40,
9*25210b06SDavid du Colombier 	IP_HLEN		= 0x05,
10*25210b06SDavid du Colombier  	IP_UDPPROTO	= 17,
11*25210b06SDavid du Colombier 
12*25210b06SDavid du Colombier 	UDP_EHSIZE	= 22,
13*25210b06SDavid du Colombier 	UDP_PHDRSIZE	= 12,
14*25210b06SDavid du Colombier 	UDP_HDRSIZE	= 20,
15*25210b06SDavid du Colombier 
16*25210b06SDavid du Colombier 	BPportsrc	= 68,
17*25210b06SDavid du Colombier 	BPportdst	= 67,
18*25210b06SDavid du Colombier 	Bootrequest 	= 1,
19*25210b06SDavid du Colombier 	Bootreply   	= 2,
20*25210b06SDavid du Colombier 
21*25210b06SDavid du Colombier 	TFTPport	= 69,
22*25210b06SDavid du Colombier //	Timeout		= 5000,	/* milliseconds */
23*25210b06SDavid du Colombier 	Timeout		= 2000,	/* milliseconds */
24*25210b06SDavid du Colombier 	Tftp_READ	= 1,
25*25210b06SDavid du Colombier 	Tftp_WRITE	= 2,
26*25210b06SDavid du Colombier 	Tftp_DATA	= 3,
27*25210b06SDavid du Colombier 	Tftp_ACK	= 4,
28*25210b06SDavid du Colombier 	Tftp_ERROR	= 5,
29*25210b06SDavid du Colombier 	Tftp_OACK	= 6,		/* extension: option(s) ack */
30*25210b06SDavid du Colombier 	Defsegsize	= 512,
31*25210b06SDavid du Colombier 
32*25210b06SDavid du Colombier 	/* lengths of some bootp fields */
33*25210b06SDavid du Colombier 	Maxhwlen=	16,
34*25210b06SDavid du Colombier 	Maxfilelen=	128,
35*25210b06SDavid du Colombier 	Maxoptlen=	312-4,
36*25210b06SDavid du Colombier 
37*25210b06SDavid du Colombier 	/* bootp option types */
38*25210b06SDavid du Colombier 	OBend=			255,
39*25210b06SDavid du Colombier 	OBpad=			0,
40*25210b06SDavid du Colombier 	OBmask=			1,
41*25210b06SDavid du Colombier };
42*25210b06SDavid du Colombier 
43*25210b06SDavid du Colombier /*
44*25210b06SDavid du Colombier  *  user level udp headers with control message "headers"
45*25210b06SDavid du Colombier  */
46*25210b06SDavid du Colombier enum
47*25210b06SDavid du Colombier {
48*25210b06SDavid du Colombier 	Udphdrsize=	52,	/* size of a Udphdr */
49*25210b06SDavid du Colombier };
50*25210b06SDavid du Colombier 
51*25210b06SDavid du Colombier typedef struct Udphdr Udphdr;
52*25210b06SDavid du Colombier struct Udphdr
53*25210b06SDavid du Colombier {
54*25210b06SDavid du Colombier 	uchar	raddr[IPaddrlen];	/* V6 remote address */
55*25210b06SDavid du Colombier 	uchar	laddr[IPaddrlen];	/* V6 local address */
56*25210b06SDavid du Colombier 	uchar	ifcaddr[IPaddrlen];	/* V6 ifc addr msg was received on */
57*25210b06SDavid du Colombier 	uchar	rport[2];		/* remote port */
58*25210b06SDavid du Colombier 	uchar	lport[2];		/* local port */
59*25210b06SDavid du Colombier };
60*25210b06SDavid du Colombier 
61*25210b06SDavid du Colombier /*
62*25210b06SDavid du Colombier  * from 9load
63*25210b06SDavid du Colombier  */
64*25210b06SDavid du Colombier typedef struct Bootp Bootp;
65*25210b06SDavid du Colombier struct Bootp
66*25210b06SDavid du Colombier {
67*25210b06SDavid du Colombier 	uchar	op;		/* opcode */
68*25210b06SDavid du Colombier 	uchar	htype;		/* hardware type */
69*25210b06SDavid du Colombier 	uchar	hlen;		/* hardware address len */
70*25210b06SDavid du Colombier 	uchar	hops;		/* hops */
71*25210b06SDavid du Colombier 	uchar	xid[4];		/* a random number */
72*25210b06SDavid du Colombier 	uchar	secs[2];	/* elapsed since client started booting */
73*25210b06SDavid du Colombier 	uchar	flags[2];	/* unused in bootp, flags in dhcp */
74*25210b06SDavid du Colombier 	uchar	ciaddr[4];	/* client IP address (client tells server) */
75*25210b06SDavid du Colombier 	uchar	yiaddr[4];	/* client IP address (server tells client) */
76*25210b06SDavid du Colombier 	uchar	siaddr[4];	/* server IP address */
77*25210b06SDavid du Colombier 	uchar	giaddr[4];	/* gateway IP address */
78*25210b06SDavid du Colombier 	uchar	chaddr[16];	/* client hardware address */
79*25210b06SDavid du Colombier 	char	sname[64];	/* server host name (optional) */
80*25210b06SDavid du Colombier 	char	file[128];	/* boot file name */
81*25210b06SDavid du Colombier 
82*25210b06SDavid du Colombier //	char	vend[128];	/* vendor-specific goo */
83*25210b06SDavid du Colombier 	uchar	optmagic[4];
84*25210b06SDavid du Colombier 	uchar	optdata[Maxoptlen];
85*25210b06SDavid du Colombier };
86*25210b06SDavid du Colombier 
87*25210b06SDavid du Colombier typedef struct Pxenetaddr Pxenetaddr;
88*25210b06SDavid du Colombier struct Pxenetaddr
89*25210b06SDavid du Colombier {
90*25210b06SDavid du Colombier 	uchar	ip[IPaddrlen];
91*25210b06SDavid du Colombier 	ushort	port;
92*25210b06SDavid du Colombier };
93*25210b06SDavid du Colombier 
94*25210b06SDavid du Colombier extern int chatty;
95