On 26/04/13 21:59, Arne Schwabe wrote: > 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 > --- > src/openvpn/init.c | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > diff --git a/src/openvpn/init.c b/src/openvpn/init.c > index f08583b..9ff6600 100644 > --- a/src/openvpn/init.c > +++ b/src/openvpn/init.c > @@ -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; > }
There are a few stylish details I could nit-pick on, such as if(bool) -> if (bool) but that's so minor I don't even convinced this makes sense to fix up before applying. So, looks good, code wise. Not compile tested, only patch review. -- kind regards, David Sommerseth
signature.asc
Description: OpenPGP digital signature