summaryrefslogtreecommitdiff
path: root/src/connection.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-05-27 23:44:33 +0200
committerMarcel Holtmann <marcel@holtmann.org>2009-05-27 23:44:33 +0200
commit5c9331bc481ce5a3c438158020d40a41ec9b9c8e (patch)
tree01555166b0b357891b17baf862ffc128a91a8d1d /src/connection.c
parent55e3005fcd96479b0512d6e4954de05cdd55b7ce (diff)
downloadconnman-5c9331bc481ce5a3c438158020d40a41ec9b9c8e.tar.gz
connman-5c9331bc481ce5a3c438158020d40a41ec9b9c8e.tar.bz2
connman-5c9331bc481ce5a3c438158020d40a41ec9b9c8e.zip
Add host route to default gateway first
Diffstat (limited to 'src/connection.c')
-rw-r--r--src/connection.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/src/connection.c b/src/connection.c
index 3b67b921..293b9111 100644
--- a/src/connection.c
+++ b/src/connection.c
@@ -98,6 +98,28 @@ static int set_route(struct connman_element *element, const char *gateway)
DBG("ifname %s", ifr.ifr_name);
memset(&rt, 0, sizeof(rt));
+ rt.rt_flags = RTF_UP | RTF_HOST;
+
+ addr = (struct sockaddr_in *) &rt.rt_dst;
+ addr->sin_family = AF_INET;
+ addr->sin_addr.s_addr = inet_addr(gateway);
+
+ addr = (struct sockaddr_in *) &rt.rt_gateway;
+ addr->sin_family = AF_INET;
+ addr->sin_addr.s_addr = INADDR_ANY;
+
+ addr = (struct sockaddr_in *) &rt.rt_genmask;
+ addr->sin_family = AF_INET;
+ addr->sin_addr.s_addr = INADDR_ANY;
+
+ rt.rt_dev = ifr.ifr_name;
+
+ err = ioctl(sk, SIOCADDRT, &rt);
+ if (err < 0)
+ connman_error("Setting host gateway route failed (%s)",
+ strerror(errno));
+
+ memset(&rt, 0, sizeof(rt));
rt.rt_flags = RTF_UP | RTF_GATEWAY;
addr = (struct sockaddr_in *) &rt.rt_dst;