vpn connection
==============

Service		net.connman.vpn
Interface	net.connman.vpn.Connection
Object path	[variable prefix]/{connection0,connection1,...}

Methods		dict GetProperties()  [experimental]

			Returns properties for the connection object. See
			the properties section for available properties.

			Possible Errors: [connection].Error.InvalidArguments

		void SetProperty(string name, variant value) [experimental]

			Changes the value of the specified property or the
			properties defined as a dict passed as variant, where
			the format is equal to the dict returned by
			GetProperties(). Only properties that are listed as
			read-write are changeable. Property name "Properties"
			indicates a dict of properties. On success a
			PropertyChanged signal will be emitted for the
			specified property or for all changed properties
			individually. If there is no change in property value
			no PropertyChanged signal is sent. Configuration is
			written to disk when one or more values are changed.
			In case a dict of properties are given, configuration
			write is done after all properties are processed.
			Specifics in dict use in contrast to setting a single
			property:
				- Dict can contain values set as empty strings
				  or arrays. This causes the values to be
				  cleared as if using ClearProperty().
				- If there are errors with the properties,
				  InvalidProperty or PermissionDenied error is
				  returned. InvalidProperty is sent when there
				  is at least one invalid property, in this
				  case there can be also properties that
				  cannot be changed (immutable properties).
				  If there are only immutable properties
				  PermissionDenied error is returned.
				- The properties that are invalid or immutable
				  are reported back at the end of the error
				  message as a comma separated property name
				  list.
				- One invalid/immutable property does not
				  cause the rest of the properties to be
				  ignored. If there are valid and invalid
				  properties, the valid properties emit
				  PropertyChanged signal and invalid are
				  reported back with an InvalidProperty
				  message.

			Possible Errors: [connection].Error.InvalidArguments
					 [connection].Error.InvalidProperty
					 [connection].Error.PermissionDenied
					 [connection].Error.NotSupported

		void ClearProperty(string name) [experimental]

			Clears the value of the specified property.

			Possible Errors: [connection].Error.InvalidArguments
					 [connection].Error.InvalidProperty
					 [connection].Error.PermissionDenied

		void Connect() [experimental]

			Connect this VPN connection. It will attempt to connect
			to the VPN connection. The Connect() will wait until
			the connection is created or there is an error. The
			error description is returned in dbus error.

			Possible Errors: [connection].Error.InvalidArguments
					[connection].Error.InProgress

		void Connect2(string dbus_sender) [experimental]

			Connect this VPN connection. The Connect2() is a
			wrapper for Connect() allowing to pass original D-Bus
			sender when proxying the connection request. The
			Connect2() will wait until the connection is created or
			there is an error. The error description is returned in
			dbus error.

			Possible Errors: [connection].Error.InvalidArguments
					[connection].Error.InProgress


		void Disconnect() [experimental]

			Disconnect this VPN connection. If the connection is
			not connected an error message will be generated.

			Possible Errors: [connection].Error.InvalidArguments

Signals		PropertyChanged(string name, variant value) [experimental]

			This signal indicates a changed value of the given
			property.

Properties	string State [readonly]

			The connection state information.

			Valid states are "idle", "failure", "configuration",
			"ready", "disconnect".

		string Type [readonly]

			The VPN type (for example "openvpn", "vpnc" etc.)

		string Name [readonly]

			The VPN name.

		string Domain [readonly]

			The domain name used behind the VPN connection.
			This is optional for most VPN technologies.

		string Host [readonly]

		       The VPN host (server) address.

		boolean Immutable [readonly]

			This value will be set to true if the connection is
			configured externally via a configuration file.

			The only valid operation are Connect(), Disconnect()
			and GetProperties()

		boolean SplitRouting

			This value reflects the split routing setting on
			connmand side. By default, this value is omitted and
			defaults to false. The value needs to be explicitly
			set to true for VPN to be split routed.

		int Index [readonly]

			The index of the VPN network tunneling interface.
			If there is no tunneling device, then this value
			is not returned.

		dict IPv4 [readonly]

			string Address

			        The current configured IPv4 address.

			string Netmask

			       The current configured IPv4 netmask.

			string Gateway

			       The current configured IPv4 gateway.

			string Peer

			       The current configured VPN tunnel endpoint
			       IPv4 address.

		dict IPv6 [readonly]

			string Address

			        The current configured IPv6 address.

			string PrefixLength

			       The prefix length of the IPv6 address.

			string Gateway

			       The current configured IPv6 gateway.

			string Peer

			       The current configured VPN tunnel endpoint
			       IPv6 address.

		array{string} Nameservers [readonly]

			The list of nameservers set by VPN.

		array{dict} UserRoutes [readwrite]

			int ProtocolFamily

				Protocol family of the route. Set to 4
				if IPv4 and 6 if IPv6 route. Set to 0
				(PF_UNSPEC) or omit, to have it assigned
				automatically.

			string Network

				The network part of the route.

			string Netmask

				The netmask of the route. For IPv6 routes,
				this is the prefix length.

			string Gateway

				Gateway address of the route.

			The list of currently active user activated
			routes.

		array{dict} ServerRoutes [readonly]

			int ProtocolFamily

				Protocol family of the route. Set to 4
				if IPv4 and 6 if IPv6 route.

			string Network

				The network part of the route.

			string Netmask

				The netmask of the route. For IPv6 routes,
				this is the prefix length.

			string Gateway

				Gateway address of the route.

			The VPN server activated route. These routes
			are pushed to connman by VPN server.

		There can be other properties also but as the VPN
		technologies are so different, they have different
		kind of options that they need, so not all options
		are mentioned in this document.
