/* 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,
};
typedef struct Bootp Bootp;
struct Bootp
{
/* Udphdr (included because of structure alignment on the alpha) */
uchar udphdr[Udphdrsize];
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];
uchar ciaddr[IPv4addrlen]; /* client IP address (client tells server) */
uchar yiaddr[IPv4addrlen]; /* client IP address (server tells client) */
uchar siaddr[IPv4addrlen]; /* server IP address */
uchar giaddr[IPv4addrlen]; /* gateway IP address */
uchar chaddr[Maxhwlen]; /* client hardware address */
char sname[64]; /* server host name (optional) */
char file[Maxfilelen]; /* boot file name */
uchar optmagic[4];
uchar optdata[Maxoptlen];
};
|