ref: 94443daf8e248e65afc8d3f17f26efea22748b51
dir: /module/dhcp.m/
Dhcpclient: module
{
PATH: con "/dis/lib/dhcpclient.dis";
Bootconf: adt {
ip: string;
ipgw: string;
ipmask: string;
bootf: string;
bootip: string;
dhcpip: string;
siaddr: string;
serverid: string;
sys: string;
dom: string;
lease: int;
options: array of array of byte;
vendor: array of array of byte;
new: fn(): ref Bootconf;
get: fn(c: self ref Bootconf, n: int): array of byte;
getint: fn(c: self ref Bootconf, n: int): int;
getip: fn(c: self ref Bootconf, n: int): string;
getips: fn(c: self ref Bootconf, n: int): list of string;
gets: fn(c: self ref Bootconf, n: int): string;
put: fn(c: self ref Bootconf, n: int, a: array of byte);
putint: fn(c: self ref Bootconf, n: int, v: int);
putips: fn(c: self ref Bootconf, n: int, ips: list of string);
puts: fn(c: self ref Bootconf, n: int, s: string);
};
Lease: adt {
pid: int;
configs: chan of (ref Bootconf, string);
release: fn(l: self ref Lease);
};
init: fn();
tracing: fn(debug: int);
bootp: fn(net: string, ctlifc: ref Sys->FD, device: string, init: ref Bootconf): (ref Bootconf, string);
dhcp: fn(net: string, ctlifc: ref Sys->FD, device: string, init: ref Bootconf, options: array of int): (ref Bootconf, ref Lease, string);
applycfg: fn(net: string, ctlifc: ref Sys->FD, conf: ref Bootconf): string;
removecfg: fn(net: string, ctlifc: ref Sys->FD, conf: ref Bootconf): string;
# bootp options used here
Opad: con 0;
Oend: con 255;
Omask: con 1;
Orouter: con 3;
Odnsserver: con 6;
Ocookieserver: con 8;
Ohostname: con 12;
Odomainname: con 15;
Ontpserver: con 42;
Ovendorinfo: con 43;
Onetbiosns: con 44;
Osmtpserver: con 69;
Opop3server: con 70;
Owwwserver: con 72;
# dhcp options
Oipaddr: con 50;
Olease: con 51;
Ooverload: con 52;
Otype: con 53;
Oserverid: con 54;
Oparams: con 55;
Omessage: con 56;
Omaxmsg: con 57;
Orenewaltime: con 58;
Orebindingtime: con 59;
Ovendorclass: con 60;
Oclientid: con 61;
Otftpserver: con 66;
Obootfile: con 67;
Ovendor: con (1<<8);
OP9fs: con Ovendor|128; # plan 9 file server
OP9auth: con Ovendor|129; # plan 9 auth server
Infinite: con ~0; # lease
};