/* from */ enum { ETHER_HDR = 14, ET_IP = 0x800, IP_VER = 0x40, IP_HLEN = 0x05, IP_UDPPROTO = 17, UDP_EHSIZE = 22, UDP_PHDRSIZE = 12, UDP_HDRSIZE = 20, BPportsrc = 68, BPportdst = 67, Bootrequest = 1, Bootreply = 2, TFTPport = 69, // Timeout = 5000, /* milliseconds */ Timeout = 2000, /* milliseconds */ Tftp_READ = 1, Tftp_WRITE = 2, Tftp_DATA = 3, Tftp_ACK = 4, Tftp_ERROR = 5, Tftp_OACK = 6, /* extension: option(s) ack */ Defsegsize = 512, /* lengths of some bootp fields */ Maxhwlen= 16, Maxfilelen= 128, Maxoptlen= 312-4, /* bootp option types */ OBend= 255, OBpad= 0, OBmask= 1, }; /* * user level udp headers with control message "headers" */ enum { Udphdrsize= 52, /* size of a Udphdr */ }; typedef struct Udphdr Udphdr; struct Udphdr { uchar raddr[IPaddrlen]; /* V6 remote address */ uchar laddr[IPaddrlen]; /* V6 local address */ uchar ifcaddr[IPaddrlen]; /* V6 ifc addr msg was received on */ uchar rport[2]; /* remote port */ uchar lport[2]; /* local port */ }; /* * from 9load */ typedef struct Bootp Bootp; struct Bootp { uchar op; /* opcode */ uchar htype; /* hardware type */ uchar hlen; /* hardware address len */ uchar hops; /* hops */ uchar xid[4]; /* a random number */ uchar secs[2]; /* elapsed since client started booting */ uchar flags[2]; /* unused in bootp, flags in dhcp */ uchar ciaddr[4]; /* client IP address (client tells server) */ uchar yiaddr[4]; /* client IP address (server tells client) */ uchar siaddr[4]; /* server IP address */ uchar giaddr[4]; /* gateway IP address */ uchar chaddr[16]; /* client hardware address */ char sname[64]; /* server host name (optional) */ char file[128]; /* boot file name */ // char vend[128]; /* vendor-specific goo */ uchar optmagic[4]; uchar optdata[Maxoptlen]; }; typedef struct Pxenetaddr Pxenetaddr; struct Pxenetaddr { uchar ip[IPaddrlen]; ushort port; }; extern int chatty;