From 0109516837bca3e560b95ab5c00c7bc0012c33f8 Mon Sep 17 00:00:00 2001 From: Russ Dill Date: Thu, 31 Oct 2002 18:02:09 +0000 Subject: [PATCH] split up README --- ChangeLog | 3 +- README | 162 +--------------------------------------------- README.dumpleases | 17 +++++ README.udhcpc | 139 +++++++++++++++++++++++++++++++++++++++ README.udhcpd | 59 +++++++++++++++++ TODO | 1 + 6 files changed, 220 insertions(+), 161 deletions(-) create mode 100644 README.dumpleases create mode 100644 README.udhcpc create mode 100644 README.udhcpd diff --git a/ChangeLog b/ChangeLog index 8459b29..97e3dca 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,6 @@ 0.9.8 (pending) -+ use /dev/urandom to seed xid's (instead of time(0)) ++ split up README files (me) ++ use /dev/urandom to seed xid's (instead of time(0)) (me) + fixed renew behavior (me) + udhcp now fits nicely into busybox (Glenn McGrath as well as myself) diff --git a/README b/README index 47391c0..5f4bb78 100644 --- a/README +++ b/README @@ -5,166 +5,6 @@ The udhcp server/client package is primarily geared towards embedded systems. It does however, strive to be fully functional, and RFC compliant. -udhcp server (udhcpd) --------------------- - -The only command line argument to udhcpd is an optional specifed -config file. If no config file is specified, udhcpd uses the default -config file, /etc/udhcpd.conf. Ex: - -udhcpd /etc/udhcpd.eth1.conf - -The udhcp server employs a number of simple config files: - -udhcpd.leases ------------- - -The udhcpd.leases behavior is designed for an embedded system. The -file is written either every auto_time seconds, or when a SIGUSR1 -is received (the auto_time timer restarts if a SIGUSR1 is received). -If you send a SIGTERM to udhcpd directly after a SIGUSR1, udhcpd will -finish writing the leases file and wait for the aftermentioned script -to be executed and finish before quiting, so you do not need to sleep -between sending signals. When the file is written, a script can be -optionally called to commit the file to flash. Lease times are stored -in the file by time remaining in lease (for systems without clock -that works when there is no power), or by the absolute time that it -expires in seconds from epoch. In the remainig format, expired leases -are stored as zero. The file is of the format: - -16 byte MAC -4 byte ip address -u32 expire time -16 byte MAC -4 byte ip address -u32 expire time -. -etc. - -example: hexdump udhcpd.leases - -0000000 1000 c95a 27d9 0000 0000 0000 0000 0000 -0000010 a8c0 150a 0d00 2d29 5000 23fc 8566 0000 -0000020 0000 0000 0000 0000 a8c0 140a 0d00 4e29 -0000030 - - -udhcpd.conf ----------- - -The format is fairly simple, there is a sample file with all the -available options and comments describing them in samples/udhcpd.conf - - -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. The command line -options for the udhcp client are: - --c, --clientid=CLIENTID Client identifier --H, --hostname=HOSTNAME Client hostname --h, Alias for -H --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. - -When an event occurs, udhcpc calls the action script. 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 should 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 - 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. - -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). - -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 ------------------- @@ -196,6 +36,7 @@ options.c contains a set of dhcp options for the client: code: The DHCP code for this option + busybox drop-in -------------- udhcp is now a drop-in component for busybox (http://busybox.net). @@ -206,3 +47,4 @@ cp *.[ch] README AUTHORS COPYING ChangeLog TODO \ The only two files udhcp does not provide are config.in and Makefile.in, so these may need to be updated from time to time. + diff --git a/README.dumpleases b/README.dumpleases new file mode 100644 index 0000000..6367710 --- /dev/null +++ b/README.dumpleases @@ -0,0 +1,17 @@ +udhcp lease dump (dumpleases) +---------------------------- + +dumpleases displays the leases written out by the udhcpd server. Lease +times are stored in the file by time remaining in lease (for systems +without clock that works when there is no power), or by the absolute +time that it expires in seconds from epoch. dumpleases accepts the +following command line options: + +-a, --absolute Interpret lease times as expiration time. +-r, --remaining Interpret lease times as remaining time. +-f, --file=FILE Read lease information from FILE. +-h, --help Display help. + +Note that if udhcpd has not written a leases file recently, the output +of may not be up to date. + diff --git a/README.udhcpc b/README.udhcpc new file mode 100644 index 0000000..3591605 --- /dev/null +++ b/README.udhcpc @@ -0,0 +1,139 @@ +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 Client identifier +-H, --hostname=HOSTNAME Client hostname +-h, Alias for -H +-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. 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 should 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 + 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 + diff --git a/README.udhcpd b/README.udhcpd new file mode 100644 index 0000000..bc6137d --- /dev/null +++ b/README.udhcpd @@ -0,0 +1,59 @@ +udhcp server (udhcpd) +-------------------- + +The only command line argument to udhcpd is an optional specifed +config file. If no config file is specified, udhcpd uses the default +config file, /etc/udhcpd.conf. Ex: + +udhcpd /etc/udhcpd.eth1.conf + +The udhcp server employs a number of simple config files: + +udhcpd.leases +------------ + +The udhcpd.leases behavior is designed for an embedded system. The +file is written either every auto_time seconds, or when a SIGUSR1 +is received (the auto_time timer restarts if a SIGUSR1 is received). +If you send a SIGTERM to udhcpd directly after a SIGUSR1, udhcpd will +finish writing the leases file and wait for the aftermentioned script +to be executed and finish before quiting, so you do not need to sleep +between sending signals. When the file is written, a script can be +optionally called to commit the file to flash. Lease times are stored +in the file by time remaining in lease (for systems without clock +that works when there is no power), or by the absolute time that it +expires in seconds from epoch. In the remaining format, expired leases +are stored as zero. The file is of the format: + +16 byte MAC +4 byte ip address +u32 expire time +16 byte MAC +4 byte ip address +u32 expire time +. +etc. + +example: hexdump udhcpd.leases + +0000000 1000 c95a 27d9 0000 0000 0000 0000 0000 +0000010 a8c0 150a 0d00 2d29 5000 23fc 8566 0000 +0000020 0000 0000 0000 0000 a8c0 140a 0d00 4e29 +0000030 + + +udhcpd.conf +---------- + +The format is fairly simple, there is a sample file with all the +available options and comments describing them in samples/udhcpd.conf + +compile time options +------------------- + +dhcpd.h contains the other two compile time options: + + LEASE_TIME: The default lease time if not specified in the config + file. + + DHCPD_CONFIG_FILE: The defualt config file to use. diff --git a/TODO b/TODO index 21a919c..f88694a 100644 --- a/TODO +++ b/TODO @@ -1,5 +1,6 @@ TODO ---- ++ Integrade README.*'s with manpages + using time(0) breaks if the system clock changes, find a portable solution + make failure of reading functions revert to previous value, not the default + sanity code for option[OPT_LEN]