summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'net-misc/dhcpcd/files/dhcpcd-3.0.8-static-routes.patch')
-rw-r--r--net-misc/dhcpcd/files/dhcpcd-3.0.8-static-routes.patch177
1 files changed, 0 insertions, 177 deletions
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
deleted file mode 100644
index bbc987224cb4..000000000000
--- a/net-misc/dhcpcd/files/dhcpcd-3.0.8-static-routes.patch
+++ /dev/null
@@ -1,177 +0,0 @@
-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;