/*
* have_route_to - determine if the system has any route to
- * a given IP address.
+ * a given IP address. `addr' is in network byte order.
+ * Return value is 1 if yes, 0 if no, -1 if don't know.
* For demand mode to work properly, we have to ignore routes
* through our own interface.
*/
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) {
+ == ((struct sockaddr_in *)&rt.rt_dst)->sin_addr.s_addr) {
result = 1;
break;
}
*/
#ifndef lint
-static char rcsid[] = "$Id: sys-svr4.c,v 1.21 1999/03/08 01:46:49 paulus Exp $";
+static char rcsid[] = "$Id: sys-svr4.c,v 1.22 1999/03/08 04:48:48 paulus Exp $";
#endif
#include <limits.h>
/*
* have_route_to - determine if the system has a route to the specified
* IP address. Returns 0 if not, 1 if so, -1 if we can't tell.
+ * `addr' is in network byte order.
* For demand mode to work properly, we have to ignore routes
* through our own interface.
*/
syslog(LOG_DEBUG, "have_route_to: dest=%x gw=%x mask=%x\n",
rp->ipRouteDest, rp->ipRouteNextHop,
rp->ipRouteMask);
- if (((addr ^ rp->ipRouteDest) && rp->ipRouteMask) == 0
+ if (((addr ^ rp->ipRouteDest) & rp->ipRouteMask) == 0
&& rp->ipRouteNextHop != remote_addr)
return 1;
}