diff options
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.patch | 177 |
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; |