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