mirror of
https://github.com/sheumann/hush.git
synced 2024-12-23 05:29:58 +00:00
145 lines
5.5 KiB
Plaintext
145 lines
5.5 KiB
Plaintext
udhcp client (udhcpc)
|
|
--------------------
|
|
|
|
The udhcp client negotiates a lease with the DHCP server and notifies
|
|
a set of scripts when a leases is obtained or lost.
|
|
|
|
|
|
command line options
|
|
-------------------
|
|
|
|
The command line options for the udhcp client are:
|
|
|
|
-c, --clientid=CLIENTID Set client identifier. Type is first char.
|
|
-C, --clientid-none Suppress default client identifier
|
|
-V, --vendorclass=CLASSID Set vendor class identifier
|
|
-H, --hostname=HOSTNAME Client hostname
|
|
-h, Alias for -H
|
|
-F, --fqdn=FQDN Client fully qualified domain name
|
|
-f, --foreground Do not fork after getting lease
|
|
-b, --background Fork to background if lease cannot be
|
|
immediately negotiated.
|
|
-i, --interface=INTERFACE Interface to use (default: eth0)
|
|
-n, --now Exit with failure if lease cannot be
|
|
immediately negotiated.
|
|
-p, --pidfile=file Store process ID of daemon in file
|
|
-q, --quit Quit after obtaining lease
|
|
-r, --request=IP IP address to request (default: none)
|
|
-s, --script=file Run file at dhcp events (default:
|
|
/usr/share/udhcpc/default.script)
|
|
-v, --version Display version
|
|
|
|
|
|
If the requested IP address cannot be obtained, the client accepts the
|
|
address that the server offers.
|
|
|
|
|
|
udhcp client scripts
|
|
-------------------
|
|
|
|
When an event occurs, udhcpc calls the action script. udhcpc never does
|
|
any configuration of the network interface itself, but instead relies on
|
|
a set of scripts. The script by default is
|
|
/usr/share/udhcpc/default.script but this can be changed via the command
|
|
line arguments. The three possible arguments to the script are:
|
|
|
|
deconfig: This argument is used when udhcpc starts, and
|
|
when a leases is lost. The script must put the interface in an
|
|
up, but deconfigured state, ie: ifconfig $interface 0.0.0.0.
|
|
|
|
bound: This argument is used when udhcpc moves from an
|
|
unbound, to a bound state. All of the paramaters are set in
|
|
enviromental variables, The script should configure the interface,
|
|
and set any other relavent parameters (default gateway, dns server,
|
|
etc).
|
|
|
|
renew: This argument is used when a DHCP lease is renewed. All of
|
|
the paramaters are set in enviromental variables. This argument is
|
|
used when the interface is already configured, so the IP address,
|
|
will not change, however, the other DHCP paramaters, such as the
|
|
default gateway, subnet mask, and dns server may change.
|
|
|
|
nak: This argument is used with udhcpc receives a NAK message.
|
|
The script with the deconfig argument will be called directly
|
|
afterwards, so no changes to the network interface are neccessary.
|
|
This hook is provided for purely informational purposes (the
|
|
message option may contain a reason for the NAK).
|
|
|
|
The paramaters for enviromental variables are as follows:
|
|
|
|
$HOME - The set $HOME env or "/"
|
|
$PATH - the set $PATH env or "/bin:/usr/bin:/sbin:/usr/sbin"
|
|
$1 - What action the script should perform
|
|
interface - The interface this was obtained on
|
|
ip - The obtained IP
|
|
mask - The number of bits in the netmask (ie: 24)
|
|
siaddr - The bootp next server option
|
|
sname - The bootp server name option
|
|
boot_file - The bootp boot file option
|
|
subnet - The assigend subnet mask
|
|
timezone - Offset in seconds from UTC
|
|
router - A list of routers
|
|
timesvr - A list of time servers
|
|
namesvr - A list of IEN 116 name servers
|
|
dns - A list of DNS server
|
|
logsvr - A list of MIT-LCS UDP log servers
|
|
cookiesvr - A list of RFC 865 cookie servers
|
|
lprsvr - A list of LPR servers
|
|
hostname - The assigned hostname
|
|
bootsize - The length in 512 octect blocks of the bootfile
|
|
domain - The domain name of the network
|
|
swapsvr - The IP address of the client's swap server
|
|
rootpath - The path name of the client's root disk
|
|
ipttl - The TTL to use for this network
|
|
mtu - The MTU to use for this network
|
|
broadcast - The broadcast address for this network
|
|
ntpsrv - A list of NTP servers
|
|
wins - A list of WINS servers
|
|
lease - The lease time, in seconds
|
|
dhcptype - DHCP message type (safely ignored)
|
|
serverid - The IP of the server
|
|
message - Reason for a DHCPNAK
|
|
tftp - The TFTP server name
|
|
bootfile - The bootfile name
|
|
|
|
additional options are easily added in options.c.
|
|
|
|
|
|
note on udhcpc's random seed
|
|
---------------------------
|
|
|
|
udhcpc will seed its random number generator (used for generating xid's)
|
|
by reading /dev/urandom. If you have a lot of embedded systems on the same
|
|
network, with no entropy, you can either seed /dev/urandom by a method of
|
|
your own, or doing the following on startup:
|
|
|
|
ifconfig eth0 > /dev/urandom
|
|
|
|
in order to seed /dev/urandom with some data (mac address) unique to your
|
|
system. If reading /dev/urandom fails, udhcpc will fall back to its old
|
|
behavior of seeding with time(0).
|
|
|
|
|
|
signals accepted by udhcpc
|
|
-------------------------
|
|
|
|
udhcpc also responds to SIGUSR1 and SIGUSR2. SIGUSR1 will force a renew state,
|
|
and SIGUSR2 will force a release of the current lease, and cause udhcpc to
|
|
go into an inactive state (until it is killed, or receives a SIGUSR1). You do
|
|
not need to sleep between sending signals, as signals received are processed
|
|
sequencially in the order they are received.
|
|
|
|
|
|
compile time options
|
|
-------------------
|
|
|
|
options.c contains a set of dhcp options for the client:
|
|
|
|
name[10]: The name of the option as it will appear in scripts
|
|
|
|
flags: The type of option, as well as if it will be requested
|
|
by the client (OPTION_REQ)
|
|
|
|
code: The DHCP code for this option
|
|
|