diff options
-rw-r--r-- | lib/netdev.c | 12 | ||||
-rw-r--r-- | lib/netdev.h | 4 | ||||
-rw-r--r-- | lib/tun.c | 2 | ||||
-rw-r--r-- | sgsnemu/sgsnemu.c | 16 |
4 files changed, 19 insertions, 15 deletions
diff --git a/lib/netdev.c b/lib/netdev.c index 19c5c62..4d171c9 100644 --- a/lib/netdev.c +++ b/lib/netdev.c @@ -176,7 +176,7 @@ int netdev_setaddr4(const char *devname, struct in_addr *addr, /* On linux the route to the interface is set automatically on FreeBSD we have to do this manually */ #if defined(__FreeBSD__) || defined (__APPLE__) - netdev_addroute(dstaddr, addr, &this->netmask); + netdev_addroute4(dstaddr, addr, &this->netmask); #endif return 0; @@ -553,7 +553,7 @@ int netdev_addaddr6(const char *devname, struct in6_addr *addr, return 0; } -static int netdev_route(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask, int delete) +static int netdev_route4(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask, int delete) { int fd; #if defined(__linux__) @@ -643,14 +643,14 @@ static int netdev_route(struct in_addr *dst, struct in_addr *gateway, struct in_ return 0; } -int netdev_addroute(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask) +int netdev_addroute4(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask) { - return netdev_route(dst, gateway, mask, 0); + return netdev_route4(dst, gateway, mask, 0); } -int netdev_delroute(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask) +int netdev_delroute4(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask) { - return netdev_route(dst, gateway, mask, 1); + return netdev_route4(dst, gateway, mask, 1); } #include <ifaddrs.h> diff --git a/lib/netdev.h b/lib/netdev.h index 74c42da..5dab27f 100644 --- a/lib/netdev.h +++ b/lib/netdev.h @@ -65,8 +65,8 @@ extern int netdev_addaddr4(const char *devname, struct in_addr *addr, extern int netdev_addaddr6(const char *devname, struct in6_addr *addr, struct in6_addr *dstaddr, int prefixlen); -extern int netdev_addroute(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask); -extern int netdev_delroute(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask); +extern int netdev_addroute4(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask); +extern int netdev_delroute4(struct in_addr *dst, struct in_addr *gateway, struct in_addr *mask); extern int netdev_ip_local_get(const char *devname, struct in46_prefix *prefix_list, size_t prefix_size, int flags); @@ -276,7 +276,7 @@ int tun_free(struct tun_t *tun) { if (tun->routes) { - netdev_delroute(&tun->dstaddr.v4, &tun->addr.v4, &tun->netmask); + netdev_delroute4(&tun->dstaddr.v4, &tun->addr.v4, &tun->netmask); } if (tun->fd >= 0) { diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c index 6b05ac5..c28df52 100644 --- a/sgsnemu/sgsnemu.c +++ b/sgsnemu/sgsnemu.c @@ -1516,9 +1516,11 @@ static int create_pdp_conf(struct pdp_t *pdp, void *cbp, int cause) /* printf("Setting up interface and routing\n"); */ tun_addaddr(tun, &addr[i], NULL, prefixlen); if (options.defaultroute) { - struct in_addr rm; - rm.s_addr = 0; - netdev_addroute(&rm, &addr[i].v4, &rm); + if (in46a_is_v4(&addr[i])) { + struct in_addr rm; + rm.s_addr = 0; + netdev_addroute4(&rm, &addr[i].v4, &rm); + } } if (options.ipup) tun_runscript(tun, options.ipup); @@ -1718,9 +1720,11 @@ int main(int argc, char **argv) if ((options.createif) && (options.netaddr.len)) { tun_addaddr(tun, &options.netaddr, NULL, options.prefixlen); if (options.defaultroute) { - struct in_addr rm; - rm.s_addr = 0; - netdev_addroute(&rm, &options.netaddr.v4, &rm); + if (in46a_is_v4(&options.netaddr)) { + struct in_addr rm; + rm.s_addr = 0; + netdev_addroute4(&rm, &options.netaddr.v4, &rm); + } } if (options.ipup) tun_runscript(tun, options.ipup); |