/*
* have_route_to - determine if the system has any route to
* a given IP address.
+ * For demand mode to work properly, we have to ignore routes
+ * through our own interface.
*/
int have_route_to(u_int32_t addr)
{
return -1; /* don't know */
while (read_route_table(&rt)) {
- if ((rt.rt_flags & RTF_UP) == 0)
+ if ((rt.rt_flags & RTF_UP) == 0 || strcmp(rt.rt_dev, ifname) == 0)
continue;
if ((addr & ((struct sockaddr_in *)&rt.rt_genmask)->sin_addr.s_addr)
== ((struct sockaddr_in *)&rt.rt_genmask)->sin_addr.s_addr) {