Use destination address of ppp interfaces as nexthop in starters default route lookup
This commit is contained in:
@@ -132,7 +132,6 @@ get_defaultroute(defaultroute_t *defaultroute)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (metric < best_metric
|
if (metric < best_metric
|
||||||
&& gw.s_addr != INADDR_ANY
|
|
||||||
&& iface_idx != -1)
|
&& iface_idx != -1)
|
||||||
{
|
{
|
||||||
struct ifreq req;
|
struct ifreq req;
|
||||||
@@ -141,19 +140,39 @@ get_defaultroute(defaultroute_t *defaultroute)
|
|||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
{
|
{
|
||||||
plog("could not open AF_INET socket");
|
plog("could not open AF_INET socket");
|
||||||
defaultroute->defined = FALSE;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
bzero(&req, sizeof(req));
|
bzero(&req, sizeof(req));
|
||||||
req.ifr_ifindex = iface_idx;
|
req.ifr_ifindex = iface_idx;
|
||||||
ioctl(fd, SIOCGIFNAME, &req);
|
if (ioctl(fd, SIOCGIFNAME, &req) < 0 ||
|
||||||
ioctl(fd, SIOCGIFADDR, &req);
|
ioctl(fd, SIOCGIFADDR, &req) < 0)
|
||||||
close(fd);
|
{
|
||||||
|
plog("could not read interface data, ignoring route");
|
||||||
|
close(fd);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
strncpy(defaultroute->iface, req.ifr_name, IFNAMSIZ);
|
strncpy(defaultroute->iface, req.ifr_name, IFNAMSIZ);
|
||||||
defaultroute->addr.u.v4 = *((struct sockaddr_in *) &req.ifr_addr);
|
defaultroute->addr.u.v4 = *((struct sockaddr_in *) &req.ifr_addr);
|
||||||
defaultroute->nexthop.u.v4.sin_family = AF_INET;
|
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,
|
DBG(DBG_CONTROL,
|
||||||
char addr[20];
|
char addr[20];
|
||||||
|
|||||||
Reference in New Issue
Block a user