| /* |
| * This file is part of the UCB release of Plan 9. It is subject to the license |
| * terms in the LICENSE file found in the top-level directory of this |
| * distribution and at http://akaros.cs.berkeley.edu/files/Plan9License. No |
| * part of the UCB release of Plan 9, including this file, may be copied, |
| * modified, propagated, or distributed except according to the terms contained |
| * in the LICENSE file. |
| */ |
| |
| // Dynamic Host Configuration Protocol / BOOTP |
| enum { |
| OfferTimeout = 60, // when an offer times out |
| MaxLease = 60 * 60, // longest lease for dynamic binding |
| MinLease = 15 * 60, // shortest lease for dynamic binding |
| StaticLease = 30 * 60, // lease for static binding |
| |
| IPUDPHDRSIZE = 28, // size of an IP plus UDP header |
| MINSUPPORTED = 576, // biggest IP message the client must support |
| |
| // lengths of some bootp fields |
| Maxhwlen = 16, |
| Maxfilelen = 128, |
| Maxoptlen = 312 - 4, |
| |
| // bootp types |
| Bootrequest = 1, |
| Bootreply = 2, |
| |
| // bootp flags |
| Fbroadcast = 1 << 15, |
| |
| // dhcp v4 types |
| Discover = 1, |
| Offer = 2, |
| Request = 3, |
| Decline = 4, |
| Ack = 5, |
| Nak = 6, |
| Release = 7, |
| Inform = 8, |
| |
| // bootp option types |
| OBend = 255, |
| OBpad = 0, |
| OBmask = 1, |
| OBtimeoff = 2, |
| OBrouter = 3, |
| OBtimeserver = 4, |
| OBnameserver = 5, |
| OBdnserver = 6, |
| OBlogserver = 7, |
| OBcookieserver = 8, |
| OBlprserver = 9, |
| OBimpressserver = 10, |
| OBrlserver = 11, |
| OBhostname = 12, // 0x0c |
| OBbflen = 13, |
| OBdumpfile = 14, |
| OBdomainname = 15, |
| OBswapserver = 16, // 0x10 |
| OBrootpath = 17, |
| OBextpath = 18, |
| OBipforward = 19, |
| OBnonlocal = 20, |
| OBpolicyfilter = 21, |
| OBmaxdatagram = 22, |
| OBttl = 23, |
| OBpathtimeout = 24, |
| OBpathplateau = 25, |
| OBmtu = 26, |
| OBsubnetslocal = 27, |
| OBbaddr = 28, |
| OBdiscovermask = 29, |
| OBsupplymask = 30, |
| OBdiscoverrouter = 31, |
| OBrsserver = 32, // 0x20 |
| OBstaticroutes = 33, |
| OBtrailerencap = 34, |
| OBarptimeout = 35, |
| OBetherencap = 36, |
| OBtcpttl = 37, |
| OBtcpka = 38, |
| OBtcpkag = 39, |
| OBnisdomain = 40, |
| OBniserver = 41, |
| OBntpserver = 42, |
| OBvendorinfo = 43, // 0x2b |
| OBnetbiosns = 44, |
| OBnetbiosdds = 45, |
| OBnetbiostype = 46, |
| OBnetbiosscope = 47, |
| OBxfontserver = 48, // 0x30 |
| OBxdispmanager = 49, |
| OBnisplusdomain = 64, // 0x40 |
| OBnisplusserver = 65, |
| OBhomeagent = 68, |
| OBsmtpserver = 69, |
| OBpop3server = 70, |
| OBnntpserver = 71, |
| OBwwwserver = 72, |
| OBfingerserver = 73, |
| OBircserver = 74, |
| OBstserver = 75, |
| OBstdaserver = 76, |
| |
| // dhcp v4 options |
| ODipaddr = 50, // 0x32 |
| ODlease = 51, |
| ODoverload = 52, |
| ODtype = 53, // 0x35 |
| ODserverid = 54, // 0x36 |
| ODparams = 55, // 0x37 |
| ODmessage = 56, |
| ODmaxmsg = 57, |
| ODrenewaltime = 58, |
| ODrebindingtime = 59, |
| ODvendorclass = 60, |
| ODclientid = 61, // 0x3d |
| ODtftpserver = 66, |
| ODbootfile = 67, |
| |
| ODpxearch = 93, // see rfc 4578 |
| ODpxeni = 94, |
| ODpxeguid = 97, |
| |
| // plan9 vendor info options, v4 addresses only (deprecated) |
| OP9fsv4 = 128, // plan9 file servers |
| OP9authv4 = 129, // plan9 auth servers |
| |
| // plan9 vendor info options, textual addresses, thus v4 or v6 |
| OP9fs = 130, // plan9 file servers |
| OP9auth = 131, // plan9 auth servers |
| OP9ipaddr = 132, // client's address |
| OP9ipmask = 133, // client's subnet mask |
| OP9ipgw = 134, // client's gateway |
| // OP9dns = 135, // dns servers |
| }; |
| |
| // a lease that never expires |
| #define Lforever ~0UL |
| |
| // dhcp states |
| enum { |
| Sinit, |
| Sselecting, |
| Srequesting, |
| Sbound, |
| Srenewing, |
| Srebinding, |
| }; |
| |
| struct bootp { |
| // Udphdr (included because of structure alignment on the alpha) |
| uint8_t udphdr[Udphdrsize]; |
| |
| uint8_t op; // opcode |
| uint8_t htype; // hardware type |
| uint8_t hlen; // hardware address len |
| uint8_t hops; // hops |
| uint8_t xid[4]; // a random number |
| uint8_t secs[2]; // elapsed since client started booting |
| uint8_t flags[2]; |
| uint8_t ciaddr[IPv4addrlen]; // client IP address (client tells server) |
| uint8_t yiaddr[IPv4addrlen]; // client IP address (server tells client) |
| uint8_t siaddr[IPv4addrlen]; // server IP address |
| uint8_t giaddr[IPv4addrlen]; // gateway IP address |
| uint8_t chaddr[Maxhwlen]; // client hardware address |
| char sname[64]; // server host name (optional) |
| char file[Maxfilelen]; // boot file name |
| uint8_t optmagic[4]; |
| uint8_t optdata[Maxoptlen]; |
| }; |