Use destination address of ppp interfaces as nexthop in starters default route lookup

This commit is contained in:
Martin Willi
2010-02-05 09:28:31 +01:00
parent 6c9c0baee9
commit 313a53d4fc
+25 -6
View File
@@ -132,7 +132,6 @@ get_defaultroute(defaultroute_t *defaultroute)
}
if (metric < best_metric
&& gw.s_addr != INADDR_ANY
&& iface_idx != -1)
{
struct ifreq req;
@@ -141,19 +140,39 @@ get_defaultroute(defaultroute_t *defaultroute)
if (fd < 0)
{
plog("could not open AF_INET socket");
defaultroute->defined = FALSE;
break;
}
bzero(&req, sizeof(req));
req.ifr_ifindex = iface_idx;
ioctl(fd, SIOCGIFNAME, &req);
ioctl(fd, SIOCGIFADDR, &req);
close(fd);
if (ioctl(fd, SIOCGIFNAME, &req) < 0 ||
ioctl(fd, SIOCGIFADDR, &req) < 0)
{
plog("could not read interface data, ignoring route");
close(fd);
break;
}
strncpy(defaultroute->iface, req.ifr_name, IFNAMSIZ);
defaultroute->addr.u.v4 = *((struct sockaddr_in *) &req.ifr_addr);
defaultroute->nexthop.u.v4.sin_family = AF_INET;
defaultroute->nexthop.u.v4.sin_addr = gw;
if (gw.s_addr == INADDR_ANY)
{
if (ioctl(fd, SIOCGIFDSTADDR, &req) < 0 ||
((struct sockaddr_in*) &req.ifr_dstaddr)->sin_addr.s_addr == INADDR_ANY)
{
DBG_log("Ignoring default route to device %s because we can't get it's destination",
req.ifr_name);
close(fd);
break;
}
defaultroute->nexthop.u.v4 = *((struct sockaddr_in *) &req.ifr_dstaddr);
}
else
defaultroute->nexthop.u.v4.sin_addr = gw;
close(fd);
DBG(DBG_CONTROL,
char addr[20];