blob: 782533fa76c7c8da12b432711ed9a0f8b658625c [file] [log] [blame]
/*
* 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];
};