1e47528f3SDavid du Colombier /* Dynamic Host Configuration Protocol / BOOTP */ 27dd7cddfSDavid du Colombier enum 37dd7cddfSDavid du Colombier { 47dd7cddfSDavid du Colombier OfferTimeout= 60, /* when an offer times out */ 57dd7cddfSDavid du Colombier MaxLease= 60*60, /* longest lease for dynamic binding */ 67dd7cddfSDavid du Colombier MinLease= 15*60, /* shortest lease for dynamic binding */ 77dd7cddfSDavid du Colombier StaticLease= 30*60, /* lease for static binding */ 87dd7cddfSDavid du Colombier 97dd7cddfSDavid du Colombier IPUDPHDRSIZE= 28, /* size of an IP plus UDP header */ 107dd7cddfSDavid du Colombier MINSUPPORTED= 576, /* biggest IP message the client must support */ 117dd7cddfSDavid du Colombier 127dd7cddfSDavid du Colombier /* lengths of some bootp fields */ 137dd7cddfSDavid du Colombier Maxhwlen= 16, 147dd7cddfSDavid du Colombier Maxfilelen= 128, 157dd7cddfSDavid du Colombier Maxoptlen= 312-4, 167dd7cddfSDavid du Colombier 177dd7cddfSDavid du Colombier /* bootp types */ 187dd7cddfSDavid du Colombier Bootrequest= 1, 197dd7cddfSDavid du Colombier Bootreply= 2, 207dd7cddfSDavid du Colombier 217dd7cddfSDavid du Colombier /* bootp flags */ 227dd7cddfSDavid du Colombier Fbroadcast= 1<<15, 237dd7cddfSDavid du Colombier 24e47528f3SDavid du Colombier /* dhcp v4 types */ 257dd7cddfSDavid du Colombier Discover= 1, 267dd7cddfSDavid du Colombier Offer= 2, 277dd7cddfSDavid du Colombier Request= 3, 287dd7cddfSDavid du Colombier Decline= 4, 297dd7cddfSDavid du Colombier Ack= 5, 307dd7cddfSDavid du Colombier Nak= 6, 317dd7cddfSDavid du Colombier Release= 7, 327dd7cddfSDavid du Colombier Inform= 8, 337dd7cddfSDavid du Colombier 347dd7cddfSDavid du Colombier /* bootp option types */ 357dd7cddfSDavid du Colombier OBend= 255, 367dd7cddfSDavid du Colombier OBpad= 0, 377dd7cddfSDavid du Colombier OBmask= 1, 387dd7cddfSDavid du Colombier OBtimeoff= 2, 397dd7cddfSDavid du Colombier OBrouter= 3, 407dd7cddfSDavid du Colombier OBtimeserver= 4, 417dd7cddfSDavid du Colombier OBnameserver= 5, 427dd7cddfSDavid du Colombier OBdnserver= 6, 437dd7cddfSDavid du Colombier OBlogserver= 7, 447dd7cddfSDavid du Colombier OBcookieserver= 8, 457dd7cddfSDavid du Colombier OBlprserver= 9, 467dd7cddfSDavid du Colombier OBimpressserver= 10, 477dd7cddfSDavid du Colombier OBrlserver= 11, 480a84db5eSDavid du Colombier OBhostname= 12, /* 0x0c */ 497dd7cddfSDavid du Colombier OBbflen= 13, 507dd7cddfSDavid du Colombier OBdumpfile= 14, 517dd7cddfSDavid du Colombier OBdomainname= 15, 527dd7cddfSDavid du Colombier OBswapserver= 16, /* 0x10 */ 537dd7cddfSDavid du Colombier OBrootpath= 17, 547dd7cddfSDavid du Colombier OBextpath= 18, 557dd7cddfSDavid du Colombier OBipforward= 19, 567dd7cddfSDavid du Colombier OBnonlocal= 20, 577dd7cddfSDavid du Colombier OBpolicyfilter= 21, 587dd7cddfSDavid du Colombier OBmaxdatagram= 22, 597dd7cddfSDavid du Colombier OBttl= 23, 607dd7cddfSDavid du Colombier OBpathtimeout= 24, 617dd7cddfSDavid du Colombier OBpathplateau= 25, 627dd7cddfSDavid du Colombier OBmtu= 26, 637dd7cddfSDavid du Colombier OBsubnetslocal= 27, 647dd7cddfSDavid du Colombier OBbaddr= 28, 657dd7cddfSDavid du Colombier OBdiscovermask= 29, 667dd7cddfSDavid du Colombier OBsupplymask= 30, 677dd7cddfSDavid du Colombier OBdiscoverrouter= 31, 687dd7cddfSDavid du Colombier OBrsserver= 32, /* 0x20 */ 697dd7cddfSDavid du Colombier OBstaticroutes= 33, 707dd7cddfSDavid du Colombier OBtrailerencap= 34, 717dd7cddfSDavid du Colombier OBarptimeout= 35, 727dd7cddfSDavid du Colombier OBetherencap= 36, 737dd7cddfSDavid du Colombier OBtcpttl= 37, 747dd7cddfSDavid du Colombier OBtcpka= 38, 757dd7cddfSDavid du Colombier OBtcpkag= 39, 767dd7cddfSDavid du Colombier OBnisdomain= 40, 777dd7cddfSDavid du Colombier OBniserver= 41, 787dd7cddfSDavid du Colombier OBntpserver= 42, 797dd7cddfSDavid du Colombier OBvendorinfo= 43, /* 0x2b */ 807dd7cddfSDavid du Colombier OBnetbiosns= 44, 817dd7cddfSDavid du Colombier OBnetbiosdds= 45, 827dd7cddfSDavid du Colombier OBnetbiostype= 46, 837dd7cddfSDavid du Colombier OBnetbiosscope= 47, 847dd7cddfSDavid du Colombier OBxfontserver= 48, /* 0x30 */ 857dd7cddfSDavid du Colombier OBxdispmanager= 49, 867dd7cddfSDavid du Colombier OBnisplusdomain= 64, /* 0x40 */ 877dd7cddfSDavid du Colombier OBnisplusserver= 65, 887dd7cddfSDavid du Colombier OBhomeagent= 68, 897dd7cddfSDavid du Colombier OBsmtpserver= 69, 907dd7cddfSDavid du Colombier OBpop3server= 70, 917dd7cddfSDavid du Colombier OBnntpserver= 71, 927dd7cddfSDavid du Colombier OBwwwserver= 72, 937dd7cddfSDavid du Colombier OBfingerserver= 73, 947dd7cddfSDavid du Colombier OBircserver= 74, 957dd7cddfSDavid du Colombier OBstserver= 75, 967dd7cddfSDavid du Colombier OBstdaserver= 76, 977dd7cddfSDavid du Colombier 98e47528f3SDavid du Colombier /* dhcp v4 options */ 997dd7cddfSDavid du Colombier ODipaddr= 50, /* 0x32 */ 1007dd7cddfSDavid du Colombier ODlease= 51, 1017dd7cddfSDavid du Colombier ODoverload= 52, 1027dd7cddfSDavid du Colombier ODtype= 53, /* 0x35 */ 1037dd7cddfSDavid du Colombier ODserverid= 54, /* 0x36 */ 10480ee5cbfSDavid du Colombier ODparams= 55, /* 0x37 */ 1057dd7cddfSDavid du Colombier ODmessage= 56, 1067dd7cddfSDavid du Colombier ODmaxmsg= 57, 1077dd7cddfSDavid du Colombier ODrenewaltime= 58, 1087dd7cddfSDavid du Colombier ODrebindingtime= 59, 1097dd7cddfSDavid du Colombier ODvendorclass= 60, 1107dd7cddfSDavid du Colombier ODclientid= 61, /* 0x3d */ 1117dd7cddfSDavid du Colombier ODtftpserver= 66, 1127dd7cddfSDavid du Colombier ODbootfile= 67, 1137dd7cddfSDavid du Colombier 114*b94bb474SDavid du Colombier ODpxearch= 93, /* see rfc 4578 */ 115*b94bb474SDavid du Colombier ODpxeni= 94, 116*b94bb474SDavid du Colombier ODpxeguid= 97, 117*b94bb474SDavid du Colombier 1180a84db5eSDavid du Colombier /* plan9 vendor info options, v4 addresses only (deprecated) */ 1190a84db5eSDavid du Colombier OP9fsv4= 128, /* plan9 file servers */ 1200a84db5eSDavid du Colombier OP9authv4= 129, /* plan9 auth servers */ 1210a84db5eSDavid du Colombier 1220a84db5eSDavid du Colombier /* plan9 vendor info options, textual addresses, thus v4 or v6 */ 1230a84db5eSDavid du Colombier OP9fs= 130, /* plan9 file servers */ 1240a84db5eSDavid du Colombier OP9auth= 131, /* plan9 auth servers */ 1250a84db5eSDavid du Colombier OP9ipaddr= 132, /* client's address */ 1260a84db5eSDavid du Colombier OP9ipmask= 133, /* client's subnet mask */ 1270a84db5eSDavid du Colombier OP9ipgw= 134, /* client's gateway */ 1280a84db5eSDavid du Colombier /* OP9dns= 135, /* dns servers */ 1297dd7cddfSDavid du Colombier }; 1307dd7cddfSDavid du Colombier 1317dd7cddfSDavid du Colombier /* a lease that never expires */ 132e47528f3SDavid du Colombier #define Lforever ~0UL 1337dd7cddfSDavid du Colombier 1347dd7cddfSDavid du Colombier /* dhcp states */ 1357dd7cddfSDavid du Colombier enum { 1367dd7cddfSDavid du Colombier Sinit, 1377dd7cddfSDavid du Colombier Sselecting, 1387dd7cddfSDavid du Colombier Srequesting, 1397dd7cddfSDavid du Colombier Sbound, 1407dd7cddfSDavid du Colombier Srenewing, 1417dd7cddfSDavid du Colombier Srebinding, 1427dd7cddfSDavid du Colombier }; 1437dd7cddfSDavid du Colombier 1447dd7cddfSDavid du Colombier typedef struct Bootp Bootp; 1457dd7cddfSDavid du Colombier struct Bootp 1467dd7cddfSDavid du Colombier { 1477dd7cddfSDavid du Colombier /* Udphdr (included because of structure alignment on the alpha) */ 148f27a9a5aSDavid du Colombier uchar udphdr[Udphdrsize]; 1497dd7cddfSDavid du Colombier 1507dd7cddfSDavid du Colombier uchar op; /* opcode */ 1517dd7cddfSDavid du Colombier uchar htype; /* hardware type */ 1527dd7cddfSDavid du Colombier uchar hlen; /* hardware address len */ 1537dd7cddfSDavid du Colombier uchar hops; /* hops */ 1547dd7cddfSDavid du Colombier uchar xid[4]; /* a random number */ 1557dd7cddfSDavid du Colombier uchar secs[2]; /* elapsed since client started booting */ 1567dd7cddfSDavid du Colombier uchar flags[2]; 1577dd7cddfSDavid du Colombier uchar ciaddr[IPv4addrlen]; /* client IP address (client tells server) */ 1587dd7cddfSDavid du Colombier uchar yiaddr[IPv4addrlen]; /* client IP address (server tells client) */ 1597dd7cddfSDavid du Colombier uchar siaddr[IPv4addrlen]; /* server IP address */ 1607dd7cddfSDavid du Colombier uchar giaddr[IPv4addrlen]; /* gateway IP address */ 1617dd7cddfSDavid du Colombier uchar chaddr[Maxhwlen]; /* client hardware address */ 1627dd7cddfSDavid du Colombier char sname[64]; /* server host name (optional) */ 1637dd7cddfSDavid du Colombier char file[Maxfilelen]; /* boot file name */ 1647dd7cddfSDavid du Colombier uchar optmagic[4]; 1657dd7cddfSDavid du Colombier uchar optdata[Maxoptlen]; 1667dd7cddfSDavid du Colombier }; 167