You are right, a Pre Activaition would solve the issue. I spent the past
2 hours working with the pre-up and vpn-up statuses and found that the
tun0 device wouldn't release properly as the openvpn binary is launched
before the hook is triggered.

Fun exercise though. However, all is not lost:

/usr/lib/NetworkManager/VPN/nm-openvpn-service.name

supports-multiple-connections=false *does* actually enforce a single
connection rule, forcing the user to disconnect from the VPN first
before launching another one. I can live with that.

Out of curiousity I'm going to try giving latest gnome3 a spin and see
if I can solve my (perceived) interface quirks.

Thanks for your time,

Dave


On 15/04/16 03:09 PM, Thomas Haller wrote:
> On Fri, 2016-04-15 at 13:13 +0200, Dave Conroy wrote:
>> Hi Thomas, 
>> That explains it, thank you very much - you are correct in what I am
>> looking after.
>> There doesn't seem to be a working disconnect option in my version of
>> NetworkManager (1.193). I will try different GTK themes to see if it
>> is a problem with the theme itself. 
> Certainly NetworkManager, its D-Bus API, and `nmcli connection
> disconnect` support disconnecting a VPN connection. If your UI doesn't
> allow for that, it's a UI limitation/decision.
>
> I don't think GTK themes help there. Are you using the gnome-shell
> (Gnome3) NetworkManager integration? I am not familiar with how that
> works there, maybe there is no disconnect button? That would be
> strange...
>
>> Would there by chance be pre/post hooks that I could utilize to
>> execute before the connection is made? I could write up a script that
>> disconnects any active connection this way.
> There are dispatcher scripts. First, ensure to have the dispatcher
> service running:
>   `systemctl enable NetworkManager-dispatcher.service`
> Then place scripts to /etc/NetworkManager/dispatcher.d.
>
> See `man NetworkManager` for the events there.
>
> Note that the events `pre-up` and `pre-down` are special (because they
> block the device transition, we only want to call scripts there, which
> opt-in for those events. See the manual.
>
>
> Note, that `pre-up` might be a place to disconnect the other
> connection. The problem here is, that the (blocking) pre-up event is
> not emited ~before starting with activation~, but before ~declaring the
> device/VPN as fully up~ (but at that point, the VPN connection is
> already up for most of the part). 
> So, if your VPN connections all want to use tun0, you cannot avoid
> that.
>
>
>
> I guess, it would be a nice feature to have such ~conflicting
> connection`. But well...
>
> An alternative feature would be a "pre-activation" dispatcher event...
>
>
> Thomas
>
>
>> Thanks for the prompt response,
>> Dave
>>
>> On 15/04/16 12:15 PM, Thomas Haller wrote:
>>> Hi Dave,
>>>
>>>
>>> On Fri, 2016-04-15 at 06:04 +0200, Dave Conroy wrote:
>>>> I've just subscribed to a VPN service that has multiple
>>>> locations,
>>>> and imported all the necessary .ovpn files into Network Manager.
>>>> It seems that I do not have the option to disconnect from the
>>>> VPNs
>>>> when connected, and upon choosing another location it creates
>>>> another
>>>> tun device.
>>> You mean, you would like to have a configuration option in your VPN
>>> "connection", so that when activating another specific VPN
>>> connection,
>>> the former gets automatically disconnected?
>>>
>>> No, NetworkManager doesn't have a concept of ~conflicting~
>>> connections.
>>> When you activate connection A, you'd have to manually disconnect
>>> connection B.
>>>
>>>
>>>> I've made the change to no success to
>>>> /etc/NetworkManager/VPN/openvpn-service.name
>>>> supports-multiple-connections=false
>>>> Yet it still connects multiple locations without disconnecting
>>>> the
>>>> previous connection.
>>> That shouldn't happen. Did you restart NM after changing the file?
>>> But
>>> I suspect the file /etc/NetworkManager/VPN/openvpn-service.name is
>>> ignored and instead it uses /usr/lib/NetworkManager/VPN/openvpn-
>>> service.name. The file in /etc only exists for backward
>>> compatibility,
>>> in 1.2, the location of this file moved to /usr/lib.
>>>
>>> Changing supports-multiple-connection=false actually should give
>>> you
>>> the conflicting behavior, but that doesn't sound like the right
>>> approach. First of all, openvpn-service.name is not user-
>>> configuration. 
>>> This setting is here to tell NetworkManager that this plugin is new
>>> enough to support multiple activations of Openvpn connections
>>> (simultaneously). It's not here to implement ~conflicting
>>> connections~.
>>>
>>> Before 1.2, VPN plugins did not support to activate more then once
>>> at a
>>> time. Old plugins were always supports-multiple-connections=false.
>>>
>>>
>>>> Furthermore, I've set it to specifically use tun0 for my
>>>> connections
>>>> yet upon trying to load another connection even after "disabling"
>>>> the
>>>> VPN (I use Cinnamon Desktop) it says that it cannot access tun0
>>>> as
>>>> the device is busy. I can disconnect via nmctl 
>>> Yes, you can disconnect with nmcli.
>>>
>>>> but was wondering if there was a way that I could force
>>>> NetworkManaager to only use one VPN connection at a time,
>>>> releasing
>>>> back tun0 to be used again.
>>> No, such a concept doesn't exist (up to now).
>>>
>>>
>>>> Error Code:
>>>> ERROR: Cannot ioctl TUNSETIFF tun0: Device or resource busy
>>>> (errno=16)
>>> openvpn said that? Yes, that sounds expected, right?
>>>
>>>
>>>
>>> Thomas
>>  
>> -- 
>> Dave Conroy (d...@tiredofit.ca) PGP: 0x45C0F342
>> Pedaling around the world away from a job in Information Technology
>> Tired of I.T! http://www.tiredofit.ca The Book - Now available!
>> http://www.tiredofit.ca/book/

-- 
Dave Conroy (d...@tiredofit.ca) PGP: 0x45C0F342
Pedaling around the world away from a job in Information Technology
Tired of I.T! http://www.tiredofit.ca The Book - Now available!
http://www.tiredofit.ca/book/

_______________________________________________
networkmanager-list mailing list
networkmanager-list@gnome.org
https://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to