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