0. Introduction

This is an RFC2131,RFC2132, and RFC1541 compliant DHCP client daemon.
RFC1541 was obsoleted by RFC2131, but there are still some RFC1541 compliant
DHCP servers. dhcpcd gets an IP address and other information from a
corresponding DHCP server, configures the network interface
automatically, and tries to renew the lease time according to RFC2131
or RFC1541 depending on the command line option.

dhcpcd-1.3 has been reported to compile
on Intel,PPC, and Alpha-based Linux platforms
providing glibc-2.0.5 or later has been
installed. Please refer to the Notes below for details.

dhcpcd-1.3 has been reported as compatible with DHCP servers
used by the following network service providers:

1. Time Warner RoadRunner http://www.rr.com/
2. MediaOne (now AT&T Broadband) http://www.mediaone.com/
3. @Home Networks http://www.home.com/
4. France Telecom ADSL http://www.wanadoo.fr/
5. USWest.net DSL (now Qwest) http://www.uswest.com/
6. France CyberCable http://www.cybercable.fr/
7. BellSouth ADSL http://www.bellsouth.net/
8. BCtel Multimedia Gateway ADSL http://www.bctel.net/
9. Cogeco Cable Canada http://www.cogeco.ca/
10.Sympatico High Speed Edition ADSL http://www.hse.sympatico.ca/
11.Adelphia PowerLink http://powerlink.adelphia.net/
12.Videotron, Canada http://www.videotron.ca/
13.Access Cable, Nova Scotia, Canada http://www.accesscable.net/
14.A2000 Cable, Netherlands http://www.a2000.nl/
15.Tele-Communications, Inc http://www.tci.com/
16.Telenet, Belgium http://www.telenet.be/
17.Telekabel Wien, Austria http://www.telekabel.at/
18.RMCnet, France http://www.rmcnet.fr/
19.Retecal, Spain http://www.retecal.es/
20.TVD, Belgium  http://www.tvd.net/
21.Optimum Online, NY  http://www.optimumonline.com/
22.Knology Comm.  http://www.knology.com/
23.Highpernet, Switzeland. http://www.highpernet.ch/
24.TeledisNet, Belgium. http://www.teledisnet.be/
25.Southwestern Bell DSL. http://www.swbell.net/
26.Brutele, Belgium.  http://www.brutele.be/
27.Telus, Canada.  http://www.telusplanet.net/
28.Chello, Netherlands.  http://www.chello.nl/
29.RCN. http://www.rcn.com/
30.Pandora, Belgium. http://www.pandora.be/
31.Armstrong's Cable Services, PA. http://www.zbzoom.net/
32.21st Century, Chicago. http://www.21stcentury.net/
33.Supercable, Spain. http://www.supercable.es/
34.Primacom, Germany. http://www.primacom.net/
35.Click! Network, Tacoma, WA. http://www.click-network.com/
36.Telocity, Cupertino, CA. http://www.telocity.com/
37.Charter Communications. http://www.chartercom.com/
38.Tebenet, Netherlands. http://www.tebenet.nl/
39.ZoomTown, Cincinnati, OH. http://www.zoomtown.com/
40.Telecom New Zealand Jetstream ADSL. http://www.telecom.co.nz/
41.Belgacom Turboline ADSL. http://www.turboline.be/
42.ISP Channel. http://www.ispchannel.com/
43.Telia.Com Sweden. http://www.telia.com/
44.Netcabo Portugal. http://www.netcabo.pt/
45.CyberCity xDSL, Denmark. http://www.cybercity.dk/
46.Tokyo Metallic Comm. http://www.metallic.co.jp/
47.Telenor, Norway. http://www.telenor.no/
48.Telstra, Austria. http://www.telstra.com/
49.Look Wireless, Montreal. http://www.look.ca/
50.Virtua, Brazil. http://www.virtua.com.br/
51.Verizon DSL. http://www.verizon.com/dsl/
52.Sonera, Netherlands. http://www.soneraplaza.nl/
53.NTL, UK. http://www.ntl.co.uk/cablemodems/
54.Telewest, UK. http://www.telewest.co.uk/
55.VTR, Chile. http://www.vtr.net/
56.Millennium Digital Media. http://www.mdm.net/
57.Madritel, Spain. http://www.madritel.es/
58.Cistron Telecom, Netherlands. http://www.cistron.nl/
59.Cox Express, Las Vegas. http://www.cox.com/
60.Cablecom GMBH, Switzerland. http://www.hispeed.ch/
61.Elektro Ablasser Hausmannstaetten, Austria. http://www.catv4u.at/
62.Kiva Networking, Indiana. http://www.kiva.net/
63.Blueyonder, UK. http://www.blueyonder.co.uk/
64.Salzburg-Online, Austria. http://www.salzburg-online.at/
65.Cablenet, Colombia. http://www.cable.net.co/
66.i-Cable, Hong Kong. http://www.i-cable.com/

if you have been successfully using dhcpcd-1.3
on your network please report the fact along
with network provider's name/URL/whatever and dhcpcd version
to the author <sv@phystech.com>.

dhcpcd-1.3 primary web site is
http://www.phystech.com/download/
ftp://ftp.phystech.com/pub/

1. Install

Make sure your kernel is compiled with support for SOCK_PACKET
(CONFIG_PACKET option). Cd to source distribution directory. Do
./configure
There is no need to supply --prefix=/ or other parameters to configure
script. It will default to installing dhcpcd under /sbin and cache
files under /etc/dhcpc subdirectories.
Edit Makefile to customize compile time options.
Do 'make' followed by 'make install'.

  Note 1.
    to compile dhcpcd-1.3.X you have to install glibc-2.0.5 or later.
    dhcpcd-1.3.X might not compile under libc.5.
    If you don't have glibc installed you can use the precompiled
    binary included with the distribution.
    If you are trying to compile dhcpcd yourself and getting error
    "cannot find net/ethernet.h file", you don't have glibc
    installed.

  Note 2.
    some recent releases of GNU C compiler, notably 
    gcc-2.8.1 are buggy. The same goes for egcs, as of 05/10/99.
    If you have compiled dhcpcd with gcc-2.8.1 or egcs you may
    get the following errors in dhcpcd.log file:

    May  4 12:43:03 dhcpcd[423]: corrupted UDP msg with uh_ulen=319 in_cksum=-2 discarded

    and dhcpcd won't work. The workaround is to compile dhcpcd without
    -O2 in Makefile.

  Note 3.
    if you are trying to run dhcpcd and are getting the following error in
    the log file

    dhcpcd[xx]: dhcpStart: socket(): Invalid argument

    it means you kernel is compiled without support for SOCK_PACKET
    (CONFIG_PACKET option).

  Note 4.
    if your dhcpcd binary compiles fine and runs OK with "--help" flag
    only and otherwise immediately coredumps with "Segmentation Fault" 
    error then delete /etc/dhcpc/dhcpcd-<interface>.cache file and
    try running dhcpcd again. There is a chance your dhcpcd cache file
    is from old version of dhcpcd.

You may want to add the following line to your /etc/syslog.conf file:

local0.*          /var/log/dhcpcd.log

and then refresh syslogd daemon:

kill -1 `cat /var/run/syslogd.pid`

2. How to Use It

Invoke the client by typing 'dhcpcd'. Note you should NOT
explicitly put it in the background with the '&' character -
background processing is automatic unless 'dhcpcd' was
compiled with -DDEBUG flag. Dhcpcd will fork into background
as soon as it configures the interface. By default, dhcpcd will
attach to 'eth0' unless you explicitly give an interface name on the
command line.
Please note 'dhcpcd -c filename' usage is no longer supported
in v.1.3. This is because processing in system bootup scripts
might depend on the outcome of interface configuration process
hence 'dhcpcd' should return some useful exit code to the parent
process before forking into background. The more appropriate way
to invoke 'dhcpcd' in system bootup scripts is as follows in
the example below where linux box serves as a router/firewall for
the local network 192.168.12.0.

-- - - - - - - - - -
if dhcpcd eth0; then
  inetd
  /usr/sbin/sendmail -bd
  httpd
  echo 1 > /proc/sys/net/ipv4/ip_forward
  modprobe ip_tables
  modprobe iptable_nat
  modprobe iptable_filter
  modprobe ipt_MASQUERADE
  modprobe ip_nat_ftp
  modprobe ip_conntrack_ftp
  iptables -t nat -A POSTROUTING -o eth0 -j SNAT
else
  echo "****  Unable to configure eth0"
fi
- - - - - - - - - - -

The bootup process will wait until 'dhcpcd' configures
interface or until dhcpcd times out before proceeding further.

Any time dhcpcd configures or shuts down interface it will try to
execute /etc/dhcpc/dhcpcd.exe script with appropriate
parameters passed. The dhcpcd.exe script usage is
/etc/dhcpc/dhcpcd.exe <interface> <up|down|new> [ip_address] [-d]
where <interface> is actually interface name, e.g. "eth0";
optional parameter [ip_address] is the IP address the interface
has been configured with; optional parameter [-d] is a debug
flag passed if dhcpcd has been invoked with -d flag.
The second parameter to dhcpcd.exe script is
"up" if the interface has been configured with the same IP
address as before reboot, "down" if the interface has been shut
down, "new" if the interface has been configured with new IP address.

3. Supported DHCP Options

The current version of dhcpcd supports the following DHCP options:

  o lease time
  o renewal (T1) time
  o rebind (T2) time
  o netmask
  o broadcast address
  o router
  o dns
  o host name
  o domain name
  o nis domain name
  o nis servers
  o ntp servers
  o static routes

5. Cache File

dhcpcd saves the assigned IP address to the file
'/etc/dhcpc/dhcpcd-interface.cache' (the word 'interface' is actually
replaced with the interface name like eth0, etc. to which dhcpcd is
attached) so that it can try to use that IP address when it is invoked
next time. Remove the file '/etc/dhcpc/dhcpcd-interface.cache' before
you invoke dhcpcd unless you like using the previously assigned IP
address.

6. Information File

dhcpcd writes the configuration information into
/etc/dhcpc/dhcpcd-interface.info file. The word 'interface' is actually
replaced with the interface name like eth0, etc. to which dhcpcd is
attached. That file may be included into a Bourne or Korn shell script
to set an environment variables like e.g. HOSTNAME, DOMAIN, NETMASK, etc.

7. Other Information

dhcpcd sends DHCP_RELEASE message to the DHCP server, deletes the
/etc/dhcpc/dhcpcd-interface.cache file and brings the attached
network interface down when it gets SIGHUP signal. It will
not send DHCP_RELEASE message and will not delete
/etc/dhcpc/dhcpcd-interface.cache file in a case it gets
SIGTERM as normally happens upon reboot.

dhcpcd currently does not support multiple IP addresses for the
same interface.
dhcpcd currently supports only Ethernet link protocol.

8. In case dhcpcd does not work:
   Run 'dhcpcd -d' and mail me the relevant messages
   from /var/log/dhcpcd.log file. Also run
   tcpdump -evvn -i eth0
   and mail me the results of that.
   If the things are too bad for you,
   uncomment -DDEBUG flag in Makefile
   and recompile 'dhcpcd'. Run 'dhcpcd -d'
   and mail me what you see.

Sergei Viznyuk <sv@phystech.com>

