Module Name: src
Committed By: bouyer
Date: Mon May 18 21:23:34 UTC 2009
Modified Files:
src/external/bsd/dhcpcd/dist [netbsd-5]: README bind.c config.h
dhcpcd.c dhcpcd.conf net.c
src/external/bsd/dhcpcd/dist/dhcpcd-hooks [netbsd-5]: 10-mtu
20-resolv.conf 50-ntp.conf
Log Message:
external/bsd/dhcpcd/dist/README patch
external/bsd/dhcpcd/dist/bind.c patch
Apply patch, requested by roy in ticket #759:
external/bsd/dhcpcd/dist/config.h patch
external/bsd/dhcpcd/dist/dhcpcd.c patch
external/bsd/dhcpcd/dist/dhcpcd.conf patch
external/bsd/dhcpcd/dist/net.c patch
external/bsd/dhcpcd/dist/dhcpcd-hooks/10-mtu patch
external/bsd/dhcpcd/dist/dhcpcd-hooks/20-resolv.conf patch
external/bsd/dhcpcd/dist/dhcpcd-hooks/50-ntp.conf patch
Update dhcpcd to 5.0.4.
To generate a diff of this commit:
cvs rdiff -u -r1.1.1.2.6.2 -r1.1.1.2.6.3 src/external/bsd/dhcpcd/dist/README \
src/external/bsd/dhcpcd/dist/net.c
cvs rdiff -u -r1.1.1.2.2.2 -r1.1.1.2.2.3 src/external/bsd/dhcpcd/dist/bind.c
cvs rdiff -u -r1.1.1.2.6.3 -r1.1.1.2.6.4 \
src/external/bsd/dhcpcd/dist/config.h \
src/external/bsd/dhcpcd/dist/dhcpcd.c
cvs rdiff -u -r1.1.1.1.8.1 -r1.1.1.1.8.2 \
src/external/bsd/dhcpcd/dist/dhcpcd.conf
cvs rdiff -u -r1.1.1.1.8.1 -r1.1.1.1.8.2 \
src/external/bsd/dhcpcd/dist/dhcpcd-hooks/10-mtu
cvs rdiff -u -r1.1.1.2.6.1 -r1.1.1.2.6.2 \
src/external/bsd/dhcpcd/dist/dhcpcd-hooks/20-resolv.conf
cvs rdiff -u -r1.1.1.2.6.2 -r1.1.1.2.6.3 \
src/external/bsd/dhcpcd/dist/dhcpcd-hooks/50-ntp.conf
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/external/bsd/dhcpcd/dist/README
diff -u src/external/bsd/dhcpcd/dist/README:1.1.1.2.6.2 src/external/bsd/dhcpcd/dist/README:1.1.1.2.6.3
--- src/external/bsd/dhcpcd/dist/README:1.1.1.2.6.2 Sun May 10 21:22:23 2009
+++ src/external/bsd/dhcpcd/dist/README Mon May 18 21:23:34 2009
@@ -37,13 +37,15 @@
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.99.6
+ NetBSD-5.0
Hooks
-----
Not all the hooks in dhcpcd-hooks are installed by default.
-By default we install 01-test, 10-mtu, 20-resolv.conf and 30-hostname.
+By default we install 01-test, 10-mtu, 20-resolv.conf,
+29-lookup-hostname and 30-hostname.
+The default dhcpcd.conf does disable the lookup-hostname hook by default.
To add more simply add them in the HOOKSCRIPTS variable.
make HOOKSCRIPTS=50-ntp install
Index: src/external/bsd/dhcpcd/dist/net.c
diff -u src/external/bsd/dhcpcd/dist/net.c:1.1.1.2.6.2 src/external/bsd/dhcpcd/dist/net.c:1.1.1.2.6.3
--- src/external/bsd/dhcpcd/dist/net.c:1.1.1.2.6.2 Sun May 10 21:22:25 2009
+++ src/external/bsd/dhcpcd/dist/net.c Mon May 18 21:23:34 2009
@@ -272,13 +272,16 @@
ifs = ifl = NULL;
for (ifa = ifaddrs; ifa; ifa = ifa->ifa_next) {
+ if (ifa->ifa_addr != NULL) {
#ifdef AF_LINK
- if (ifa->ifa_addr->sa_family != AF_LINK)
- continue;
+ if (ifa->ifa_addr->sa_family != AF_LINK)
+ continue;
#elif AF_PACKET
- if (ifa->ifa_addr->sa_family != AF_PACKET)
- continue;
+ if (ifa->ifa_addr->sa_family != AF_PACKET)
+ continue;
#endif
+ }
+
/* It's possible for an interface to have >1 AF_LINK.
* For our purposes, we use the first one. */
for (ifp = ifs; ifp; ifp = ifp->next)
@@ -325,7 +328,7 @@
free_interface(ifp);
continue;
}
- } else {
+ } else if (ifa->ifa_addr != NULL) {
#ifdef AF_LINK
sdl = (const struct sockaddr_dl *)(void *)ifa->ifa_addr;
switch(sdl->sdl_type) {
@@ -372,7 +375,8 @@
retval = 0;
for (ifa = ifaddrs; ifa; ifa = ifa->ifa_next) {
- if (ifa->ifa_addr->sa_family != AF_INET ||
+ if (ifa->ifa_addr == NULL ||
+ ifa->ifa_addr->sa_family != AF_INET ||
strcmp(ifa->ifa_name, ifname) != 0)
continue;
a = (const struct sockaddr_in *)(void *)ifa->ifa_addr;
Index: src/external/bsd/dhcpcd/dist/bind.c
diff -u src/external/bsd/dhcpcd/dist/bind.c:1.1.1.2.2.2 src/external/bsd/dhcpcd/dist/bind.c:1.1.1.2.2.3
--- src/external/bsd/dhcpcd/dist/bind.c:1.1.1.2.2.2 Sun May 10 21:22:24 2009
+++ src/external/bsd/dhcpcd/dist/bind.c Mon May 18 21:23:34 2009
@@ -49,6 +49,9 @@
# define _PATH_DEVNULL "/dev/null"
#endif
+/* We do things after aquiring the lease, so ensure we have enough time for them */
+#define DHCP_MIN_LEASE 20
+
#ifndef THERE_IS_NO_FORK
pid_t
daemonise(void)
@@ -164,6 +167,12 @@
syslog(LOG_INFO, "%s: leased %s for infinity",
iface->name, inet_ntoa(lease->addr));
} else {
+ if (lease->leasetime < DHCP_MIN_LEASE) {
+ syslog(LOG_WARNING,
+ "%s: minimum lease is %d seconds",
+ iface->name, DHCP_MIN_LEASE);
+ lease->leasetime = DHCP_MIN_LEASE;
+ }
if (lease->rebindtime == 0)
lease->rebindtime = lease->leasetime * T2;
else if (lease->rebindtime >= lease->leasetime) {
Index: src/external/bsd/dhcpcd/dist/config.h
diff -u src/external/bsd/dhcpcd/dist/config.h:1.1.1.2.6.3 src/external/bsd/dhcpcd/dist/config.h:1.1.1.2.6.4
--- src/external/bsd/dhcpcd/dist/config.h:1.1.1.2.6.3 Sun May 10 21:22:24 2009
+++ src/external/bsd/dhcpcd/dist/config.h Mon May 18 21:23:34 2009
@@ -28,7 +28,7 @@
#define CONFIG_H
#define PACKAGE "dhcpcd"
-#define VERSION "5.0.1"
+#define VERSION "5.0.4"
/* Some systems do not have a working fork. */
/* #define THERE_IS_NO_FORK */
Index: src/external/bsd/dhcpcd/dist/dhcpcd.c
diff -u src/external/bsd/dhcpcd/dist/dhcpcd.c:1.1.1.2.6.3 src/external/bsd/dhcpcd/dist/dhcpcd.c:1.1.1.2.6.4
--- src/external/bsd/dhcpcd/dist/dhcpcd.c:1.1.1.2.6.3 Sun May 10 21:22:25 2009
+++ src/external/bsd/dhcpcd/dist/dhcpcd.c Mon May 18 21:23:34 2009
@@ -365,19 +365,6 @@
}
void
-start_rebind(void *arg)
-{
- struct interface *iface = arg;
-
- syslog(LOG_ERR, "%s: failed to renew, attmepting to rebind",
- iface->name);
- iface->state->state = DHS_REBIND;
- delete_timeout(send_renew, iface);
- iface->state->lease.server.s_addr = 0;
- send_rebind(iface);
-}
-
-void
start_expire(void *arg)
{
struct interface *iface = arg;
@@ -413,10 +400,11 @@
if (strcmp(msg, "NAK:") == 0)
a = get_option_string(dhcp, DHO_MESSAGE);
- else {
+ else if (dhcp->yiaddr != 0) {
addr.s_addr = dhcp->yiaddr;
a = xstrdup(inet_ntoa(addr));
- }
+ } else
+ a = NULL;
r = get_option_addr(&addr.s_addr, dhcp, DHO_SERVERID);
if (dhcp->servername[0] && r == 0)
syslog(lvl, "%s: %s %s from %s `%s'", iface->name, msg, a,
@@ -424,8 +412,10 @@
else if (r == 0)
syslog(lvl, "%s: %s %s from %s",
iface->name, msg, a, inet_ntoa(addr));
- else
+ else if (a != NULL)
syslog(lvl, "%s: %s %s", iface->name, msg, a);
+ else
+ syslog(lvl, "%s: %s", iface->name, msg);
free(a);
}
@@ -457,15 +447,16 @@
/* We may have found a BOOTP server */
if (get_option_uint8(&type, dhcp, DHO_MESSAGETYPE) == -1)
type = 0;
- else if (get_option_addr(&addr.s_addr, dhcp, DHO_SERVERID) == -1) {
- /* We should ignore invalid NAK messages without a ServerID */
- syslog(LOG_WARNING, "%s: ignoring DHCP message; no Server ID",
- iface->name);
- return;
- }
- /* We should restart on a NAK */
if (type == DHCP_NAK) {
+ /* For NAK, only check if we require the ServerID */
+ if (has_option_mask(ifo->requiremask, DHO_SERVERID) &&
+ get_option_addr(&addr.s_addr, dhcp, DHO_SERVERID) == -1)
+ {
+ log_dhcp(LOG_WARNING, "reject NAK", iface, dhcp);
+ return;
+ }
+ /* We should restart on a NAK */
log_dhcp(LOG_WARNING, "NAK:", iface, dhcp);
drop_config(iface, "NAK");
unlink(iface->leasefile);
@@ -482,27 +473,31 @@
return;
}
- /* No NAK, so reset the backoff */
- state->nakoff = 1;
-
/* Ensure that all required options are present */
for (i = 1; i < 255; i++) {
if (has_option_mask(ifo->requiremask, i) &&
get_option_uint8(&tmp, dhcp, i) != 0)
{
- log_dhcp(LOG_WARNING, "reject", iface, dhcp);
+ /* If we are bootp, then ignore the need for serverid.
+ * To ignore bootp, require dhcp_message_type instead. */
+ if (type == 0 && i == DHO_SERVERID)
+ continue;
+ log_dhcp(LOG_WARNING, "reject DHCP", iface, dhcp);
return;
}
- }
+ }
+
+ /* No NAK, so reset the backoff */
+ state->nakoff = 1;
if ((type == 0 || type == DHCP_OFFER) &&
state->state == DHS_DISCOVER)
{
lease->frominfo = 0;
lease->addr.s_addr = dhcp->yiaddr;
- lease->server.s_addr = 0;
+ lease->server.s_addr = INADDR_ANY;
if (type != 0)
- lease->server.s_addr = addr.s_addr;
+ get_option_addr(&lease->server.s_addr, dhcp, DHO_SERVERID);
log_dhcp(LOG_INFO, "offered", iface, dhcp);
free(state->offer);
state->offer = dhcp;
@@ -871,6 +866,21 @@
send_renew(iface);
}
+void
+start_rebind(void *arg)
+{
+ struct interface *iface = arg;
+
+ syslog(LOG_ERR, "%s: failed to renew, attmepting to rebind",
+ iface->name);
+ iface->state->state = DHS_REBIND;
+ delete_timeout(send_renew, iface);
+ iface->state->lease.server.s_addr = 0;
+ if (iface->raw_fd == -1)
+ open_sockets(iface);
+ send_rebind(iface);
+}
+
static void
start_timeout(void *arg)
{
@@ -1596,31 +1606,31 @@
PACKAGE " will not work correctly unless run as root");
if (sig != 0) {
- i = -1;
pid = read_pid();
if (pid != 0)
syslog(LOG_INFO, "sending signal %d to pid %d",
sig, pid);
-
- if (!pid || (i = kill(pid, sig))) {
+ if (pid == 0 || kill(pid, sig) != 0) {
if (sig != SIGALRM)
syslog(LOG_ERR, ""PACKAGE" not running");
unlink(pidfile);
- exit(EXIT_FAILURE);
- }
- if (sig == SIGALRM)
- exit(EXIT_SUCCESS);
- /* Spin until it exits */
- syslog(LOG_INFO, "waiting for pid %d to exit", pid);
- ts.tv_sec = 0;
- ts.tv_nsec = 100000000; /* 10th of a second */
- for(i = 0; i < 100; i++) {
- nanosleep(&ts, NULL);
- if (read_pid() == 0)
+ if (sig != SIGALRM)
+ exit(EXIT_FAILURE);
+ } else {
+ if (sig == SIGALRM)
exit(EXIT_SUCCESS);
+ /* Spin until it exits */
+ syslog(LOG_INFO, "waiting for pid %d to exit", pid);
+ ts.tv_sec = 0;
+ ts.tv_nsec = 100000000; /* 10th of a second */
+ for(i = 0; i < 100; i++) {
+ nanosleep(&ts, NULL);
+ if (read_pid() == 0)
+ exit(EXIT_SUCCESS);
+ }
+ syslog(LOG_ERR, "pid %d failed to exit", pid);
+ exit(EXIT_FAILURE);
}
- syslog(LOG_ERR, "pid %d failed to exit", pid);
- exit(EXIT_FAILURE);
}
if (!(options & DHCPCD_TEST)) {
Index: src/external/bsd/dhcpcd/dist/dhcpcd.conf
diff -u src/external/bsd/dhcpcd/dist/dhcpcd.conf:1.1.1.1.8.1 src/external/bsd/dhcpcd/dist/dhcpcd.conf:1.1.1.1.8.2
--- src/external/bsd/dhcpcd/dist/dhcpcd.conf:1.1.1.1.8.1 Sun May 10 21:22:25 2009
+++ src/external/bsd/dhcpcd/dist/dhcpcd.conf Mon May 18 21:23:34 2009
@@ -1,15 +1,25 @@
# A sample configuration for dhcpcd.
# See dhcpcd.conf(5) for details.
-# We normally want to inform the DHCP server of our hostname for DDNS.
+# Inform the DHCP server of our hostname for DDNS.
hostname
-# A list of options we should request from the DHCP server.
+# A list of options to request from the DHCP server.
option domain_name_servers, domain_name, domain_search, host_name
-# Most distros have ntp support.
+# Most distributions have NTP support.
option ntp_servers
-# We should behave nicely on networks and respect their MTU.
+# Behave nicely on networks and respect their MTU.
# However, a lot of buggy DHCP servers set invalid MTUs so this is not
# enabled by default.
#option interface_mtu
+
+# A ServerID is required by RFC2131.
+# Some broken DHCP servers do not send one and dhcpcd can work without it.
+# Some broken DHCP servers NAK incorrectly and do not include a ServerID either so
+# the default is to require a ServerID.
+require dhcp_server_identifier
+
+# A hook script is provided to lookup the hostname if not set by the DHCP
+# server, but it should not be run by default.
+nohook lookup-hostname
Index: src/external/bsd/dhcpcd/dist/dhcpcd-hooks/10-mtu
diff -u src/external/bsd/dhcpcd/dist/dhcpcd-hooks/10-mtu:1.1.1.1.8.1 src/external/bsd/dhcpcd/dist/dhcpcd-hooks/10-mtu:1.1.1.1.8.2
--- src/external/bsd/dhcpcd/dist/dhcpcd-hooks/10-mtu:1.1.1.1.8.1 Sun May 10 21:22:26 2009
+++ src/external/bsd/dhcpcd/dist/dhcpcd-hooks/10-mtu Mon May 18 21:23:34 2009
@@ -1,5 +1,8 @@
# Configure the MTU for the interface
if [ -n "$new_interface_mtu" ]; then
- ifconfig "$interface" mtu "$new_interface_mtu"
+ # The smalled MTU dhcpcd can work with is 576
+ if [ "$new_interface_mtu" -ge 576 ]; then
+ ifconfig "$interface" mtu "$new_interface_mtu"
+ fi
fi
Index: src/external/bsd/dhcpcd/dist/dhcpcd-hooks/20-resolv.conf
diff -u src/external/bsd/dhcpcd/dist/dhcpcd-hooks/20-resolv.conf:1.1.1.2.6.1 src/external/bsd/dhcpcd/dist/dhcpcd-hooks/20-resolv.conf:1.1.1.2.6.2
--- src/external/bsd/dhcpcd/dist/dhcpcd-hooks/20-resolv.conf:1.1.1.2.6.1 Sun May 10 21:22:26 2009
+++ src/external/bsd/dhcpcd/dist/dhcpcd-hooks/20-resolv.conf Mon May 18 21:23:34 2009
@@ -48,6 +48,7 @@
# Assemble resolv.conf using our head and tail files
[ -f "$cf" ] && rm -f "$cf"
+ [ -d "$resolv_conf_dir" ] || mkdir -p "$resolv_conf_dir"
echo "$header" > "$cf"
if [ -f /etc/resolv.conf.head ]; then
cat /etc/resolv.conf.head >> "$cf"
@@ -101,9 +102,7 @@
if [ -e "$resolv_conf_dir/$interface" ]; then
rm -f "$resolv_conf_dir/$interface"
fi
- if [ ! -d "$resolv_conf_dir" ]; then
- mkdir -p "$resolv_conf_dir"
- fi
+ [ -d "$resolv_conf_dir" ] || mkdir -p "$resolv_conf_dir"
printf "$conf" > "$resolv_conf_dir/$interface"
build_resolv_conf
}
Index: src/external/bsd/dhcpcd/dist/dhcpcd-hooks/50-ntp.conf
diff -u src/external/bsd/dhcpcd/dist/dhcpcd-hooks/50-ntp.conf:1.1.1.2.6.2 src/external/bsd/dhcpcd/dist/dhcpcd-hooks/50-ntp.conf:1.1.1.2.6.3
--- src/external/bsd/dhcpcd/dist/dhcpcd-hooks/50-ntp.conf:1.1.1.2.6.2 Sun May 10 21:22:26 2009
+++ src/external/bsd/dhcpcd/dist/dhcpcd-hooks/50-ntp.conf Mon May 18 21:23:34 2009
@@ -11,11 +11,11 @@
# Detect OpenRC or BSD rc
# Distributions may want to just have their command here instead of this
if type rc-service >/dev/null 2>&1 && rc-service --exists ntpd; then
- ntpd_restart_cmd="rc-service ntpd -- --ifstarted --quiet restart"
+ ntpd_restart_cmd="rc-service ntpd -- -Ds restart"
elif [ -x /etc/rc.d/ntpd ]; then
- ntpd_restart_cmd="/etc/rc.d/ntpd status && /etc/rc.d/ntpd restart"
+ ntpd_restart_cmd="/etc/rc.d/ntpd status >/dev/null 2>&1 && /etc/rc.d/ntpd restart"
elif [ -x /usr/local/etc/rc.d/ntpd ]; then
- ntpd_restart_cmd="/usr/local/etc/rc.d/ntpd status && /usr/local/etc/rc.d/ntpd restart"
+ ntpd_restart_cmd="/usr/local/etc/rc.d/ntpd status >/dev/null 2>&1 && /usr/local/etc/rc.d/ntpd restart"
fi
ntp_conf_dir="$state_dir/ntp.conf"
@@ -47,6 +47,7 @@
# Merge our config into ntp.conf
[ -e "$cf" ] && rm -f "$cf"
+ [ -d "$ntp_conf_dir" ] || mkdir -p "$ntp_conf_dir"
remove_markers "$signature_base" "$signature_base_end" \
"$ntp_conf" > "$cf"
if [ -n "$servers" ]; then