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
