aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/netdev.c12
-rw-r--r--lib/netdev.h4
-rw-r--r--lib/tun.c2
-rw-r--r--sgsnemu/sgsnemu.c16
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);
diff --git a/lib/tun.c b/lib/tun.c
index 1aeed55..c771b92 100644
--- a/lib/tun.c
+++ b/lib/tun.c
@@ -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);