summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Marples <uberlord@gentoo.org>2006-12-29 10:16:13 +0000
committerRoy Marples <uberlord@gentoo.org>2006-12-29 10:16:13 +0000
commit451108b79beab2fec000e03ee7c70184079c7634 (patch)
treec59fe4fe3dd90e73480f1c66190b72a98bf288a5 /net-misc/dhcpcd
parentchange boost dependency as it does not work for 1.34*. monotone versions <=0.... (diff)
downloadgentoo-2-451108b79beab2fec000e03ee7c70184079c7634.tar.gz
gentoo-2-451108b79beab2fec000e03ee7c70184079c7634.tar.bz2
gentoo-2-451108b79beab2fec000e03ee7c70184079c7634.zip
Add a patch to apply static routes before routers and setup host routes
correctly. (Portage version: 2.1.2_rc4-r1)
Diffstat (limited to 'net-misc/dhcpcd')
-rw-r--r--net-misc/dhcpcd/ChangeLog9
-rw-r--r--net-misc/dhcpcd/dhcpcd-3.0.8-r1.ebuild37
-rw-r--r--net-misc/dhcpcd/files/dhcpcd-3.0.8-static-routes.patch177
-rw-r--r--net-misc/dhcpcd/files/digest-dhcpcd-3.0.8-r13
4 files changed, 225 insertions, 1 deletions
diff --git a/net-misc/dhcpcd/ChangeLog b/net-misc/dhcpcd/ChangeLog
index ebc5cd000a40..9c26975b7f4a 100644
--- a/net-misc/dhcpcd/ChangeLog
+++ b/net-misc/dhcpcd/ChangeLog
@@ -1,6 +1,13 @@
# ChangeLog for net-misc/dhcpcd
# Copyright 2002-2006 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcpcd/ChangeLog,v 1.125 2006/12/21 21:21:40 uberlord Exp $
+# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcpcd/ChangeLog,v 1.126 2006/12/29 10:16:12 uberlord Exp $
+
+*dhcpcd-3.0.8-r1 (29 Dec 2006)
+
+ 29 Dec 2006; Roy Marples <uberlord@gentoo.org>
+ +files/dhcpcd-3.0.8-static-routes.patch, +dhcpcd-3.0.8-r1.ebuild:
+ Add a patch to apply static routes before routers and setup host routes
+ correctly.
*dhcpcd-3.0.8 (21 Dec 2006)
diff --git a/net-misc/dhcpcd/dhcpcd-3.0.8-r1.ebuild b/net-misc/dhcpcd/dhcpcd-3.0.8-r1.ebuild
new file mode 100644
index 000000000000..449446c061c4
--- /dev/null
+++ b/net-misc/dhcpcd/dhcpcd-3.0.8-r1.ebuild
@@ -0,0 +1,37 @@
+# Copyright 1999-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-misc/dhcpcd/dhcpcd-3.0.8-r1.ebuild,v 1.1 2006/12/29 10:16:12 uberlord Exp $
+
+inherit eutils toolchain-funcs
+
+DESCRIPTION="A DHCP client"
+HOMEPAGE="http://dhcpcd.berlios.de"
+SRC_URI="http://download.berlios.de/${PN}/${P}.tar.bz2"
+
+LICENSE="GPL-2"
+SLOT="0"
+KEYWORDS="~alpha ~amd64 ~hppa ~ia64 ~ppc ~ppc64 ~sparc ~sparc-fbsd ~x86 ~x86-fbsd"
+IUSE=""
+
+DEPEND=""
+PROVIDE="virtual/dhcpc"
+
+src_unpack() {
+ unpack ${A}
+ cd "${S}"
+
+ epatch "${FILESDIR}/${P}-static-routes.patch"
+
+ # Redefine the location of ntp.drift
+ sed -i -e 's,#define NTPDRIFTFILE\t.*,#define NTPDRIFTFILE\t\t\"/var/lib/ntp/ntp.drift\",' \
+ pathnames.h || die "sed failed"
+}
+
+src_compile() {
+ emake CC="$(tc-getCC)" CFLAGS="${CFLAGS}" LDFLAGS="${LDFLAGS}" || die
+}
+
+src_install() {
+ emake DESTDIR="${D}" install || die
+ dodoc ChangeLog
+}
diff --git a/net-misc/dhcpcd/files/dhcpcd-3.0.8-static-routes.patch b/net-misc/dhcpcd/files/dhcpcd-3.0.8-static-routes.patch
new file mode 100644
index 000000000000..bbc987224cb4
--- /dev/null
+++ b/net-misc/dhcpcd/files/dhcpcd-3.0.8-static-routes.patch
@@ -0,0 +1,177 @@
+Index: interface.c
+===================================================================
+@@ -278,13 +278,19 @@
+ int change, int del)
+ {
+ int s;
+- char *destd;
++ char *dstd;
+ char *gend;
+ struct rtm
+ {
+ struct rt_msghdr hdr;
+ struct sockaddr_in destination;
+- struct sockaddr_in gateway;
++ union
++ {
++ struct sockaddr sa;
++ struct sockaddr_in sin;
++ struct sockaddr_dl sdl;
++ struct sockaddr_storage sss; /* added to avoid memory overrun */
++ } gateway;
+ struct sockaddr_in netmask;
+ } rtm;
+ static int seq;
+@@ -295,13 +301,22 @@
+ /* Do something with metric to satisfy compiler warnings */
+ metric = 0;
+
+- destd = strdup (inet_ntoa (destination));
++ dstd = strdup (inet_ntoa (destination));
+ gend = strdup (inet_ntoa (netmask));
+- logger (LOG_INFO, "%s route to %s (%s) via %s",
+- change ? "changing" : del ? "removing" : "adding",
+- destd, gend, inet_ntoa(gateway));
+- if (destd)
+- free (destd);
++ if (gateway.s_addr == destination.s_addr)
++ logger (LOG_INFO, "%s route to %s (%s)",
++ change ? "changing" : del ? "removing" : "adding",
++ dstd, gend);
++ else if (destination.s_addr == INADDR_ANY && netmask.s_addr == INADDR_ANY)
++ logger (LOG_INFO, "%s default route via %s",
++ change ? "changing" : del ? "removing" : "adding",
++ inet_ntoa (gateway));
++ else
++ logger (LOG_INFO, "%s route to %s (%s) via %s",
++ change ? "changing" : del ? "removing" : "adding",
++ dstd, gend, inet_ntoa (gateway));
++ if (dstd)
++ free (dstd);
+ if (gend)
+ free (gend);
+
+@@ -317,9 +332,11 @@
+ rtm.hdr.rtm_seq = ++seq;
+ rtm.hdr.rtm_type = change ? RTM_CHANGE : del ? RTM_DELETE : RTM_ADD;
+
+- rtm.hdr.rtm_flags = RTF_UP | RTF_GATEWAY | RTF_STATIC;
+- if (netmask.s_addr == 0xffffffff)
++ rtm.hdr.rtm_flags = RTF_UP | RTF_STATIC;
++ if (netmask.s_addr == INADDR_BROADCAST)
+ rtm.hdr.rtm_flags |= RTF_HOST;
++ else
++ rtm.hdr.rtm_flags |= RTF_GATEWAY;
+
+ rtm.hdr.rtm_addrs = RTA_DST | RTA_GATEWAY | RTA_NETMASK;
+
+@@ -329,7 +346,40 @@
+ memcpy (&_var.sin_addr, &_addr, sizeof (struct in_addr));
+
+ ADDADDR (rtm.destination, destination);
+- ADDADDR (rtm.gateway, gateway);
++ if (netmask.s_addr == INADDR_BROADCAST)
++ {
++ struct ifaddrs *ifap, *ifa;
++ union
++ {
++ struct sockaddr *sa;
++ struct sockaddr_dl *sdl;
++ } us;
++
++ if (getifaddrs (&ifap))
++ {
++ logger (LOG_ERR, "getifaddrs: %s", strerror (errno));
++ return -1;
++ }
++
++ for (ifa = ifap; ifa; ifa = ifa->ifa_next)
++ {
++ if (ifa->ifa_addr->sa_family != AF_LINK)
++ continue;
++
++ if (strcmp (ifname, ifa->ifa_name))
++ continue;
++
++ us.sa = ifa->ifa_addr;
++ memcpy (&rtm.gateway.sdl, us.sdl, us.sdl->sdl_len);
++ break;
++ }
++ freeifaddrs (ifap);
++ }
++ else
++ {
++ ADDADDR (rtm.gateway.sin, gateway);
++ }
++
+ ADDADDR (rtm.netmask, netmask);
+
+ #undef ADDADDR
+@@ -610,9 +660,18 @@
+
+ dstd = strdup (inet_ntoa (destination));
+ gend = strdup (inet_ntoa (netmask));
+- logger (LOG_INFO, "%s route to %s (%s) via %s, metric %d",
+- change ? "changing" : del ? "removing" : "adding",
+- dstd, gend, inet_ntoa (gateway), metric);
++ if (gateway.s_addr == destination.s_addr)
++ logger (LOG_INFO, "%s route to %s (%s) metric %d",
++ change ? "changing" : del ? "removing" : "adding",
++ dstd, gend, metric);
++ else if (destination.s_addr == INADDR_ANY && netmask.s_addr == INADDR_ANY)
++ logger (LOG_INFO, "%s default route via %s metric %d",
++ change ? "changing" : del ? "removing" : "adding",
++ inet_ntoa (gateway), metric);
++ else
++ logger (LOG_INFO, "%s route to %s (%s) via %s metric %d",
++ change ? "changing" : del ? "removing" : "adding",
++ dstd, gend, inet_ntoa (gateway), metric);
+ if (dstd)
+ free (dstd);
+ if (gend)
+@@ -636,7 +695,8 @@
+ {
+ nlm.hdr.nlmsg_flags |= NLM_F_CREATE | NLM_F_EXCL;
+ nlm.rt.rtm_protocol = RTPROT_BOOT;
+- if (gateway.s_addr == 0)
++ if (gateway.s_addr == INADDR_ANY ||
++ netmask.s_addr == INADDR_BROADCAST)
+ nlm.rt.rtm_scope = RT_SCOPE_LINK;
+ else
+ nlm.rt.rtm_scope = RT_SCOPE_UNIVERSE;
+@@ -652,7 +712,7 @@
+
+ add_attr_l (&nlm.hdr, sizeof (nlm), RTA_DST, &destination.s_addr,
+ sizeof (destination.s_addr));
+- if (gateway.s_addr != 0)
++ if (gateway.s_addr != INADDR_ANY && gateway.s_addr != destination.s_addr)
+ add_attr_l (&nlm.hdr, sizeof (nlm), RTA_GATEWAY, &gateway.s_addr,
+ sizeof (gateway.s_addr));
+
+Index: dhcp.c
+===================================================================
+--- dhcp.c (revision 134)
++++ dhcp.c (working copy)
+@@ -165,8 +165,8 @@
+ *p++ = DHCP_CSR;
+ /* RFC 3442 states classless static routes should be before routers
+ * and static routes as classless static routes override them both */
++ *p++ = DHCP_STATICROUTE;
+ *p++ = DHCP_ROUTERS;
+- *p++ = DHCP_STATICROUTE;
+ *p++ = DHCP_HOSTNAME;
+ *p++ = DHCP_DNSSEARCH;
+ *p++ = DHCP_DNSDOMAIN;
+Index: configure.c
+===================================================================
+--- configure.c (revision 134)
++++ configure.c (working copy)
+@@ -426,7 +426,7 @@
+ #ifdef __linux__
+ /* On linux, we need to change the subnet route to have our metric. */
+ if (iface->previous_address.s_addr != dhcp->address.s_addr
+- && options->metric > 0)
++ && options->metric > 0 && dhcp->netmask.s_addr != INADDR_BROADCAST)
+ {
+ struct in_addr td;
+ struct in_addr tg;
diff --git a/net-misc/dhcpcd/files/digest-dhcpcd-3.0.8-r1 b/net-misc/dhcpcd/files/digest-dhcpcd-3.0.8-r1
new file mode 100644
index 000000000000..49701a90cb02
--- /dev/null
+++ b/net-misc/dhcpcd/files/digest-dhcpcd-3.0.8-r1
@@ -0,0 +1,3 @@
+MD5 7c41756a7cfef60bdd8ef2f12216f367 dhcpcd-3.0.8.tar.bz2 29305
+RMD160 f19545ebd98aabd60512f3c482d9a30ce0f554ab dhcpcd-3.0.8.tar.bz2 29305
+SHA256 c878e32bb149c17a455ba13f370ea2bc2c69e0da3a41ed5ad58b2d0ca51ec09a dhcpcd-3.0.8.tar.bz2 29305