mirror of
https://github.com/rsmarples/dhcpcd.git
synced 2024-11-25 02:53:28 +08:00
compat | ||
crypt | ||
dev | ||
dhcpcd-hooks | ||
test | ||
arp.c | ||
arp.h | ||
auth.c | ||
auth.h | ||
bpf-filter.h | ||
common.c | ||
common.h | ||
config-null.mk | ||
configure | ||
control.c | ||
control.h | ||
defs.h | ||
dev.c | ||
dev.h | ||
dhcp6.c | ||
dhcp6.h | ||
dhcp-common.c | ||
dhcp-common.h | ||
dhcp.c | ||
dhcp.h | ||
dhcpcd-definitions.conf | ||
dhcpcd-embedded.c.in | ||
dhcpcd-embedded.h.in | ||
dhcpcd-run-hooks.8.in | ||
dhcpcd-run-hooks.in | ||
dhcpcd.8.in | ||
dhcpcd.c | ||
dhcpcd.conf | ||
dhcpcd.conf.5.in | ||
dhcpcd.h | ||
duid.c | ||
duid.h | ||
eloop.c | ||
eloop.h | ||
genembedc | ||
genembedh | ||
GNUmakefile | ||
iconfig.mk | ||
if-bsd.c | ||
if-linux-wext.c | ||
if-linux.c | ||
if-options.c | ||
if-options.h | ||
if-sun.c | ||
if.c | ||
if.h | ||
ipv4.c | ||
ipv4.h | ||
ipv4ll.c | ||
ipv4ll.h | ||
ipv6.c | ||
ipv6.h | ||
ipv6nd.c | ||
ipv6nd.h | ||
Makefile | ||
Makefile.inc | ||
README | ||
script.c | ||
script.h |
dhcpcd - DHCP client daemon Copyright (c) 2006-2014 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 are: NetBSD-5.0 Some BSD systems protect against IPv6 NS/NA messages by ensuring that the source address matches an address/prefix on the interface. This is an error as the correct check is for on-link prefixes. As such, on these systems stateful addressing via DHCPv6 may cause issues trying to reach other neighbours. BSD systems where this is known to be a problem Occured in NetBSD-5.0, fixed in NetBSD-6.99.29 Occured in OpenBSD-4.2, fixed in OpenBSD-5.0 On FreeBSD-10 dhcpcd cannot delete IPv4 subnet routes. On OpenBSD-5.5 dhcpcd cannot delete IPv4 subnet routes or IPv6 prefixes. 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/