Manager hierarchy
=================

Service		org.chromium.flimflam
Interface	org.chromium.flimflam.Manager
Object path	/

Methods
		dict GetProperties()

			Return the global system properties specified
			in the Properties section.

		void SetProperty(string name, variant value)

			Changes the value of the specified property. Only
			properties that are listed as read-write are
			changeable. On success a PropertyChanged signal
			will be emitted.

			Possible Errors: [service].Error.InvalidArguments
					 [service].Error.InvalidProperty

		string GetState()

			Return the connection state of a system. The
			same value is return via the State property.

		object CreateProfile(string name)

			Create and add new profile with the specified
			identifier name.  The name should either be in the
			form ``name'' or ``~user/name'' where where ``user''
			is the login name of a user suitable for finding
			their home directory.  Both strings must contain
			only alpha-numeric ASCII characters.

			Profiles created without a user name are stored in
			a system directory readable only by the connection
			mananger.  Profiles created with a user name are
			stored in the user's home directory but readable
			only by the connection manager.

			If any existing profile is specified its contents
			are reset to a default (minimal) contents.  If the
			profile is already registered with a CreateProfile
			or PushProfile request then an error is returned.

			Possible Errors: [service].Error.InvalidArguments
					 [service].Error.AlreadyExists

		object PushProfile(string name)

			Push the profile with the specified identifier
			onto the profile stack.  The profile must have
			previously been created with CreateProfile.
			The profile becomes the ``active profile'' that
			is searched first when loading data and to which
			updates are stored.

			A profile may be pushed only once.

			Possible Errors: [service].Error.InvalidArguments
					 [service].Error.AlreadyExists

		object InsertUserProfile(string name, string user_hash)

			Add the profile with the specified identifier
			to the profile stack.  The profile must have
			previously been created with CreateProfile.
			The |user_hash| provided is assigned to the
			profile and is made visible as a property of
			the profile.

			A profile may be inserted or pushed only once.

			Possible Errors: [service].Error.InvalidArguments
					 [service].Error.AlreadyExists

		object PopProfile(string name)

			Pop the top-most profile on the profile stack.
			Any profile beneath this profile becomes the
			``active profile''.  Any services using configuration
			from the popped profile are disconnected and the
			credentials invalidated (the next time
			credentials are needed they are loaded from the
			(new) active profile).

			The name must match the identifer of the active
			profile.  This is a safeguard against accidentally
			removing the wrong profile.

			Note it is valid to pop all profiles from the
			stack; in this state the connection manager does
			not write any state to persistent storage.

			Possible Errors: [service].Error.InvalidArguments
					 [service].Error.NotFound

		object PopAnyProfile()

			Like PopProfile but do not check the profile on
			the top of the stack; pop anything.

			Possible Errors: [service].Error.InvalidArguments

		object PopAllUserProfiles()

			Remove all user profiles from the stack of managed
			profiles leaving only default profiles if any exist.

		void RemoveProfile(string name)

			Remove the profile with specified identifier.

			The profile may not be resident on the stack.
			The default profile may not be removed.

			Possible Errors: [service].Error.InvalidArguments
					 [service].Error.AlreadyExists

		void RequestScan(string type)

			Request a scan for each device of the specified
			technology.  If type is the string "" then a scan
			request is made for each technology.

			For WiFi devices this triggers a search for
			available WiFi networks.  When results are
			available, the Device.Networks property is
			updated and a PropertyChanged signal is issued.

			For cellular devices, this triggers a search for
			available cellular networks, which may take up to a
			minute or two to complete.  When the results are
			available, the Cellular.FoundNetworks property of
			each cellular device is set with the results.

			Possible Errors: [service].Error.InvalidArguments

		void EnableTechnology(string type)

			Enable all technologies of the specified type.

			Possible Errors: [service].Error.InvalidArguments
					 [service].Error.InProgress
					 [service].Error.AlreadyEnabled
					 [service].Error.PermissionDenied

		void DisableTechnology(string type)

			Disable all technologies of the specified type.

			Possible Errors: [service].Error.InvalidArguments
					 [service].Error.InProgress
					 [service].Error.AlreadyDisabled

		object ConfigureService(dict properties)

			Update the configuration of a service in memory
			and in the profile.  If no matching service exists
			in memory it is temporarily created to carry out
			this work and may be removed later.  The object
			path of the created service is returned.

			If a GUID property is specified in properties
			it is used to find the service; otherwise Type,
			SecurityClass, and type-specific properties such as
			WiFi.SSID are used to find any existing service.
			If no service is located in memory a new one is
			created with the supplied properties.

			All provided parameters are applied to the in
			memory service regardless of errors.  But if an
			error occurs while setting a property and the
			service object was created as a result of this
			call it is removed.  In the event of multiple
			errors the first error code is returned by
			this call.

			See the Service Properties section for a list of
			properties and constraints on property values.
			See also GetService.

			Possible Errors: [service].Error.InvalidArguments
					 [service].Error.NotSupported

		object ConfigureServiceForProfile(object profile,
						  dict properties)

			Create or update the configuration of a WiFi
			service within a specific profile.  This is
			similar to "ConfigureService" above, except
			that this might not change the state of the
			current service.  A matching service is found
			by first looking for a service with matching
			"GUID" property if specified, then by using
			the "Mode", "SSID", and "SecurityClass" properties
			from |properties|.

			If a matching service is found but its current
			profile supersedes the specified profile, a new
			profile entry is written with the specified
			properties.  This method can be used for
			configuring a service in the default profile
			while a separate configuration exists in the
			user profile.  In this scenario, no configured
			properties in the user profile entry will be
			copied to the default profile, and the user
			profile remains unchanged.  Moreover, the
			matching service will still refer to the user
			profile.

			A second example usage for this method is creating
			a copy of the current service from the default
			profile into the user profile.  If a matching
			service exists but its current profile antecedes
			the specified profile, the configuration of the
			current service is first copied to the new profile
			without removing the entry in the default profile.
			The service is then assigned to the new profile
			and the specified properties are then applied to
			the service and saved to the new profile, leaving
			the original profile intact.  This differs from the
			behavior of setting the "Profile" property on the
			service via the SetProperty or ConfigureService
			methods, which remove the configuration from the
			old profile.

			In situations where a matching service is not found,
			the service isn't associated with a profile, or the
			specified profile is already associated with the
			matched service, the behavior of this method mimics
			that of ConfigureService.

			Currently this method is only supported for WiFi
			services.  The specified profile must already
			be loaded and on the Manager's profile stack.
			If the "Profile" parameter is set in the properties
			dictionary, it must match the profile parameter.

			This method returns the object path of the created
			or modified service, in cases where a matching
			service will refer to the specified profile.
			Otherwise it returns the special path "/" to signify
			that although the operation succeeded, there is
			no matching service that refers to this profile.

			Possible Errors: [service].Error.InternalError
					 [service].Error.InvalidArguments
					 [service].Error.NotFound
					 [service].Error.NotSupported

		void FindMatchingService(dict properties)

			Find a service that matches all the properties
			and returns the object identifier associated
			with it.  If no service exists in memory that
			matches these arguments, an error is returned.

			See also GetService and ConfgiureService.

			Possible Errors: [service].Error.NotFound

		object GetService(dict properties)

			Return the object path of a service after
			applying any requested configuration changes.
			If no service exists it is created.

			If a GUID property is specified in properties
			it is used to find the service; otherwise Type,
			Security, and type-specific properties such as
			WiFi.SSID are used to find any existing service.
			If no service is located in memory a new one is
			created with the supplied properties.

			All provided parameters are applied to the service
			regardless of errors.  But if an error occurs
			while setting a property and the service was
			created as a result of this call it is removed.
			In the event of multiple errors the first error
			code is returned by this call.

			See the Service Properties section for a list of
			properties and constraints on property values.
			See also ConfigureService.

			Possible Errors: [service].Error.InvalidArguments
					 [service].Error.NotSupported
					 [service].Error.PermissionDenied
					 [service].Error.InternalError
					 [service].Error.InvalidNetworkName
					 [service].Error.InvalidPassphrase

		void SetDebugTags(string taglist)

			Set the debug tags that are enabled for logging to
			syslog. "taglist" is a list of valid tag names
			separated by "+".  Shill silently ignores
			invalid flags.

		string GetDebugTags()
			Get the list of enabled debug tags. The list is
			represented as a string of tag names separated
			by "+".

		string ListDebugTags()
			Get the list of all debug tags that can be enabled.
			The list is represented as a string of tag names
			separated by "+".

		string GetServiceOrder()

			Return a ','-separated string listing known technologies
			in priority ordering.

			For example, the default ordering would be returned as:
				"ethernet,wifi,cellular"

		void SetServiceOrder(string mask)

			Set the technology priority based on a provided
			','-separated list of technologies, sorted from highest
			priority to lowest.

			The list may contain the following services:
				{ ethernet, wifi, cellular }
			Technologies not included are assigned the lowest
			priority.

			Technology priority changes occur immediately.

			Possible Errors: [service].Error.InvalidArguments

		void RecheckPortal()

			Retest the portal state of all connected services
			if a check is not currently in progress.

		dict GetNetworksForGeolocation()

			Returns a dictionary (array of dictionary entries)
			containing information about visible cellular and WiFi
			networks which may be then used for Geolocation.
			Each key is a string representing a network type (cellular
			or WiFi), and the value itself is an array of dictionaries
			mapping string key-value pairs. Each of these
			(sub) dictionaries contains information about one single
			network for Geolocation.
			If there are several network devices of a particular
			type, this method will return all of the information
			from all of the devices.
			For more details, see:
			https://developers.google.com/maps/documentation/business/geolocation/


		boolean SetNetworkThrottlingStatus(bool enabled,
						   uint32 upload_rate_kbits,
						   uint32 download_rate_kbits)

			Enables or disables network throttling to limit bandwidth
			consumed by the device. Applies to all interfaces. Both
			rates are specified in kbits/s. If throttling already
			exists, this will override current throttling settings.

		void ConnectToBestServices()

			For each technology present, connect to the "best"
			service available, as determined by sorting all
			services independent of their current connectivity
			state.  As a general rule, shill does not disrupt
			current connectivity even if "better" connectivity
			options appear.  This method allows this rule to be
			violated for a single instance for each technology
			type.

		void CreateConnectivityReport()

			For each connected service, perform a single
			connectivity trial and report the results to the log.
			This connectivity test does not affect Service state.

		void ClaimInterface(string claimer_name, string interface_name)

			Assign the ownership of a device |interface_name| to the
			claimer |claimer_name|. The specified device will be
			added to the block list. Any current connection on that device
			will be terminated, and shill will stop managing that device.

		void ReleaseInterface(string claimer_name, string interface_name)

			Take the ownership of a device |interface_name| from
			claimer |claimer_name| back to shill. The specified device
			will be removed from the block list and managed by shill.

		void SetDNSProxyIPv4Address(string ipv4_address)

			Assigns the IPv4 address of the dns-proxy service.
			When set, shill will use this address as the
			system name server rather than those specified by the
			relevant service.

			This address is enforced to be within a predetermined
			system local subnet.

		void DNSProxyDOHProviders(array{string, string} providers)

			Assigns the DNS-over-HTTPS service providers for use by
			the dns-proxy service. URLs of the secure
			DNS service endpoints are used as keys. If applicable,
			each value is a comma-separated list of the IP addresses
			(both v4 and v6 are supported) of the standard DNS name
			servers that map to the secure DNS service provider.

Signals		PropertyChanged(string name, variant value)

			This signal indicates a changed value of the given
			property.

		StateChanged(string state)

			This signal is similar to the PropertyChanged signal
			for the State property.

			It exists for application state only care about the
			current state and so can avoid to be woken up when
			other details changes.

Properties 	object ActiveProfile [readonly]

			Object path of the top-most Profile in the Profile stack.

		string AlwaysOnVpnPackage [readwrite]

			Package name of an Android VPN app to use as the "AlwaysOnVpn"
			connection. When this property is not "", all user traffic will be
			blackholed unless we are connected to an ARC VPN using the
			corresponding Android app.

		boolean ArpGateway [readwrite]

			Specifies whether the DHCP client should be configured to perform
			the extra step of performing an ARP of the gateway IP address.  This
			provides a level of assurance that the issued IP address is valid
			and not blocked in some manner unknown by the DHCP server.

		array{string} AvailableTechnologies [readonly]

			The list of technologies for which at least one Device exists (see
			the caveat in Devices). Order carries no meaning and is not
			guaranteed to be consistent.

		string CheckPortalList [readwrite]

			The list of technologies for which "captive portal checking"--really
			just connectivity quick checks--is enabled.  This is a
			comma-separated string; e.g. "wifi,cellular,vpn".

		array{string} ClaimedDevices [readonly]

			The list of the names of devices that have been claimed by the
			current DeviceClaimer (if it exists).

		array{string} ConnectedTechnologies [readonly]

			The list of technologies for which at least one Device is connected
			(see the caveat in Devices). Order carries no meaning and is not
			guaranteed to be consistent.

		string ConnectionState [readonly]

			The state of the highest ranked connected service.  The value of
			this property is "idle" if there are no connected services.
			Otherwise this can be any of the connected service states, e.g,
			"ready" or "online".

		object DefaultService [readonly]

			The object path of the connected Service with the highest
			priority. If there is no connected Service, returns the "/" object
			path.

		string DefaultTechnology [readonly]

			The technology of the DefaultService.

		array{object} Devices [readonly]

			List of physical Device object paths. No virtual Devices are
			contained in this list *except* for any PPPDevices being used by
			active PPPoEServices. Order carries no meaning and is not guaranteed
			to be consistent.

		string DHCPProperty.Hostname [readwrite]

			Optional setting to configure DHCP requests.  Some DHCP servers may
			register a DNS entry on behalf of this hostname; others may just
			make available a table for administrators to tell what machines are
			on their network.

			The default for this name is empty, which means that the system will
			not report a hostname.  When this property is set it will be
			persisted in the default profile.

		string DHCPProperty.VendorClass [readwrite]

			Optional setting to configure DHCP requests.  This setting can be
			used to identify the vendor that manufactured the client hardware,
			the software in use, or an industry consortium to which the vendor
			belongs.

			The default for this property is empty, which means the system will
			not report a Vendor Class.  When set, this property will override
			the default setting and be persisted in the default profile.

		bool DisableVHT [readwrite]

			Disables 802.11ac Very High Throughput (VHT) connections, reverting
			to 802.11n.

		array{string} EnabledTechnologies [readonly]

			The list of technologies for which at least one Device is enabled
			(see the caveat in Devices). Order carries no meaning and is not
			guaranteed to be consistent.

		string IgnoredDNSSearchPaths [readwrite]

			A comma-separated list of DNS domain suffixes which should be
			ignored when creating a DNS search list from DHCP-provided
			parameters. This list will be consulted every time DHCP information
			is updated (while connecting to a network, or when a DHCP lease is
			renewed).

		string NoAutoConnectTechnologies [readwrite]

			The list of technologies for which auto-connect is disabled. This is
			a comma-separated string, e.g. "cellular,wifi".

		string PortalFallbackUrlsString [readwrite]

			Comma-separated string of URLs used for HTTP connectivity
			verification after the first connectivity verification trial. The
			order of these URLs has no meaning.

		string PortalHttpUrl [readonly]

			The URL to use when doing connectivity verification over HTTP.

		string PortalHttpsUrl [readonly]

			The URL to use when doing connectivity verification over HTTPS.

		string ProhibitedTechnologies [readwrite]

			The list of technologies whose Devices should be disabled and
			prohibited from being enabled. This is a comma-separated string,
			e.g. "cellular,wifi". All Devices that are one of these technology
			types will be immediately disabled persistently, and when a new
			Device of this type appears, it will be disabled by default.
			Attempts to enable such a Device using the EnableTechnology will
			fail. Order carries no meaning and is not guaranteed to be
			consistent.

		array{object} Profiles [readonly]

			List of Profile object paths in the Profile stack. Elements are
			ordered from top of the stack to bottom.

		array{object} Services [readonly]

			List of Service object paths that are visible. The first Service is
			always the primary connected Service on the system (if there is
			one). Services in a more connected state always come before Services
			in a less connected state. In order:
			  * "online"
			  * "ready"
			  * "no-connectivity", "redirect-found", or "portal-suspected"
			  * "association" or "configuration"
			  * "idle" or "disconnecting"
			  * "failure"

			Between unconnected Services, connectable Services come before
			unconnectable Services. Within the same state "bucket", Services are
			ordered based on Technology type (see SetServiceOrder). Services in
			the same state bucket and with the same Technology type are then
			compared with the following (in order):
			  * "Priority"
			  * "Source"
			  * "ManagedCredentials"
			  * "AutoConnect"
			  * "Security" (currently only for WiFi)
			  * "Profile" ordering
			  * If the Service has ever connected
			  * "Strength"

			Finally, if two Services have all of those in common, the Service
			that was created first will be placed before the other Service.

			This list represents the available services for the current selected
			profile. If the profile gets changed then this list will be updated.

			The same list is available via the profile object itself. It is just
			provided here for convenience of applications only dealing with the
			current active profile.

		array{object} ServiceCompleteList [readonly]

			Complete list of Service object paths, including those that are not
			currently visible.  For example, WiFi Services that are stored in a
			loaded Profile but cannot currently be connected are presented in
			this list.

			The Services are listed in the same Service sorting order as the
			"Services" property above.  Change events for this property are not
			emitted.

		array{object} ServiceWatchList [readonly]

			List of Service object paths that are in a 'non-idle' state. This
			indicates the set of Services which are currently listed as
			associating, configuring, or some other state other than idle,
			failure, disconnecting, or unknown.  This allows a caller to use
			this property indication to track which Services should be monitored
			for state changes.

			The Services are listed in the same Service sorting order as the
			"Services" property above, and a change event for this property is
			emitted every time the Service list is reordered, even if this list
			has not changed.

		string SupportedVPNTypes [readonly]

			The list of supported vpn types. This is a comma-separated string;
			e.g. "l2tpipsec,openvpn,thirdpartyvpn,arcvpn". The possible value of
			list items are "l2tpipsec", "openvpn", "thirdpartyvpn", "arcvpn", and
			"wireguard".

		string State [readonly]

			The global connection state of a system. Possible values are
			"online" if at least one connection exists and "offline" if no
			device is connected.

		array{string} UninitializedTechnologies [readonly]

			The list of uninitialized technologies. An uninitialized technology
			is a technology that has at least one Device that is not initialized
			yet (i.e.  the Device object is not created yet). The strings are
			the same as the ones from the service types.

		bool WakeOnLanEnabled [readwrite]

			Specifies whether the Wake on LAN feature should be enabled on new
			Ethernet links. Currently connected links are un-affected.

		bool WiFi.GlobalFTEnabled [readwrite]

			Specifies whether or not 802.11r Fast BSS Transition should be
			used.

		bool WiFi.ScanAllowRoam [readwrite]

			Specifies whether or not a WiFi scan could trigger a
			roam if a better AP is found on the same network.

		array{string, string} DNSProxyDOHProviders [readonly]

			The DNS-over-HTTPS service providers. URLs of the secure
			DNS service endpoints are used as keys. If applicable,
			each value is a comma-separated list of the IP addresses
			(both v4 and v6 are supported) of the standard DNS name
			servers that map to the secure DNS service provider.
