/**
\page dbus %wpa_supplicant D-Bus API

This section documents the %wpa_supplicant D-Bus API. Every D-Bus
interface implemented by %wpa_supplicant is described here including
their methods, signals, and properties with arguments, returned
values, and possible errors.

Interfaces:
- \ref dbus_main
- \ref dbus_interface
- \ref dbus_wps
- \ref dbus_bss
- \ref dbus_network


\section dbus_main fi.w1.wpa_supplicant1

Interface implemented by the main %wpa_supplicant D-Bus object
registered in the bus with fi.w1.wpa_supplicant1 name.

\subsection dbus_main_methods Methods

<ul>
      <li>
	<h3>CreateInterface ( a{sv} : args ) --> o : interface</h3>
	<p>Registers a wireless interface in %wpa_supplicant.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : args</dt>
	  <dd>
	    A dictionary with arguments used to add the interface to %wpa_supplicant. The dictionary may contain the following entries:
	    <table>
	      <tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th>
	      <tr><td>Ifname</td><td>s</td><td>Name of the network interface to control, e.g., wlan0</td><td>Yes</td>
	      <tr><td>BridgeIfname</td><td>s</td><td>Name of the bridge interface to control, e.g., br0</td><td>No</td>
	      <tr><td>Driver</td><td>s</td><td>Driver name which the interface uses, e.g., nl80211</td><td>No</td>
	      <tr><td>ConfigFile</td><td>s</td><td>Configuration file path</td><td>No</td>
	    </table>
	  </dd>
	</dl>
	<h4>Returns</h4>
	<dl>
	  <dt>o : interface</dt>
	  <dd>A D-Bus path to object representing created interface</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.InterfaceExists</dt>
	  <dd>%wpa_supplicant already controls this interface.</dd>
	  <dt>fi.w1.wpa_supplicant1.UnknownError</dt>
	  <dd>Creating interface failed for an unknown reason.</dd>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>Invalid entries were found in the passed argument.</dd>
	</dl>
      </li>

      <li>
	<h3>RemoveInterface ( o : interface ) --> nothing</h3>
	<p>Deregisters a wireless interface from %wpa_supplicant.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : interface</dt>
	  <dd>A D-Bus path to an object representing an interface to remove returned by CreateInterface</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.InterfaceUnknown</dt>
	  <dd>Object pointed by the path doesn't exist or doesn't represent an interface.</dd>
	  <dt>fi.w1.wpa_supplicant1.UnknownError</dt>
	  <dd>Removing interface failed for an unknown reason.</dd>
	</dl>
      </li>

      <li>
	<h3>GetInterface ( s : ifname ) --> o : interface</h3>
	<p>Returns a D-Bus path to an object related to an interface which %wpa_supplicant already controls.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : ifname</dt>
	  <dd>Name of the network interface, e.g., wlan0</dd>
	</dl>
	<h4>Returns</h4>
	<dl>
	  <dt>o : interface</dt>
	  <dd>A D-Bus path to an object representing an interface</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.InterfaceUnknown</dt>
	  <dd>An interface with the passed name in not controlled by %wpa_supplicant.</dd>
	  <dt>fi.w1.wpa_supplicant1.UnknownError</dt>
	  <dd>Getting an interface object path failed for an unknown reason.</dd>
	</dl>
      </li>
    </ul>

\subsection dbus_main_properties Properties

<ul>
      <li>
	<h3>DebugLevel - s - (read/write)</h3>
	<p>Global %wpa_supplicant debugging level. Possible values are
	"msgdump" (verbose debugging), "debug" (debugging),
	"info" (informative), "warning" (warnings), and "error" (errors).</p>
      </li>

      <li>
	<h3>DebugTimestamp - b - (read/write)</h3>
	<p>Global %wpa_supplicant debugging parameter. Determines if timestamps are shown in debug logs.</p>
      </li>

      <li>
	<h3>DebugShowKeys - b - (read/write)</h3>
	<p>Global %wpa_supplicant debugging parameter. Determines if secrets are shown in debug logs.</p>
      </li>

      <li>
	<h3>Interfaces - ao - (read)</h3>
	<p>An array with paths to D-Bus objects representing controlled interfaces each.</p>
      </li>

      <li>
	<h3>EapMethods - as - (read)</h3>
	<p>An array with supported EAP methods names.</p>
      </li>

      <li>
	<h3>Capabilities - as - (read)</h3>
	<p>An array with supported capabilities (e.g., "ap", "ibss-rsn", "p2p", "interworking").</p>
      </li>
    </ul>

\subsection dbus_main_signals Signals

<ul>
      <li>
	<h3>InterfaceAdded ( o : interface, a{sv} : properties )</h3>
	<p>A new interface was added to %wpa_supplicant.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : interface</dt>
	  <dd>A D-Bus path to an object representing the added interface</dd>
	</dl>
	<dl>
	  <dt>a{sv} : properties</dt>
	  <dd>A dictionary containing properties of added interface.</dd>
	</dl>
      </li>

      <li>
	<h3>InterfaceRemoved ( o : interface )</h3>
	<p>An interface was removed from %wpa_supplicant.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : interface</dt>
	  <dd>A D-Bus path to an object representing the removed interface</dd>
	</dl>
      </li>

      <li>
	<h3>PropertiesChanged ( a{sv} : properties )</h3>
	<p>Some properties have changed.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : properties</dt>
	  <dd>A dictionary with pairs of properties names which have changed and theirs new values. Possible dictionary keys are: "DebugParams"</dd>
	</dl>
      </li>
    </ul>


\section dbus_interface fi.w1.wpa_supplicant1.Interface

Interface implemented by objects related to network interface added to
%wpa_supplicant, i.e., returned by
fi.w1.wpa_supplicant1.CreateInterface.

\subsection dbus_interface_methods Methods

<ul>
      <li>
	<h3>Scan ( a{sv} : args ) --> nothing</h3>
	<p>Triggers a scan.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : args</dt>
	  <dd>
	    A dictionary with arguments describing scan type:
	    <table>
	      <tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th>
	      <tr><td>Type</td><td>s</td><td>Type of the scan. Possible values: "active", "passive"</td><td>Yes</td>
	      <tr><td>SSIDs</td><td>aay</td><td>Array of SSIDs to scan for (applies only if scan type is active)</td><td>No</td>
	      <tr><td>IEs</td><td>aay</td><td>Information elements to used in active scan (applies only if scan type is active)</td><td>No</td>
	      <tr><td>Channels</td><td>a(uu)</td><td>Array of frequencies to scan in form of (center, width) in MHz.</td><td>No</td>
	      <tr><td>AllowRoam</td><td>b</td><td>TRUE (or absent) to allow a roaming decision based on the results of this scan, FALSE to prevent a roaming decision.</td><td>No</td>
	    </table>
	  </dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>Invalid entries were found in the passed argument.</dd>
	</dl>
      </li>

      <li>
	<h3>Disconnect ( ) --> nothing</h3>
	<p>Disassociates the interface from current network.</p>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.NotConnected</dt>
	  <dd>Interface is not connected to any network.</dd>
	</dl>
      </li>

      <li>
	<h3>AddNetwork ( a{sv} : args ) --> o : network</h3>
	<p>Adds a new network to the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : args</dt>
	  <dd>A dictionary with network configuration. Dictionary entries are equivalent to entries in the "network" block in %wpa_supplicant configuration file. Entry values should be appropriate type to the entry, e.g., an entry with key "frequency" should have value type int.</dd>
	</dl>
	<h4>Returns</h4>
	<dl>
	  <dt>o : network</dt>
	  <dd>A D-Bus path to an object representing a configured network</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>Invalid entries were found in the passed argument.</dd>
	  <dt>fi.w1.wpa_supplicant1.UnknownError</dt>
	  <dd>Adding network failed for an unknown reason.</dd>
	</dl>
      </li>

      <li>
	<h3>RemoveNetwork ( o : network ) --> nothing</h3>
	<p>Removes a configured network from the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : network</dt>
	  <dd>A D-Bus path to an object representing a configured network returned by fi.w1.wpa_supplicant1.Interface.AddNetwork</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.NetworkUnknown</dt>
	  <dd>A passed path doesn't point to any network object.</dd>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>A passed path doesn't point to any network object.</dd>
	  <dt>fi.w1.wpa_supplicant1.UnknownError</dt>
	  <dd>Removing network failed for an unknown reason.</dd>
	</dl>
      </li>

      <li>
	<h3>RemoveAllNetworks ( ) --> nothing</h3>
	<p>Remove all configured networks from the interface.</p>
      </li>

      <li>
	<h3>SelectNetwork ( o : network ) --> nothing</h3>
	<p>Attempt association with a configured network.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : network</dt>
	  <dd>A D-Bus path to an object representing a configured network returned by fi.w1.wpa_supplicant1.Interface.AddNetwork</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.NetworkUnknown</dt>
	  <dd>A passed path doesn't point to any network object.</dd>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>A passed path doesn't point to any network object.</dd>
	</dl>
      </li>

      <li>
	<h3>Reassociate ( ) --> nothing</h3>
	<p>Attempt reassociation.</p>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.InterfaceDisabled</dt>
	  <dd>The interface is disabled.</dd>
	</dl>
      </li>

      <li>
	<h3>Reattach ( ) --> nothing</h3>
	<p>Attempt reassociation back to the current BSS.</p>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.NotConnected</dt>
	  <dd>Interface is not connected to any network.</dd>
	</dl>
      </li>

      <li>
	<h3>AddBlob ( s : name, ay : data ) --> nothing</h3>
	<p>Adds a blob to the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : name</dt>
	  <dd>A name of a blob</dd>
	  <dt>ay : data</dt>
	  <dd>A blob data</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.BlobExists</dt>
	  <dd>A blob with the specified name already exists.</dd>
	</dl>
      </li>

      <li>
	<h3>RemoveBlob ( s : name ) --> nothing</h3>
	<p>Removes the blob from the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : name</dt>
	  <dd>A name of the blob to remove</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.BlobUnknown</dt>
	  <dd>A blob with the specified name doesn't exist.</dd>
	</dl>
      </li>

      <li>
	<h3>GetBlob ( s : name ) --> ay : data</h3>
	<p>Returns the blob data of a previously added blob.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : name</dt>
	  <dd>A name of the blob</dd>
	</dl>
	<h4>Returns</h4>
	<dl>
	  <dt>ay : data</dt>
	  <dd>A blob data</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.BlobUnknown</dt>
	  <dd>A blob with the specified name doesn't exist.</dd>
	</dl>
      </li>
      <li>
	<h3>AutoScan ( s : arg ) --> nothing</h3>
	<p>Set autoscan parameters for the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : arg</dt>
	  <dd>Autoscan parameter line or empty to unset autoscan.</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.NoMemory</dt>
	  <dd>Needed memory was not possible to get allocated.</dd>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>Invalid entries were found in the passed argument.</dd>
	</dl>
      </li>
      <li>
	<h3>TDLSDiscover ( s : peer_address ) --> nothing</h3>
	<p>Initiate a TDLS discovery for a peer.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : peer_address</dt>
	  <dd>MAC address for the peer to perform TDLS discovery.</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>The "peer_address" argument is not a properly formatted MAC.</dd>
	  <dt>fi.w1.wpa_supplicant1.UnknownError</dt>
	  <dd>Initiating the TDLS operation failed for an unknown reason.</dd>
	</dl>
      </li>
      <li>
	<h3>TDLSSetup ( s : peer_address ) --> nothing</h3>
	<p>Setup a TDLS session for a peer.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : peer_address</dt>
	  <dd>MAC address for the peer to perform TDLS setup.</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>The "peer_address" argument is not a properly formatted MAC.</dd>
	  <dt>fi.w1.wpa_supplicant1.UnknownError</dt>
	  <dd>Initiating the TDLS operation failed for an unknown reason.</dd>
	</dl>
      </li>
      <li>
	<h3>TDLSStatus ( s : peer_address ) --> s</h3>
	<p>Return TDLS status with respect to a peer.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : peer_address</dt>
	  <dd>MAC address for the peer for which status is requested.</dd>
	</dl>
	<h4>Returns</h4>
	<dl>
	  <dt>s : status</dt>
	  <dd>Current status of the TDLS link with the selected peer.</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>The "peer_address" argument is not a properly formatted MAC.</dd>
	</dl>
      </li>
      <li>
	<h3>TDLSTeardown ( s : peer_address ) --> nothing</h3>
	<p>Tear down a TDLS session with a peer.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : peer_address</dt>
	  <dd>MAC address for the peer to tear down TDLS connectivity with.</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>The "peer_address" argument is not a properly formatted MAC.</dd>
	  <dt>fi.w1.wpa_supplicant1.UnknownError</dt>
	  <dd>Initiating the TDLS operation failed for an unknown reason.</dd>
	</dl>
      </li>
      <li>
	<h3>EAPLogoff ( ) --> nothing</h3>
	<p>IEEE 802.1X EAPOL state machine logoff.</p>
      </li>
      <li>
	<h3>EAPLogon ( ) --> nothing</h3>
	<p>IEEE 802.1X EAPOL state machine logon.</p>
      </li>

      <li>
	<h3>NetworkReply ( o : network, s : field, s : value ) --> nothing</h3>
	<p>Provide parameter requested by NetworkRequest().</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : network</dt>
	  <dd>A D-Bus path to an object representing the network (copied from NetworkRequest()).</dd>
	  <dt>s : field</dt>
	  <dd>Requested information (copied from NetworkRequest()).</dd>
	  <dt>s : value</dt>
	  <dd>The requested information (e.g., password for EAP authentication).</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.NetworkUnknown</dt>
	  <dd>A passed path doesn't point to any network object.</dd>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>A passed path doesn't point to any network object.</dd>
	  <dt>fi.w1.wpa_supplicant1.UnknownError</dt>
	  <dd>IEEE 802.1X support was not included in the build.</dd>
	</dl>
      </li>

      <li>
	<h3>SetPKCS11EngineAndModulePath ( s : pkcs11_engine_path, s : pkcs11_module_path ) --> nothing</h3>
	<p>Set PKCS #11 engine and module path.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : pkcs11_engine_path</dt>
	  <dd>PKCS #11 engine path.</dd>
	  <dt>s : pkcs11_module_path</dt>
	  <dd>PKCS #11 module path.</dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>org.freedesktop.DBus.Error.Failed.InvalidArgs</dt>
	  <dd>Invalid PKCS #11 engine or module path.</dd>
	  <dt>org.freedesktop.DBus.Error.Failed</dt>
	  <dd>Reinit of the EAPOL state machine with the new PKCS #11 engine and module path failed.</dd>
	</dl>
      </li>
      <li>
	<h3>SignalPoll ( ) --> a{sv} : properties</h3>
	<p>Fetch signal properties for the current connection.</p>
	<h4>Returns</h4>
	<dl>
	  <dt>a{sv} : properties</dt>
	  <dd>
	    <table>
	      <tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th>
	      <tr><td>linkspeed</td><td>i</td><td>Link speed (Mbps)</td><td>No</td>
	      <tr><td>noise</td><td>i</td><td>Noise (dBm)</td><td>No</td>
	      <tr><td>width</td><td>s</td><td>Channel width</td><td>No</td>
	      <tr><td>frequency</td><td>u</td><td>Frequency (MHz)</td><td>No</td>
	      <tr><td>rssi</td><td>i</td><td>RSSI (dBm)</td><td>No</td>
	      <tr><td>avg-rssi</td><td>i</td><td>Average RSSI (dBm)</td><td>No</td>
	      <tr><td>center-frq1</td><td>i</td><td>VHT segment 1 frequency (MHz)</td><td>No</td>
	      <tr><td>center-frq2</td><td>i</td><td>VHT segment 2 frequency (MHz)</td><td>No</td>
	    </table>
	  </dd>
	</dl>
      </li>
      <li>
	<h3>FlushBSS ( u : age ) --> nothing</h3>
	<p>Flush BSS entries from the cache.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>u : age</dt>
	  <dd>Maximum age in seconds for BSS entries to keep in cache (0 = remove all entries).</dd>
	</dl>
      </li>
    </ul>

\subsection dbus_interface_properties Properties

<ul>
      <li>
	<h3>Capabilities - a{sv} - (read)</h3>
	<p>Capabilities of the interface. Dictionary contains following entries:</p>
	<table>
	  <tr><th>Key</th><th>Value type</th><th>Description</th>
	  <tr><td>Pairwise</td><td>as</td><td>Possible array elements: "ccmp", "tkip", "none"</td>
	  <tr><td>Group</td><td>as</td><td>Possible array elements: "ccmp", "tkip", "wep104", "wep40"</td>
	  <tr><td>KeyMgmt</td><td>as</td><td>Possible array elements: "wpa-psk", "wpa-ft-psk", "wpa-psk-sha256", "wpa-eap", "wpa-ft-eap", "wpa-eap-sha256", "ieee8021x", "wpa-none", "wps", "none"</td>
	  <tr><td>Protocol</td><td>as</td><td>Possible array elements: "rsn", "wpa"</td>
	  <tr><td>AuthAlg</td><td>as</td><td>Possible array elements: "open", "shared", "leap"</td>
	  <tr><td>Scan</td><td>as</td><td>Possible array elements: "active", "passive", "ssid"</td>
	  <tr><td>Modes</td><td>as</td><td>Possible array elements: "infrastructure", "ad-hoc", "ap"</td>
	</table>
      </li>

      <li>
	<h3>State - s - (read)</h3>
	<p>A state of the interface. Possible values are: return "disconnected", "inactive", "scanning", "authenticating", "associating", "associated", "4way_handshake", "group_handshake", "completed","unknown".</p>
      </li>

      <li>
	<h3>Scanning - b - (read)</h3>
	<p>Determines if the interface is already scanning or not</p>
      </li>

      <li>
	<h3>ApScan - u - (read/write)</h3>
	<p>Identical to ap_scan entry in %wpa_supplicant configuration file. Possible values are 0, 1 or 2.</p>
      </li>

      <li>
	<h3>BSSExpireAge - u - (read/write)</h3>
	<p>Identical to bss_expiration_age entry in %wpa_supplicant configuration file.</p>
      </li>

      <li>
	<h3>BSSExpireCount - u - (read/write)</h3>
	<p>Identical to bss_expiration_scan_count entry in %wpa_supplicant configuration file.</p>
      </li>

      <li>
	<h3>Country - s - (read/write)</h3>
	<p>Identical to country entry in %wpa_supplicant configuration file.</p>
      </li>

      <li>
	<h3>Ifname - s - (read)</h3>
	<p>Name of network interface controlled by the interface, e.g., wlan0.</p>
      </li>

      <li>
	<h3>BridgeIfname - s - (read)</h3>
	<p>Name of bridge network interface controlled by the interface, e.g., br0.</p>
      </li>

      <li>
	<h3>Driver - s - (read)</h3>
	<p>Name of driver used by the interface, e.g., nl80211.</p>
      </li>

      <li>
	<h3>CurrentBSS - o - (read)</h3>
	<p>Path to D-Bus object representing BSS which %wpa_supplicant is associated with, or "/" if is not associated at all.</p>
      </li>

      <li>
	<h3>CurrentNetwork - o - (read)</h3>
	<p>Path to D-Bus object representing configured network which %wpa_supplicant uses at the moment, or "/" if doesn't use any.</p>
      </li>

      <li>
	<h3>Blobs - as - (read)</h3>
	<p>List of blobs names added to the Interface.</p>
      </li>

      <li>
	<h3>BSSs - ao - (read)</h3>
	<p>List of D-Bus objects paths representing BSSs known to the interface, i.e., scan results.</p>
      </li>

      <li>
	<h3>Networks - ao - (read)</h3>
	<p>List of D-Bus objects paths representing configured networks.</p>
      </li>

      <li>
	<h3>FastReauth - b - (read/write)</h3>
	<p>Identical to fast_reauth entry in %wpa_supplicant configuration file.</p>
      </li>

      <li>
	<h3>ScanInterval - i - (read/write)</h3>
	<p>Time (in seconds) between scans for a suitable AP. Must be >= 0.</p>
      </li>

      <li>
	<h3>PKCS11EnginePath - s - (read)</h3>
	<p>PKCS #11 engine path.</p>
      </li>

      <li>
	<h3>PKCS11ModulePath - s - (read)</h3>
	<p>PKCS #11 module path.</p>
      </li>
    </ul>

\subsection dbus_interface_signals Signals

<ul>
      <li>
	<h3>ScanDone ( b : success )</h3>
	<p>Scanning finished. </p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : success</dt>
	  <dd>Determines if scanning was successful. If so, results are available.</dd>
	</dl>
      </li>

      <li>
	<h3>BSSAdded ( o : BSS, a{sv} : properties )</h3>
	<p>Interface became aware of a new BSS.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : BSS</dt>
	  <dd>A D-Bus path to an object representing the new BSS.</dd>
	</dl>
	<dl>
	  <dt>a{sv} : properties</dt>
	  <dd>A dictionary containing properties of added BSS.</dd>
	</dl>
      </li>

      <li>
	<h3>BSSRemoved ( o : BSS )</h3>
	<p>BSS disappeared.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : BSS</dt>
	  <dd>A D-Bus path to an object representing the BSS.</dd>
	</dl>
      </li>

      <li>
	<h3>BlobAdded ( s : blobName )</h3>
	<p>A new blob has been added to the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : blobName</dt>
	  <dd>A name of the added blob.</dd>
	</dl>
      </li>

      <li>
	<h3>BlobRemoved ( s : blobName )</h3>
	<p>A blob has been removed from the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : blobName</dt>
	  <dd>A name of the removed blob.</dd>
	</dl>
      </li>

      <li>
	<h3>NetworkAdded ( o : network, a{sv} : properties )</h3>
	<p>A new network has been added to the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : network</dt>
	  <dd>A D-Bus path to an object representing the added network.</dd>
	</dl>
	<dl>
	  <dt>a{sv} : properties</dt>
	  <dd>A dictionary containing properties of added network.</dd>
	</dl>
      </li>

      <li>
	<h3>NetworkRemoved ( o : network )</h3>
	<p>The network has been removed from the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : network</dt>
	  <dd>A D-Bus path to an object representing the removed network.</dd>
	</dl>
      </li>

      <li>
	<h3>NetworkSelected ( o : network )</h3>
	<p>The network has been selected.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : network</dt>
	  <dd>A D-Bus path to an object representing the selected network.</dd>
	</dl>
      </li>

      <li>
	<h3>StaAuthorized ( s : mac )</h3>
	<p>A new station has been authorized to the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : mac</dt>
	  <dd>A mac address which has been authorized.</dd>
	</dl>
      </li>

      <li>
	<h3>StaDeauthorized ( s : mac )</h3>
	<p>A station has been deauthorized to the interface.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : mac</dt>
	  <dd>A mac address which has been deauthorized.</dd>
	</dl>
      </li>

      <li>
	<h3>PropertiesChanged ( a{sv} : properties )</h3>
	<p>Some properties have changed.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : properties</dt>
	  <dd>A dictionary with pairs of properties names which have changed and theirs new values. Possible dictionary keys are: "ApScan", "Scanning", "State", "CurrentBSS", "CurrentNetwork"</dd>
	</dl>
      </li>

      <li>
	<h3>Certification ( a{sv} : parameters )</h3>
	<p>Information about server TLS certificates.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : parameters</dt>
	  <dd>A dictionary with pairs of field names and their values. Possible dictionary keys are: "depth", "subject", "cert_hash", "cert".</dd>
	</dl>
      </li>

      <li>
	<h3>EAP ( s : status, s : parameter )</h3>
	<p>Information about EAP peer status.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : status</dt>
	  <dd>Operation, e.g., "started", "accept proposed method", "remote certificate verification", "eap parameter needed", "completion".</dd>
	  <dt>s : parameter</dt>
	  <dd>Information about the operation, e.g., EAP method name, "success".</dd>
	</dl>
      </li>

      <li>
	<h3>NetworkRequest ( o : network, s : field, s : txt )</h3>
	<p>Request for network parameter. NetworkResponse() is used to provide the requested parameter.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>o : network</dt>
	  <dd>D-Bus path to an object representing the network.</dd>
	  <dt>s : field</dt>
	  <dd>Requested information, e.g., "PASSWORD".</dd>
	  <dt>txt : field</dt>
	  <dd>Human readable information about the requested information.</dd>
	</dl>
      </li>
    </ul>


\section dbus_wps fi.w1.wpa_supplicant1.Interface.WPS

Interface implemented by objects related to network interface added to
%wpa_supplicant, i.e., returned by fi.w1.wpa_supplicant1.CreateInterface.

\subsection dbus_wps_methods Methods

<ul>
      <li>
	<h3>Start ( a{sv} : args ) --> a{sv} : output</h3>
	<p>Starts WPS configuration.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : args</dt>
	  <dd>
	    A dictionary with arguments used to start WPS configuration. The dictionary may contain the following entries:
	    <table>
	      <tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th>
	      <tr><td>Role</td><td>s</td><td>The device's role. Possible values are "enrollee" and "registrar".</td><td>Yes</td>
	      <tr><td>Type</td><td>s</td><td>WPS authentication type. Applies only for enrollee role. Possible values are "pin" and "pbc".</td><td>Yes, for enrollee role; otherwise no</td>
	      <tr><td>Pin</td><td>s</td><td>WPS Pin.</td><td>Yes, for registrar role; otherwise optional</td>
	      <tr><td>Bssid</td><td>ay</td><td></td><td>No</td>
	    </table>
	  </dd>
	</dl>
	<h4>Returns</h4>
	<dl>
	  <dt>a{sv} : output</dt>
	  <dd>
	    <table>
	      <tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th>
	      <tr><td>Pin</td><td>s</td><td>Newly generated PIN, if not specified for enrollee role and pin authentication type.</td><td>No</td>
	    </table>
	  </dd>
	</dl>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.UnknownError</dt>
	  <dd>Starting WPS configuration failed for an unknown reason.</dd>
	  <dt>fi.w1.wpa_supplicant1.InvalidArgs</dt>
	  <dd>Invalid entries were found in the passed argument.</dd>
	</dl>
      </li>
    </ul>

\subsection dbus_wps_properties Properties

<ul>
      <li>
	<h3>ProcessCredentials - b - (read/write)</h3>
	<p>Determines if the interface will process the credentials (credentials_processed configuration file parameter).</p>
      </li>
    </ul>

\subsection dbus_wps_signals Signals

<ul>
      <li>
	<h3>Event ( s : name, a{sv} : args )</h3>
	<p>WPS event occurred.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>s : event</dt>
	  <dd>Event type. Possible values are: "success, "fail" and "m2d"</dd>
	  <dt>a{sv} : args</dt>
	  <dd>
	    Event arguments. Empty for success event, one entry ( "msg" : i ) for fail event and following entries for m2d event:
	    <table>
	      <tr><th>config_methods</th><th>Value type</th>
	      <tr><td>manufacturer</td><td>q</td>
	      <tr><td>model_name</td><td>ay</td>
	      <tr><td>model_number</td><td>ay</td>
	      <tr><td>serial_number</td><td>ay</td>
	      <tr><td>dev_name</td><td>ay</td>
	      <tr><td>primary_dev_type</td><td>ay</td>
	      <tr><td>config_error</td><td>q</td>
	      <tr><td>dev_password_id</td><td>q</td>
	    </table>
	  </dd>
	</dl>
      </li>

      <li>
	<h3>Credentials ( a{sv} : credentials )</h3>
	<p>WPS credentials. Dictionary contains:</p>
	<table>
	  <tr><th>Key</th><th>Value type</th><th>Description</th>
	  <tr><td>BSSID</td><td>ay</td><td></td>
	  <tr><td>SSID</td><td>s</td><td></td>
	  <tr><td>AuthType</td><td>as</td><td>Possible array elements: "open", "shared", "wpa-psk", "wpa-eap", "wpa2-eap", "wpa2-psk"</td>
	  <tr><td>EncrType</td><td>as</td><td>Possible array elements: "none", "wep", "tkip", "aes"</td>
	  <tr><td>Key</td><td>ay</td><td>Key data</td>
	  <tr><td>KeyIndex</td><td>u</td><td>Key index</td>
	</table>
      </li>

      <li>
	<h3>PropertiesChanged ( a{sv} : properties )</h3>
	<p>Some properties have changed.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : properties</dt>
	  <dd>A dictionary with pairs of properties names which have changed and theirs new values. Possible dictionary keys are: "ProcessCredentials"</dd>
	</dl>
      </li>
    </ul>


\section dbus_bss fi.w1.wpa_supplicant1.BSS

Interface implemented by objects representing a scanned BSSs, i.e.,
scan results.

\subsection dbus_bss_properties Properties

<ul>
      <li>
	<h3>BSSID - ay - (read)</h3>
	<p>BSSID of the BSS.</p>
      </li>
      <li>
	<h3>SSID - ay - (read)</h3>
	<p>SSID of the BSS.</p>
      </li>
      <li>
	<h3>WPA - a{sv} - (read)</h3>
	<p>WPA information of the BSS. Empty dictionary indicates no WPA support. Dictionary entries are:</p>
	<table>
	  <tr><td>KeyMgmt</td><td>as</td><td>Key management suite. Possible array elements: "wpa-psk", "wpa-eap", "wpa-none"</td>
	  <tr><td>Pairwise</td><td>as</td><td>Pairwise cipher suites. Possible array elements: "ccmp", "tkip"</td>
	  <tr><td>Group</td><td>s</td><td>Group cipher suite. Possible values are: "ccmp", "tkip", "wep104", "wep40"</td>
	</table>
      </li>
      <li>
	<h3>RSN - a{sv} - (read)</h3>
	<p>RSN information of the BSS. Empty dictionary indicates no RSN support. Dictionary entries are:</p>
	<table>
	  <tr><td>KeyMgmt</td><td>as</td><td>Key management suite. Possible array elements: "wpa-psk", "wpa-eap", "wpa-ft-psk", "wpa-ft-eap", "wpa-psk-sha256", "wpa-eap-sha256",</td>
	  <tr><td>Pairwise</td><td>as</td><td>Pairwise cipher suites. Possible array elements: "ccmp", "tkip"</td>
	  <tr><td>Group</td><td>s</td><td>Group cipher suite. Possible values are: "ccmp", "tkip", "wep104", "wep40"</td>
	  <tr><td>MgmtGroup</td><td>s</td><td>Mangement frames cipher suite. Possible values are: "aes128cmac"</td>
	</table>
      </li>
      <li>
	<h3>IEs - ay - (read)</h3>
	<p>All IEs of the BSS as a chain of TLVs</p>
      </li>
      <li>
	<h3>Privacy - b - (read)</h3>
	<p>Indicates if BSS supports privacy.</p>
      </li>
      <li>
	<h3>Mode - s - (read)</h3>
	<p>Describes mode of the BSS. Possible values are: "ad-hoc" and "infrastructure".</p>
      </li>
      <li>
	<h3>Frequency - q - (read)</h3>
	<p>Frequency of the BSS in MHz.</p>
      </li>
      <li>
	<h3>Rates - au - (read)</h3>
	<p>Descending ordered array of rates supported by the BSS in bits per second.</p>
      </li>
      <li>
	<h3>Signal - n - (read)</h3>
	<p>Signal strength of the BSS.</p>
      </li>
    </ul>

\subsection dbus_bss_signals Signals

<ul>
      <li>
	<h3>PropertiesChanged ( a{sv} : properties )</h3>
	<p>Some properties have changed.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : properties</dt>
	  <dd>A dictionary with pairs of properties names which have changed and theirs new values.</dd>
	</dl>
      </li>
    </ul>


\section dbus_network fi.w1.wpa_supplicant1.Network

Interface implemented by objects representing configured networks,
i.e., returned by fi.w1.wpa_supplicant1.Interface.AddNetwork.

\subsection dbus_network_properties Properties

<ul>
      <li>
	<h3>Enabled - b - (read/write)</h3>
	<p>Determines if the configured network is enabled or not.</p>
      </li>

      <li>
	<h3>Properties - a{sv} - (read)</h3>
	<p>Properties of the configured network. Dictionary contains entries from "network" block of %wpa_supplicant configuration file. All values are string type, e.g., frequency is "2437", not 2437.
      </li>
    </ul>

\subsection dbus_network_signals Signals

<ul>
      <li>
	<h3>PropertiesChanged ( a{sv} : properties )</h3>
	<p>Some properties have changed.</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : properties</dt>
	  <dd>A dictionary with pairs of properties names which have changed and theirs new values. Possible dictionary keys are: "Enabled"</dd>
	</dl>
      </li>
    </ul>

*/
