> -----Original Message-----
> From: Alon Bar-Lev [mailto:alon.bar...@gmail.com]
> Sent: donderdag 10 mei 2012 2:10
> To: Arne Schwabe
> Cc: openvpn-devel@lists.sourceforge.net
> Subject: Re: [Openvpn-devel] [PATCH] Openvpn for Android 4.0 Changeset
> 
> On Thu, May 10, 2012 at 3:01 AM, Arne Schwabe <a...@rfc2549.org> wrote:
> > Am 10.05.12 01:39, schrieb Alon Bar-Lev:
> >> On Thu, May 10, 2012 at 2:24 AM, Arne Schwabe <a...@rfc2549.org>
> wrote:
> >>>> I need a better description of the tun process... so far I did not
> >>>> understand why you cannot use standard approach of creating
> >>>> persistent tun with non root access and then use the iproute2
> >>>> wrapper with suid or sudo to setup its configuration.
> >>>>
> >>>> Alon.
> >>> I have no root access on the telephone. But Android 4.0 provides an
> >>> API for VPNs
> >>>
> (http://developer.android.com/reference/android/net/VpnService.html).
> >>> Looking at my method at the method that opens the tun device to
> >>> passed over managment socket might also give an idea how it is done
> in Android:
> >>> http://code.google.com/p/ics-
> openvpn/source/browse/src/de/blinkt/ope
> >>> nvpn/OpenVpnService.java#220
> >>>
> >>> Arne
> >> I understand.
> >>
> >> But... let's discuss another approach...
> >>
> >> Implement android-ip program that uses the Android API, and put
> >> "iproute2 android-ip" in configuration.
> >>
> >> Now, the interface of the program is similar to what iproute is
> >> receiving, but instead of netlink it does android API.
> >>
> >> So actually you can receive requests from openvpn via this interface
> >> without modifying openvpn...
> >>
> >> Maybe I am missing something, please bear with me.
> >>
> > The android API in this case is Java.  There is no C API that can be
> > used. Opening the tun device requires passing the fd of the tun
> device
> > to openvpn. Also the for sockets that should not be routed over the
> > tun device the Java API provides a protect(int fd) API. That means
> the
> > socket from openvpn needs to passed to the Java GUI to call the
> > protect method.
> >
> > I see 2 way to accomplish this:
> >
> > - Using the the java native interface to directly call into java from
> > c and vice versa. This worked but since openvpn was not really usable
> > as a library I got other problem (the google code repository has
> > earlier version of the code which uses this.)
> > - Keep openvpn as seperate process and pass the fd over a unix
> socket.
> > (One of the more obscure Unix apis)
> >
> > The requirement that all information as ip addresses, dns and routes
> > must be available means that the persist-tun device cannot be used if
> > I also want to be to use pull.
> >
> > Calling an external programs could eliminate the "ROUTE" , "DNS",
> > "DOMAIN" , "IFCONFIG" management commands I have introduced. But the
> > patched implements also two fd passing managment commands "PROTECT-
> FD"
> > (passes fd from openvpn to GUI) and "OPENTUN" (passes fd from GUI to
> > openvpn).
> >
> > Arne
> >
> 
> Great, so we can first shrink the patch!
> 
> So two features you implied...
> 
> 1. pass pre-opened tun device
> 
> are you sure there are no alternatives to this? how does the java api
> receives the handle anyway?
> 

I agree with Arne's approach of letting the tun driver be passed through the 
management interface. This is the way things work in Android VPNService land. I 
still need to go through the code though.

> 2. the "protect" API.
> 
> Can you please explain more about the functionality of the "protect"
> API? why is this actually required? maybe there are alternatives.
> 

About the protect API: The VPNService API routes all traffic through the VPN by 
default. The socket used by OpenVPN needs to be "protected" from this, using a 
special function call. Therefore, Android Java needs this call.

Adriaan

Reply via email to