diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-05-27 23:44:33 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-05-27 23:44:33 +0200 |
commit | 5c9331bc481ce5a3c438158020d40a41ec9b9c8e (patch) | |
tree | 01555166b0b357891b17baf862ffc128a91a8d1d /src/connection.c | |
parent | 55e3005fcd96479b0512d6e4954de05cdd55b7ce (diff) | |
download | connman-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.c | 22 |
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; |