diff options
author | 2006-12-29 10:16:13 +0000 | |
---|---|---|
committer | 2006-12-29 10:16:13 +0000 | |
commit | 451108b79beab2fec000e03ee7c70184079c7634 (patch) | |
tree | c59fe4fe3dd90e73480f1c66190b72a98bf288a5 /net-misc/dhcpcd | |
parent | change boost dependency as it does not work for 1.34*. monotone versions <=0.... (diff) | |
download | gentoo-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/ChangeLog | 9 | ||||
-rw-r--r-- | net-misc/dhcpcd/dhcpcd-3.0.8-r1.ebuild | 37 | ||||
-rw-r--r-- | net-misc/dhcpcd/files/dhcpcd-3.0.8-static-routes.patch | 177 | ||||
-rw-r--r-- | net-misc/dhcpcd/files/digest-dhcpcd-3.0.8-r1 | 3 |
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 |