72
static int add_vpn_host(struct connman_element *element,
78
struct sockaddr_in addr;
81
DBG("element %p", element);
83
sk = socket(PF_INET, SOCK_DGRAM, 0);
87
memset(&ifr, 0, sizeof(ifr));
88
ifr.ifr_ifindex = element->index;
90
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
94
DBG("ifname %s", ifr.ifr_name);
96
memset(&rt, 0, sizeof(rt));
97
rt.rt_flags = RTF_UP | RTF_HOST | RTF_GATEWAY;
99
memset(&addr, 0, sizeof(addr));
100
addr.sin_family = AF_INET;
101
addr.sin_addr.s_addr = inet_addr(host);
102
memcpy(&rt.rt_dst, &addr, sizeof(rt.rt_dst));
104
memset(&addr, 0, sizeof(addr));
105
addr.sin_family = AF_INET;
106
addr.sin_addr.s_addr = inet_addr(gateway);
107
memcpy(&rt.rt_gateway, &addr, sizeof(rt.rt_gateway));
109
memset(&addr, 0, sizeof(addr));
110
addr.sin_family = AF_INET;
111
addr.sin_addr.s_addr = INADDR_NONE;
112
memcpy(&rt.rt_genmask, &addr, sizeof(rt.rt_genmask));
114
rt.rt_dev = ifr.ifr_name;
116
err = ioctl(sk, SIOCADDRT, &rt);
118
connman_error("Setting VPN host failed (%s)",
126
static int del_vpn_host(const char *host)
129
struct sockaddr_in addr;
132
sk = socket(PF_INET, SOCK_DGRAM, 0);
136
memset(&rt, 0, sizeof(rt));
137
rt.rt_flags = RTF_UP | RTF_HOST;
139
memset(&addr, 0, sizeof(addr));
140
addr.sin_family = AF_INET;
141
addr.sin_addr.s_addr = inet_addr(host);
142
memcpy(&rt.rt_dst, &addr, sizeof(rt.rt_dst));
144
err = ioctl(sk, SIOCDELRT, &rt);
146
connman_error("Del vpn route failed (%s)",
154
static int set_vpn_route(struct connman_element *element, const char *gateway)
158
struct sockaddr_in addr;
161
DBG("set_rout1: element %p", element);
163
sk = socket(PF_INET, SOCK_DGRAM, 0);
167
memset(&ifr, 0, sizeof(ifr));
168
ifr.ifr_ifindex = element->index;
170
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
175
DBG("ifname %s", ifr.ifr_name);
177
memset(&ifr, 0, sizeof(ifr));
178
ifr.ifr_ifindex = element->index;
180
memset(&rt, 0, sizeof(rt));
181
rt.rt_flags = RTF_UP | RTF_GATEWAY;
183
memset(&addr, 0, sizeof(addr));
184
addr.sin_family = AF_INET;
185
addr.sin_addr.s_addr = INADDR_ANY;
186
memcpy(&rt.rt_dst, &addr, sizeof(rt.rt_dst));
188
memset(&addr, 0, sizeof(addr));
189
addr.sin_family = AF_INET;
190
addr.sin_addr.s_addr = inet_addr(gateway);
191
memcpy(&rt.rt_gateway, &addr, sizeof(rt.rt_gateway));
193
memset(&addr, 0, sizeof(addr));
194
addr.sin_family = AF_INET;
195
addr.sin_addr.s_addr = INADDR_ANY;
196
memcpy(&rt.rt_genmask, &addr, sizeof(rt.rt_genmask));
198
err = ioctl(sk, SIOCADDRT, &rt);
200
connman_error("Setting VPN route failed (%s)",
208
static int del_route(struct connman_element *element, const char *gateway)
212
struct sockaddr_in addr;
215
DBG("element %p", element);
217
sk = socket(PF_INET, SOCK_DGRAM, 0);
221
memset(&ifr, 0, sizeof(ifr));
222
ifr.ifr_ifindex = element->index;
224
if (ioctl(sk, SIOCGIFNAME, &ifr) < 0) {
229
DBG("ifname %s", ifr.ifr_name);
231
memset(&rt, 0, sizeof(rt));
232
rt.rt_flags = RTF_UP | RTF_GATEWAY;
234
memset(&addr, 0, sizeof(addr));
235
addr.sin_family = AF_INET;
236
addr.sin_addr.s_addr = INADDR_ANY;
237
memcpy(&rt.rt_dst, &addr, sizeof(rt.rt_dst));
239
memset(&addr, 0, sizeof(addr));
240
addr.sin_family = AF_INET;
241
addr.sin_addr.s_addr = inet_addr(gateway);
242
memcpy(&rt.rt_gateway, &addr, sizeof(rt.rt_gateway));
244
memset(&addr, 0, sizeof(addr));
245
addr.sin_family = AF_INET;
246
addr.sin_addr.s_addr = INADDR_ANY;
247
memcpy(&rt.rt_genmask, &addr, sizeof(rt.rt_genmask));
249
err = ioctl(sk, SIOCDELRT, &rt);
251
connman_error("Removing default route failed (%s)",
259
static int del_route_all(struct gateway_data *data)
264
del_vpn_host(data->gateway);
266
err = del_route(data->element, data->vpn_ip);
268
err = del_route(data->element, data->gateway);
66
static int del_routes(struct gateway_data *data)
70
connman_inet_del_host_route(data->index, data->gateway);
73
address = data->vpn_ip;
75
address = data->gateway;
77
return connman_inet_clear_gateway_address(data->index, address);
273
80
static void find_element(struct connman_element *element, gpointer user_data)