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