1*25210b06SDavid du Colombier /* from <ip.h> */ 2*25210b06SDavid du Colombier 3*25210b06SDavid du Colombier enum 4*25210b06SDavid du Colombier { 5*25210b06SDavid du Colombier ETHER_HDR = 14, 6*25210b06SDavid du Colombier ET_IP = 0x800, 7*25210b06SDavid du Colombier 8*25210b06SDavid du Colombier IP_VER = 0x40, 9*25210b06SDavid du Colombier IP_HLEN = 0x05, 10*25210b06SDavid du Colombier IP_UDPPROTO = 17, 11*25210b06SDavid du Colombier 12*25210b06SDavid du Colombier UDP_EHSIZE = 22, 13*25210b06SDavid du Colombier UDP_PHDRSIZE = 12, 14*25210b06SDavid du Colombier UDP_HDRSIZE = 20, 15*25210b06SDavid du Colombier 16*25210b06SDavid du Colombier BPportsrc = 68, 17*25210b06SDavid du Colombier BPportdst = 67, 18*25210b06SDavid du Colombier Bootrequest = 1, 19*25210b06SDavid du Colombier Bootreply = 2, 20*25210b06SDavid du Colombier 21*25210b06SDavid du Colombier TFTPport = 69, 22*25210b06SDavid du Colombier // Timeout = 5000, /* milliseconds */ 23*25210b06SDavid du Colombier Timeout = 2000, /* milliseconds */ 24*25210b06SDavid du Colombier Tftp_READ = 1, 25*25210b06SDavid du Colombier Tftp_WRITE = 2, 26*25210b06SDavid du Colombier Tftp_DATA = 3, 27*25210b06SDavid du Colombier Tftp_ACK = 4, 28*25210b06SDavid du Colombier Tftp_ERROR = 5, 29*25210b06SDavid du Colombier Tftp_OACK = 6, /* extension: option(s) ack */ 30*25210b06SDavid du Colombier Defsegsize = 512, 31*25210b06SDavid du Colombier 32*25210b06SDavid du Colombier /* lengths of some bootp fields */ 33*25210b06SDavid du Colombier Maxhwlen= 16, 34*25210b06SDavid du Colombier Maxfilelen= 128, 35*25210b06SDavid du Colombier Maxoptlen= 312-4, 36*25210b06SDavid du Colombier 37*25210b06SDavid du Colombier /* bootp option types */ 38*25210b06SDavid du Colombier OBend= 255, 39*25210b06SDavid du Colombier OBpad= 0, 40*25210b06SDavid du Colombier OBmask= 1, 41*25210b06SDavid du Colombier }; 42*25210b06SDavid du Colombier 43*25210b06SDavid du Colombier /* 44*25210b06SDavid du Colombier * user level udp headers with control message "headers" 45*25210b06SDavid du Colombier */ 46*25210b06SDavid du Colombier enum 47*25210b06SDavid du Colombier { 48*25210b06SDavid du Colombier Udphdrsize= 52, /* size of a Udphdr */ 49*25210b06SDavid du Colombier }; 50*25210b06SDavid du Colombier 51*25210b06SDavid du Colombier typedef struct Udphdr Udphdr; 52*25210b06SDavid du Colombier struct Udphdr 53*25210b06SDavid du Colombier { 54*25210b06SDavid du Colombier uchar raddr[IPaddrlen]; /* V6 remote address */ 55*25210b06SDavid du Colombier uchar laddr[IPaddrlen]; /* V6 local address */ 56*25210b06SDavid du Colombier uchar ifcaddr[IPaddrlen]; /* V6 ifc addr msg was received on */ 57*25210b06SDavid du Colombier uchar rport[2]; /* remote port */ 58*25210b06SDavid du Colombier uchar lport[2]; /* local port */ 59*25210b06SDavid du Colombier }; 60*25210b06SDavid du Colombier 61*25210b06SDavid du Colombier /* 62*25210b06SDavid du Colombier * from 9load 63*25210b06SDavid du Colombier */ 64*25210b06SDavid du Colombier typedef struct Bootp Bootp; 65*25210b06SDavid du Colombier struct Bootp 66*25210b06SDavid du Colombier { 67*25210b06SDavid du Colombier uchar op; /* opcode */ 68*25210b06SDavid du Colombier uchar htype; /* hardware type */ 69*25210b06SDavid du Colombier uchar hlen; /* hardware address len */ 70*25210b06SDavid du Colombier uchar hops; /* hops */ 71*25210b06SDavid du Colombier uchar xid[4]; /* a random number */ 72*25210b06SDavid du Colombier uchar secs[2]; /* elapsed since client started booting */ 73*25210b06SDavid du Colombier uchar flags[2]; /* unused in bootp, flags in dhcp */ 74*25210b06SDavid du Colombier uchar ciaddr[4]; /* client IP address (client tells server) */ 75*25210b06SDavid du Colombier uchar yiaddr[4]; /* client IP address (server tells client) */ 76*25210b06SDavid du Colombier uchar siaddr[4]; /* server IP address */ 77*25210b06SDavid du Colombier uchar giaddr[4]; /* gateway IP address */ 78*25210b06SDavid du Colombier uchar chaddr[16]; /* client hardware address */ 79*25210b06SDavid du Colombier char sname[64]; /* server host name (optional) */ 80*25210b06SDavid du Colombier char file[128]; /* boot file name */ 81*25210b06SDavid du Colombier 82*25210b06SDavid du Colombier // char vend[128]; /* vendor-specific goo */ 83*25210b06SDavid du Colombier uchar optmagic[4]; 84*25210b06SDavid du Colombier uchar optdata[Maxoptlen]; 85*25210b06SDavid du Colombier }; 86*25210b06SDavid du Colombier 87*25210b06SDavid du Colombier typedef struct Pxenetaddr Pxenetaddr; 88*25210b06SDavid du Colombier struct Pxenetaddr 89*25210b06SDavid du Colombier { 90*25210b06SDavid du Colombier uchar ip[IPaddrlen]; 91*25210b06SDavid du Colombier ushort port; 92*25210b06SDavid du Colombier }; 93*25210b06SDavid du Colombier 94*25210b06SDavid du Colombier extern int chatty; 95