xref: /plan9-contrib/sys/src/boot/vt4/ip.h (revision da917039c7f233c1a27d212bf012c6afa758af39)
1*da917039SDavid du Colombier typedef struct Udphdr Udphdr;
2*da917039SDavid du Colombier struct Udphdr
3*da917039SDavid du Colombier {
4*da917039SDavid du Colombier 	uchar	d[6];		/* Ethernet destination */
5*da917039SDavid du Colombier 	uchar	s[6];		/* Ethernet source */
6*da917039SDavid du Colombier 	uchar	type[2];	/* Ethernet packet type */
7*da917039SDavid du Colombier 
8*da917039SDavid du Colombier 	uchar	vihl;		/* Version and header length */
9*da917039SDavid du Colombier 	uchar	tos;		/* Type of service */
10*da917039SDavid du Colombier 	uchar	length[2];	/* packet length */
11*da917039SDavid du Colombier 	uchar	id[2];		/* Identification */
12*da917039SDavid du Colombier 	uchar	frag[2];	/* Fragment information */
13*da917039SDavid du Colombier 
14*da917039SDavid du Colombier 	/* Udp pseudo ip really starts here */
15*da917039SDavid du Colombier 	uchar	ttl;
16*da917039SDavid du Colombier 	uchar	udpproto;	/* Protocol */
17*da917039SDavid du Colombier 	uchar	udpplen[2];	/* Header plus data length */
18*da917039SDavid du Colombier 	uchar	udpsrc[4];	/* Ip source */
19*da917039SDavid du Colombier 	uchar	udpdst[4];	/* Ip destination */
20*da917039SDavid du Colombier 	uchar	udpsport[2];	/* Source port */
21*da917039SDavid du Colombier 	uchar	udpdport[2];	/* Destination port */
22*da917039SDavid du Colombier 	uchar	udplen[2];	/* data length */
23*da917039SDavid du Colombier 	uchar	udpcksum[2];	/* Checksum */
24*da917039SDavid du Colombier };
25*da917039SDavid du Colombier 
26*da917039SDavid du Colombier typedef struct Etherhdr Etherhdr;
27*da917039SDavid du Colombier struct Etherhdr
28*da917039SDavid du Colombier {
29*da917039SDavid du Colombier 	uchar	d[6];
30*da917039SDavid du Colombier 	uchar	s[6];
31*da917039SDavid du Colombier 	uchar	type[2];
32*da917039SDavid du Colombier 
33*da917039SDavid du Colombier 	/* Now we have the ip fields */
34*da917039SDavid du Colombier 	uchar	vihl;		/* Version and header length */
35*da917039SDavid du Colombier 	uchar	tos;		/* Type of service */
36*da917039SDavid du Colombier 	uchar	length[2];	/* packet length */
37*da917039SDavid du Colombier 	uchar	id[2];		/* Identification */
38*da917039SDavid du Colombier 	uchar	frag[2];	/* Fragment information */
39*da917039SDavid du Colombier 	uchar	ttl;		/* Time to live */
40*da917039SDavid du Colombier 	uchar	proto;		/* Protocol */
41*da917039SDavid du Colombier 	uchar	cksum[2];	/* Header checksum */
42*da917039SDavid du Colombier 	uchar	src[4];		/* Ip source */
43*da917039SDavid du Colombier 	uchar	dst[4];		/* Ip destination */
44*da917039SDavid du Colombier };
45*da917039SDavid du Colombier 
46*da917039SDavid du Colombier enum
47*da917039SDavid du Colombier {
48*da917039SDavid du Colombier 	IP_VER		= 0x40,
49*da917039SDavid du Colombier 	IP_HLEN		= 0x05,
50*da917039SDavid du Colombier  	UDP_EHSIZE	= 22,
51*da917039SDavid du Colombier 	UDP_PHDRSIZE	= 12,
52*da917039SDavid du Colombier 	UDP_HDRSIZE	= 20,
53*da917039SDavid du Colombier 	ETHER_HDR	= 14,
54*da917039SDavid du Colombier 	IP_UDPPROTO	= 17,
55*da917039SDavid du Colombier 	ET_IP		= 0x800,
56*da917039SDavid du Colombier 	Bcastip		= 0xffffffff,
57*da917039SDavid du Colombier 	BPportsrc	= 68,
58*da917039SDavid du Colombier 	BPportdst	= 67,
59*da917039SDavid du Colombier 	TFTPport	= 69,
60*da917039SDavid du Colombier 	Timeout		= 2000,	/* milliseconds; was 5000 */
61*da917039SDavid du Colombier 	Bootrequest 	= 1,
62*da917039SDavid du Colombier 	Bootreply   	= 2,
63*da917039SDavid du Colombier 	Tftp_READ	= 1,
64*da917039SDavid du Colombier 	Tftp_WRITE	= 2,
65*da917039SDavid du Colombier 	Tftp_DATA	= 3,
66*da917039SDavid du Colombier 	Tftp_ACK	= 4,
67*da917039SDavid du Colombier 	Tftp_ERROR	= 5,
68*da917039SDavid du Colombier 	Segsize		= 512,
69*da917039SDavid du Colombier 	TFTPSZ		= Segsize+10,
70*da917039SDavid du Colombier };
71*da917039SDavid du Colombier 
72*da917039SDavid du Colombier typedef struct Bootp Bootp;
73*da917039SDavid du Colombier struct Bootp
74*da917039SDavid du Colombier {
75*da917039SDavid du Colombier 	uchar	op;		/* opcode */
76*da917039SDavid du Colombier 	uchar	htype;		/* hardware type */
77*da917039SDavid du Colombier 	uchar	hlen;		/* hardware address len */
78*da917039SDavid du Colombier 	uchar	hops;		/* hops */
79*da917039SDavid du Colombier 	uchar	xid[4];		/* a random number */
80*da917039SDavid du Colombier 	uchar	secs[2];	/* elapsed since client started booting */
81*da917039SDavid du Colombier 	uchar	pad[2];
82*da917039SDavid du Colombier 	uchar	ciaddr[4];	/* client IP address (client tells server) */
83*da917039SDavid du Colombier 	uchar	yiaddr[4];	/* client IP address (server tells client) */
84*da917039SDavid du Colombier 	uchar	siaddr[4];	/* server IP address */
85*da917039SDavid du Colombier 	uchar	giaddr[4];	/* gateway IP address */
86*da917039SDavid du Colombier 	uchar	chaddr[16];	/* client hardware address */
87*da917039SDavid du Colombier 	char	sname[64];	/* server host name (optional) */
88*da917039SDavid du Colombier 	char	file[128];	/* boot file name */
89*da917039SDavid du Colombier 	char	vend[128];	/* vendor-specific goo */
90*da917039SDavid du Colombier };
91*da917039SDavid du Colombier 
92*da917039SDavid du Colombier typedef struct Netaddr Netaddr;
93*da917039SDavid du Colombier struct Netaddr
94*da917039SDavid du Colombier {
95*da917039SDavid du Colombier 	ulong	ip;
96*da917039SDavid du Colombier 	ushort	port;
97*da917039SDavid du Colombier 	char	ea[Eaddrlen];
98*da917039SDavid du Colombier };
99*da917039SDavid du Colombier 
100*da917039SDavid du Colombier extern int	eipfmt(Fmt*);
101