mirror of
https://github.com/OpenVPN/openvpn.git
synced 2026-06-11 09:50:26 -04:00
Emulate persist-tun on Android
On Android changing the configuration of tun is not possible. So instead of reconfiguring the tun device, open a new tun device and close the old one if needed. Acked-by: Gert Doering <gert@greenie.muc.de> Message-Id: <1367006372-14815-1-git-send-email-arne@rfc2549.org> URL: http://article.gmane.org/gmane.network.openvpn.devel/7558 Signed-off-by: Gert Doering <gert@greenie.muc.de>
This commit is contained in:
parent
a55b3cdb23
commit
bd14d55d87
1 changed files with 17 additions and 1 deletions
|
|
@ -1402,8 +1402,19 @@ do_open_tun (struct context *c)
|
|||
c->c2.ipv4_tun = (!c->options.tun_ipv6
|
||||
&& is_dev_type (c->options.dev, c->options.dev_type, "tun"));
|
||||
|
||||
#ifndef TARGET_ANDROID
|
||||
if (!c->c1.tuntap)
|
||||
{
|
||||
#endif
|
||||
|
||||
#ifdef TARGET_ANDROID
|
||||
/* If we emulate persist-tun on android we still have to open a new tun and
|
||||
then close the old */
|
||||
int oldtunfd=-1;
|
||||
if (c->c1.tuntap)
|
||||
oldtunfd = c->c1.tuntap->fd;
|
||||
#endif
|
||||
|
||||
/* initialize (but do not open) tun/tap object */
|
||||
do_init_tun (c);
|
||||
|
||||
|
|
@ -1439,7 +1450,10 @@ do_open_tun (struct context *c)
|
|||
/* open the tun device */
|
||||
open_tun (c->options.dev, c->options.dev_type, c->options.dev_node,
|
||||
c->c1.tuntap);
|
||||
|
||||
#ifdef TARGET_ANDROID
|
||||
if (oldtunfd>=0)
|
||||
close(oldtunfd);
|
||||
#endif
|
||||
/* set the hardware address */
|
||||
if (c->options.lladdr)
|
||||
set_lladdr(c->c1.tuntap->actual_name, c->options.lladdr, c->c2.es);
|
||||
|
|
@ -1481,6 +1495,7 @@ do_open_tun (struct context *c)
|
|||
|
||||
ret = true;
|
||||
static_context = c;
|
||||
#ifndef TARGET_ANDROID
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
@ -1503,6 +1518,7 @@ do_open_tun (struct context *c)
|
|||
"up",
|
||||
c->c2.es);
|
||||
}
|
||||
#endif
|
||||
gc_free (&gc);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue