| dhcpcd - DHCP client daemon |
| Copyright (c) 2006-2015 Roy Marples <roy@marples.name> |
| |
| |
| Installation |
| ------------ |
| ./configure; make; make install |
| man dhcpcd for command line options |
| man dhcpcd.conf for configuration options |
| man dhcpcd-run-hooks to learn how to hook scripts into dhcpcd events |
| |
| |
| Notes |
| ----- |
| If you're cross compiling you may need set the platform if OS is different |
| from the host. |
| --target=sparc-sun-netbsd5.0 |
| |
| If you're building for an MMU-less system where fork() does not work, you |
| should ./configure --disable-fork. |
| This also puts the --no-background flag on and stops the --background flag |
| from working. |
| |
| You can change the default dirs with these knobs. |
| For example, to satisfy FHS compliance you would do this:- |
| ./configure --libexecdir=/lib/dhcpcd dbdir=/var/lib/dhcpcd |
| |
| We now default to using -std=c99. For 64-bit linux, this always works, but |
| for 32-bit linux it requires either gnu99 or a patch to asm/types.h. |
| Most distros patch linux headers so this should work fine. |
| linux-2.6.24 finally ships with a working 32-bit header. |
| If your linux headers are older, or your distro hasn't patched them you can |
| set CSTD=gnu99 to work around this. |
| |
| Some BSD systems do not allow the manipulation of automatically added subnet |
| routes. You can find discussion here: |
| http://mail-index.netbsd.org/tech-net/2008/12/03/msg000896.html |
| BSD systems where this has been fixed or is known to work are: |
| NetBSD-5.0 |
| FreeBSD-10.0 |
| |
| Some BSD systems protect against IPv6 NS/NA messages by ensuring that the |
| source address matches a prefix on the recieved by a RA message. |
| This is an error as the correct check is for on-link prefixes as the |
| kernel may not be handling RA itself. |
| BSD systems where this has been fixed or is known to work are: |
| NetBSD-7.0 |
| OpenBSD-5.0 |
| patch submitted against FreeBSD-10.0 |
| |
| Some BSD systems do not announce IPv6 address flag changes, such as |
| IN6_IFF_TENTATIVE, IN6_IFF_DUPLICATED, etc. On these systems, |
| dhcpcd will poll a freshly added address until either IN6_IFF_TENTATIVE is |
| cleared or IN6_IFF_DUPLICATED is set and take action accordingly. |
| BSD systems where this has been fixed or is known to work are: |
| NetBSD-7.0 |
| |
| Some BSD systems do not announce cached neighbour route changes based |
| on reachability to userland. For such systems, IPv6 routers will always |
| be assumed to be reachable until they either stop being a router or expire. |
| BSD systems where this has been fixed or is known to work are: |
| NetBSD-7.99.3 |
| |
| Linux prior to 3.17 won't allow userland to manage IPv6 temporary addresses. |
| Either upgrade or don't allow dhcpcd to manage the RA, |
| so don't set either "ipv6ra_own" or "slaac private" in dhcpcd.conf if you |
| want to have working IPv6 temporary addresses. |
| SLAAC private addresses are just as private, just stable. |
| |
| ArchLinux presently sanitises all kernel headers to the latest version |
| regardless of the version for your CPU. As such, Arch presently ships a |
| 3.12 kernel with 3.17 headers which claim that it suppors temporary address |
| management and no automatic prefix route generation, both of which are |
| obviously false. You will have to patch support either in the kernel or |
| out of the headers (or dhcpcd itself) to have correct operation. |
| |
| We try and detect how dhcpcd should interact with system services at runtime. |
| If we cannot auto-detect how do to this, or it is wrong then |
| you can change this by passing shell commands to --serviceexists, |
| --servicecmd and optionally --servicestatus to ./configure or overriding |
| the service variables in a hook. |
| |
| Some systems have /dev management systems and some of these like to rename |
| interfaces. As this system would listen in the same way as dhcpcd to new |
| interface arrivals, dhcpcd needs to listen to the /dev management sytem |
| instead of the kernel. However, if the /dev management system breaks, stops |
| working, or changes to a new one, dhcpcd should still try and continue to work. |
| To facilitate this, dhcpcd allows a plugin to load to instruct dhcpcd when it |
| can use an interface. As of the time of writing only udev support is included. |
| You can disable this with --without-dev, or without-udev |
| |
| To shrink dhcpcd you can disable IPv4 or IPv6: |
| --disable-inet |
| --disable-inet6 |
| |
| You can also move the embedded extended configuration from the dhcpcd binary |
| to an external file (LIBEXECDIR/dhcpcd-definitions.conf) |
| --disable-embedded |
| If dhcpcd cannot load this file at runtime, dhcpcd will work but will not be |
| able to decode any DHCP/DHCPv6 options that are not defined by the user |
| in /etc/dhcpcd.conf. |
| |
| To prepare dhcpcd for import into a platform source tree (like NetBSD) |
| you can use the make import target to create /tmp/dhcpcd-$version and |
| populate it with all the source files and hooks needed. |
| In this instance, you may wish to disable some configured tests when |
| the binary has to run on older versions which lack support, such as getline. |
| ./configure --without-getline |
| |
| Building for distribution (ie making a dhcpcd source tarball) now requires |
| gmake-4 or any BSD make. |
| |
| |
| Hooks |
| ----- |
| Not all the hooks in dhcpcd-hooks are installed by default. |
| By default we install 01-test, 02-dump, 10-mtu, 10-wpa_supplicant, |
| 15-timezone, 20-resolv.conf, 29-lookup-hostname and 30-hostname. |
| The default dhcpcd.conf disables the lookup-hostname hook by default. |
| The configure program attempts to find hooks for systems you have installed. |
| To add more simply |
| ./configure -with-hook=ntp.conf |
| |
| Some system services expose the name of the service we are in, |
| by default dhcpcd will pick RC_SVCNAME from the environment. |
| You can override this in CPPFLAGS+= -DRC_SVCNAME="YOUR_SVCNAME". |
| This is important because dhcpcd will scrub the environment aside from $PATH |
| before running hooks. |
| This variable could be used to facilitate service re-entry so this chain could |
| happen in a custom OS hook: |
| dhcpcd service marked inactive && dhcpcd service starts |
| dependant services are not started because dhcpcd is inactive (not stopped) |
| dhcpcd hook tests $if_oneup && $if_ipwaited |
| if true, mark the dhcpcd service as started and then start dependencies |
| if false and the dhcpcd service was previously started, mark as inactive and |
| stop any dependant services. |
| |
| |
| Compatibility |
| ------------- |
| dhcpcd-5.0 is only fully command line compatible with dhcpcd-4.0 |
| For compatibility with older versions, use dhcpcd-4.0 |
| |
| |
| ChangeLog |
| --------- |
| We no longer supply a ChangeLog. |
| However, you're more than welcome to read the commit log at |
| http://roy.marples.name/projects/dhcpcd/timeline/ |