VPN daemon overview
*******************


Manager interface
=================

Manager interface described in vpn-manager-api.txt is to be used
by both the connectivity UI and by ConnMan. The Create(),
Remove(), RegisterAgent() and UnregisterAgent() functions are for
UI usage. The GetConnections() method and ConnectionAdded() and
ConnectionRemoved() signals are for ConnMan VPN plugin to use.

The UI should use the methods like this:
- Ask VPN properties (like certs, usernames etc) from the user.
- Call Manager.Create() to create a VPN connection (note that
  the system does not yet try to connect to VPN at this point)
- Register an agent to vpnd so that vpnd can ask any extra
  parameters etc from the user if needed.
- If the user wants to connect to VPN gateway, then the
  connection attempt should be done in ConnMan side as
  there will be a service created there.
- If the user wishes to remove the VPN configuration, the UI
  can call the Manager.Remove() which removes the VPN connection.
  If the VPN was in use, the VPN connection is also disconnected.
- When UI is terminated, the UI should call the UnregisterAgent()

The ConnMan calls VPN daemon like this:
- There is a VPN plugin which at startup starts to listen the
  ConnectionAdded() and ConnectionRemoved() signals.
- The VPN plugin will call GetConnections() in order to get
  available VPN connections. It will then create a provider service
  for each VPN connection that is returned.
- User can then connect to the VPN by calling the service Connect()
  method
- The existing ConnMan Manager.ConnectProvider() interface can still
  work by calling vpn.Manager.Create() and then call vpn.Connection.Connect()
  but this ConnectProvider() interface will be deprecated at some
  point.



Connection interface
====================

The Manager.Create() will return the object path of the created
vpn.Connection object and place it in idle state. Note that
vpn.Connection.PropertyChanged signal is not called when Connection
object is created because the same parameters are returned via
vpn.Manager.ConnectionAdded() signal.
The vpn.Connection object can be connected using the Connect() method
and disconnected by calling Disconnect() method. When the connection
is established (meaning VPN client has managed to create a connection
to VPN server), then State property is set to "ready" and PropertyChanged
signal is sent. If the connection cannot be established, then
State property is set to "failure".
After successfull connection, the relevant connection properties are sent
by PropertyChanged signal; like IPv[4|6] information, the index of the
VPN tunneling interface (if there is any), nameserver information,
server specified routes etc.
