/**
\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_p2pdevice
- \ref dbus_bss
- \ref dbus_network
- \ref dbus_peer
- \ref dbus_group
- \ref dbus_persistent_group


\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>

      <li>
	<h3>WFDIEs - ay - (read/write)</h3>
	<p>Wi-Fi Display subelements.</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>

      <li>
	<h3>SubscribeProbeReq ( ) --> nothing</h3>
	<p>Subscribe to receive Probe Request events. This is needed in addition to registering a signal handler for the ProbeRequest signal to avoid flooding D-Bus with all Probe Request indications when no application is interested in them.</p>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.SubscriptionInUse</dt>
	  <dd>Another application is already subscribed.</dd>
	  <dt>fi.w1.wpa_supplicant1.NoMemory</dt>
	  <dd>Needed memory was not possible to get allocated.</dd>
	</dl>
      </li>

      <li>
	<h3>UnsubscribeProbeReq ( ) --> nothing</h3>
	<p>Unsubscribe from receiving Probe Request events.</p>
	<h4>Possible errors</h4>
	<dl>
	  <dt>fi.w1.wpa_supplicant1.NoSubscription</dt>
	  <dd>No subscription in place.</dd>
	  <dt>fi.w1.wpa_supplicant1.SubscriptionNotYou</dt>
	  <dd>Subscription in place, but for another process.</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>CurrentAuthMode - s - (read)</h3>
	<p>Current authentication type.</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>

      <li>
	<h3>DisconnectReason - i - (read)</h3>
	<p>The most recent IEEE 802.11 reason code for disconnect. Negative value indicates locally generated disconnection.</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", "altsubject", "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>

      <li>
	<h3>ProbeRequest ( a{sv} : args )</h3>
	<p>Information about a received Probe Request frame. This signal is delivered only to a single application that has subscribed to received the events with SubscribeProbeReq().</p>
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : args</dt>
	  <dd>A dictionary with pairs of field names and their values. Possible dictionary keys are: "addr", "dst", "bssid", "ies", "signal".</dd>
	</dl>
      </li>
    </ul>


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

Interface for performing WPS (Wi-Fi Simple Config) operations.

\subsection dbus_wps_methods Methods

<ul>
      <li>
	<h3>Start ( a{sv} : args ) --> a{sv} : output</h3>
	<p>Starts WPS configuration. Note: When used with P2P groups, this needs to be issued on the GO group interface.</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>Note: This is used to specify the peer MAC address when authorizing WPS connection in AP or P2P GO role.</td><td>No</td>
	      <tr><td>P2PDeviceAddress</td><td>ay</td><td>P2P Device Address of a peer to authorize for PBC connection. Used only in P2P GO role.</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>
      <li>
	<h3>ConfigMethods - s - (read/write)</h3>
	<p>The currently advertised WPS configuration methods. Available methods: usba ethernet label display ext_nfc_token int_nfc_token nfc_interface push_button keypad virtual_display physical_display virtual_push_button physical_push_button.</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_p2pdevice fi.w1.wpa_supplicant1.Interface.P2PDevice

Interface for performing P2P (Wi-Fi Peer-to-Peer) P2P Device operations.

\subsection dbus_p2pdevice_methods Methods

<ul>
  <li>
    <h3>Find ( a{sv} : args ) --> nothing</h3>
    <p>Start P2P find operation (i.e., alternating P2P Search and Listen states to discover peers and be discoverable).</p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with parameters for the P2P find operation:
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>Timeout</td><td>i</td><td>Timeout for operating in seconds</td><td>no</td></tr>
	<tr><td>RequestedDevicesTypes</td><td>aay</td><td>WPS Device Types to search for</td><td>no</td></tr>
	<tr><td>DiscoveryType</td><td>s</td><td>"start_with_full" (default, if not specified), "social", "progressive"</td><td>no</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>StopFind ( nothing ) --> nothing</h3>
    <p>Stop P2P find operation.</p>
  </li>

  <li>
    <h3>Listen ( i : timeout ) --> nothing</h3>
    <p>Start P2P listen operation (i.e., be discoverable).</p>
    <h4>Arguments</h4>
    <dl>
      <dt>i : timeout</dt>
      <dd>Timeout in seconds for stopping the listen operation.</dd>
    </dl>
  </li>

  <li>
    <h3>ExtendedListen ( a{sv} : args ) --> nothing</h3>
    <p>Configure Extended Listen Timing. If the parameters are omitted, this feature is disabled. If the parameters are included, Listen State will be entered every interval msec for at least period msec. Both values have acceptable range of 1-65535 (with interval obviously having to be larger than or equal to duration). If the P2P module is not idle at the time the Extended Listen Timing timeout occurs, the Listen State operation will be skipped.</p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with parameters for extended listen. Leave out all items to disable extended listen.
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>period</td><td>i</td><td>Extended listen period in milliseconds; 1-65535.</td><td>no</td></tr>
	<tr><td>interval</td><td>i</td><td>Extended listen interval in milliseconds; 1-65535.</td><td>no</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>PresenceRequest ( a{sv} : args ) --> nothing</h3>
    <p>Request a specific GO presence in a P2P group where the local device is a P2P Client. Send a P2P Presence Request to the GO (this is only available when acting as a P2P client). If no duration/interval pairs are given, the request indicates that this client has no special needs for GO presence. The first parameter pair gives the preferred duration and interval values in microseconds. If the second pair is included, that indicates which value would be acceptable.
    \note This needs to be issued on a P2P group interface if separate group interfaces are used.
    \bug It would be cleaner to not require .P2PDevice methods to be issued on a group interface. In other words, args['group_object'] could be used to specify the group or this method could be moved to be a .Group PresenceRequest() method.</p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with parameters for the presence request.
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>duration1</td><td>i</td><td>Duration in microseconds.</td><td>no</td></tr>
	<tr><td>interval1</td><td>i</td><td>Interval in microseconds.</td><td>no</td></tr>
	<tr><td>duration2</td><td>i</td><td>Duration in microseconds.</td><td>no</td></tr>
	<tr><td>interval2</td><td>i</td><td>Interval in microseconds.</td><td>no</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>ProvisionDiscoveryRequest ( o : peer, s : config_method ) --> nothing</h3>
  </li>

  <li>
    <h3>Connect ( a{sv} : args ) --> s : generated_pin</h3>
    <p>Request a P2P group to be started through GO Negotiation or by joining an already operating group.</p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with parameters for the requested connection:
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>peer</td><td>o</td><td></td><td>yes</td></tr>
	<tr><td>persistent</td><td>b</td><td>Whether to form a persistent group.</td><td>no</td></tr>
	<tr><td>join</td><td>b</td><td>Whether to join an already operating group instead of forming a new group.</td><td>no</td></tr>
	<tr><td>authorize_only</td><td>b</td><td>Whether to authorize a peer to initiate GO Negotiation instead of initiating immediately.</td><td>no</td></tr>
	<tr><td>frequency</td><td>i</td><td>Operating frequency in MHz</td><td>no</td></tr>
	<tr><td>go_intent</td><td>i</td><td>GO intent 0-15</td><td>no</td></tr>
	<tr><td>wps_method</td><td>s</td><td>"pbc", "display", "keypad", "pin" (alias for "display")</td><td>yes</td></tr>
	<tr><td>pin</td><td>s</td><td></td><td>no</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>GroupAdd ( a{sv} : args ) --> nothing</h3>
    <p>Request a P2P group to be started without GO Negotiation.</p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with parameters for the requested group:
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>persistent</td><td>b</td><td>Whether to form a persistent group.</td><td>no</td></tr>
	<tr><td>persistent_group_object</td><td>o</td><td></td><td>no</td></tr>
	<tr><td>frequency</td><td>i</td><td>Operating frequency in MHz</td><td>no</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>Invite ( a{sv} : args ) --> nothing</h3>
    <p>Invite a peer to join an already operating group or to re-invoke a persistent group.</p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with parameters for the invitation:
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>peer</td><td>o</td><td></td><td>yes</td></tr>
	<tr><td>persistent_group_object</td><td>o</td><td></td><td>no</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>Disconnect ( nothing ) --> nothing</h3>
    <p>Terminate a P2P group.
    \note This needs to be issued on a P2P group interface if separate group interfaces are used.
    \bug It would be cleaner to not require .P2PDevice methods to be issued on a group interface. In other words, this would either need to be Disconnect(group_object) or moved to be a .Group Disconnect() method.</p>
  </li>

  <li>
    <h3>RejectPeer ( o : peer ) --> nothing</h3>
    <p>Reject connection attempt from a peer (specified with a device address). This is a mechanism to reject a pending GO Negotiation with a peer and request to automatically block any further connection or discovery of the peer.</p>
  </li>

  <li>
    <h3>Flush ( nothing ) --> nothing</h3>
    <p>Flush P2P peer table and state.</p>
  </li>

  <li>
    <h3>AddService ( a{sv} : args ) --> nothing</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with parameters for the service:
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>service_type</td><td>s</td><td>"upnp", "bonjour"</td><td>yes</td></tr>
	<tr><td>version</td><td>u</td><td>Required for UPnP services.</td><td>no</td></tr>
	<tr><td>service</td><td>s</td><td></td><td></td></tr>
	<tr><td>query</td><td>ay</td><td></td><td></td></tr>
	<tr><td>response</td><td>ay</td><td></td><td></td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>DeleteService ( a{sv} : args ) --> nothing</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with parameters for the service:
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>service_type</td><td>s</td><td>"upnp", "bonjour"</td><td>yes</td></tr>
	<tr><td>version</td><td>u</td><td>Required for UPnP services.</td><td>no</td></tr>
	<tr><td>service</td><td>s</td><td></td><td></td></tr>
	<tr><td>query</td><td>ay</td><td></td><td></td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>FlushService ( nothing ) --> nothing</h3>
  </li>

  <li>
    <h3>ServiceDiscoveryRequest ( a{sv} : args ) --> t : ref</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with following parameters:
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>peer_object</td><td>o</td><td></td><td>no</td></tr>
	<tr><td>service_type</td><td>s</td><td>"upnp"</td><td>no</td></tr>
	<tr><td>version</td><td>u</td><td>Required for UPnP services.</td><td>no</td></tr>
	<tr><td>service</td><td>s</td><td></td><td></td></tr>
	<tr><td>tlv</td><td>ay</td><td></td><td></td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>ServiceDiscoveryResponse ( a{sv} : args ) --> nothing : ref</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with following parameters:
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>peer_object</td><td>o</td><td></td><td>yes</td></tr>
	<tr><td>frequency</td><td>i</td><td></td><td>yes</td></tr>
	<tr><td>dialog_token</td><td>i</td><td></td><td>yes</td></tr>
	<tr><td>tlvs</td><td>ay</td><td></td><td>yes</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>ServiceDiscoveryCancelRequest ( t : args ) --> nothing : ref</h3>
  </li>

  <li>
    <h3>ServiceUpdate ( nothing ) --> nothing</h3>
  </li>

  <li>
    <h3>ServiceDiscoveryExternal ( i : arg ) --> nothing</h3>
  </li>

  <li>
    <h3>AddPersistentGroup ( a{sv} : args ) --> o : path</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : args</dt>
      <dd>
	A dictionary with following parameters:
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th><th>Required</th></tr>
	<tr><td>bssid</td><td>s</td><td>P2P Device Address of the GO in the persistent group.</td><td>yes</td></tr>
	<tr><td>ssid</td><td>s</td><td>SSID of the group</td><td>yes</td></tr>
	<tr><td>psk</td><td>s</td><td>Passphrase (on the GO and optionally on P2P Client) or PSK (on P2P Client if passphrase ise not known)</td><td>yes</td></tr>
	<tr><td>mode</td><td>s</td><td>"3" on GO or "0" on P2P Client</td><td>yes</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>RemovePersistentGroup ( o : path ) --> nothing</h3>
  </li>

  <li>
    <h3>RemoveAllPersistentGroups ( nothing ) --> nothing</h3>
  </li>
</ul>

\subsection dbus_p2pdevice_properties Properties

<ul>
  <li>
    <h3>P2PDeviceConfig - a{sv} - (read/write)</h3>
    <p>Dictionary with following entries. On write, only the included values are changed.</p>
    <table>
    <tr><th>Key</th><th>Value type</th><th>Description</th></tr>
    <tr><td>DeviceName</td><td>s</td><td></td></tr>
    <tr><td>PrimaryDeviceType</td><td>ay</td><td></td></tr>
    <tr><td>SecondaryDeviceTypes</td><td>aay</td><td></td></tr>
    <tr><td>VendorExtension</td><td>aay</td><td></td></tr>
    <tr><td>GOIntent</td><td>u</td><td></td></tr>
    <tr><td>PersistentReconnect</td><td>b</td><td></td></tr>
    <tr><td>ListenRegClass</td><td>u</td><td></td></tr>
    <tr><td>OperRegClass</td><td>u</td><td></td></tr>
    <tr><td>OperChannel</td><td>u</td><td></td></tr>
    <tr><td>SsidPostfix</td><td>s</td><td></td></tr>
    <tr><td>IntraBss</td><td>b</td><td></td></tr>
    <tr><td>GroupIdle</td><td>u</td><td></td></tr>
    <tr><td>disassoc_low_ack</td><td>u</td><td></td></tr>
    <tr><td>NoGroupIface</td><td>b</td><td></td></tr>
    <tr><td>p2p_search_delay</td><td>u</td><td></td></tr>
    </table>
  </li>

  <li>
    <h3>Peers - ao - (read)</h3>
  </li>

  <li>
    <h3>Role - s - (read)</h3>
    <p>\bug What is this trying to indicate? It does not make much sense to have a P2PDevice property role since there can be multiple concurrent groups and the P2P Device role is always active anyway.</p>
  </li>

  <li>
    <h3>Group - o - (read)</h3>
    <p>\bug What is this trying to indicate? It does not make much sense to have a P2PDevice property Group since there can be multiple concurrent groups.</p>
  </li>

  <li>
    <h3>PeerGO - o - (read)</h3>
    <p>\bug What is this trying to indicate? It does not make much sense to have a P2PDevice property PeerGO since there can be multiple concurrent groups.</p>
  </li>

  <li>
    <h3>PersistentGroups - ao - (read)</h3>
  </li>
</ul>

\subsection dbus_p2pdevice_signals Signals

<ul>
  <li>
    <h3>DeviceFound ( o : path )</h3>
  </li>

  <li>
    <h3>DeviceLost ( o : path )</h3>
  </li>

  <li>
    <h3>ProvisionDiscoveryRequestDisplayPin ( o : peer_object, s : pin )</h3>
  </li>

  <li>
    <h3>ProvisionDiscoveryResponseDisplayPin ( o : peer_object, s : pin )</h3>
  </li>

  <li>
    <h3>ProvisionDiscoveryRequestEnterPin ( o : peer_object )</h3>
  </li>

  <li>
    <h3>ProvisionDiscoveryResponseEnterPin ( o : peer_object )</h3>
  </li>

  <li>
    <h3>ProvisionDiscoveryPBCRequest ( o : peer_object )</h3>
  </li>

  <li>
    <h3>ProvisionDiscoveryPBCResponse ( o : peer_object )</h3>
  </li>

  <li>
    <h3>ProvisionDiscoveryFailure ( o : peer_object, i : status )</h3>
  </li>

  <li>
    <h3>GroupStarted ( a{sv} : properties )</h3>
    <p>A new P2P group was started or joined.</p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : properties</dt>
      <dd>A dictionary with following information on the added group:
	<table>
	  <tr><th>Key</th><th>Value type</th><th>Description</th></tr>
	  <tr><td>interface_object</td><td>o</td><td>D-Bus path of the interface on which this group is operating on. See \ref dbus_interface.</td></tr>
	  <tr><td>role</td><td>s</td><td>The role of the local device in the group: "GO" or "client".</td></tr>
	  <tr><td>group_object</td><td>o</td><td>D-Bus path of the group. See \ref dbus_group.</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>GONegotiationSuccess ( a{sv} : properties )</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : properties</dt>
      <dd>A dictionary with following information:
	<table>
	  <tr><th>Key</th><th>Value type</th><th>Description</th></tr>
	  <tr><td>peer_object</td><td>o</td><td>D-Bus path of the peer. See \ref dbus_peer.</td></tr>
	  <tr><td>status</td><td>i</td><td></td></tr>
	  <tr><td>passphrase</td><td>s</td><td>Passphrase for the group. Included only if this device becomes the GO of the group.</td></tr>
	  <tr><td>role_go</td><td>s</td><td>The role of the local device in the group: "GO" or "client".</td></tr>
	  <tr><td>ssid</td><td>ay</td><td></td></tr>
	  <tr><td>peer_device_addr</td><td>ay</td><td></td></tr>
	  <tr><td>peer_interface_addr</td><td>ay</td><td></td></tr>
	  <tr><td>wps_method</td><td>s</td><td></td></tr>
	  <tr><td>frequency_list</td><td>ai</td><td></td></tr>
	  <tr><td>persistent_group</td><td>i</td><td></td></tr>
	  <tr><td>peer_config_timeout</td><td>u</td><td></td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>GONegotiationFailure ( a{sv} : properties )</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : properties</dt>
      <dd>A dictionary with following information:
	<table>
	  <tr><th>Key</th><th>Value type</th><th>Description</th></tr>
	  <tr><td>peer_object</td><td>o</td><td>D-Bus path of the peer. See \ref dbus_peer.</td></tr>
	  <tr><td>status</td><td>i</td><td></td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>GONegotiationRequest ( o : path, i : dev_passwd_id )</h3>
  </li>

  <li>
    <h3>InvitationResult ( a{sv} : invite_result )</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : invite_result</dt>
      <dd>A dictionary with following information:
	<table>
	  <tr><th>Key</th><th>Value type</th><th>Description</th></tr>
	  <tr><td>status</td><td>i</td><td></td></tr>
	  <tr><td>BSSID</td><td>ay</td><td>Optionally present</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>GroupFinished ( a{sv} : properties )</h3>
    <p>A P2P group was removed.</p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : properties</dt>
      <dd>A dictionary with following information of the removed group:
	<table>
	  <tr><th>Key</th><th>Value type</th><th>Description</th></tr>
	  <tr><td>interface_object</td><td>o</td><td>D-Bus path of the interface on which this group is operating on. See \ref dbus_interface.</td></tr>
	  <tr><td>role</td><td>s</td><td>The role of the local device in the group: "GO" or "client".</td></tr>
	  <tr><td>group_object</td><td>o</td><td>D-Bus path of the group. See \ref dbus_group.</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>ServiceDiscoveryRequest ( a{sv} : sd_request )</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : sd_request</dt>
      <dd>A dictionary with following information:
	<table>
	  <tr><td>peer_object</td><td>o</td><td></td></tr>
	  <tr><td>frequency</td><td>i</td><td></td></tr>
	  <tr><td>dialog_token</td><td>i</td><td></td></tr>
	  <tr><td>update_indicator</td><td>q</td><td></td></tr>
	  <tr><td>tlvs</td><td>ay</td><td></td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>ServiceDiscoveryResponse ( a{sv} : sd_response )</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>a{sv} : sd_response</dt>
      <dd>A dictionary with following information:
	<table>
	  <tr><td>peer_object</td><td>o</td><td></td></tr>
	  <tr><td>update_indicator</td><td>q</td><td></td></tr>
	  <tr><td>tlvs</td><td>ay</td><td></td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>PersistentGroupAdded ( o : path, a{sv} : properties )</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>o : path</dt>
      <dd>D-Bus object path for the persistent group. See \ref dbus_persistent_group.</dd>
      <dt>a{sv} : properties</dt>
      <dd>A dictionary with following information:
	<table>
	<tr><th>Key</th><th>Value type</th><th>Description</th></tr>
	<tr><td>bssid</td><td>s</td><td>P2P Device Address of the GO in the persistent group.</td></tr>
	<tr><td>ssid</td><td>s</td><td>SSID of the group</td></tr>
	<tr><td>psk</td><td>s</td><td>Passphrase (on the GO and optionally on P2P Client) or PSK (on P2P Client if passphrase ise not known)</td></tr>
	<tr><td>disabled</td><td>s</td><td>Set to "2" to indicate special network block use as a P2P persistent group information</td></tr>
	<tr><td>mode</td><td>s</td><td>"3" on GO or "0" on P2P Client</td></tr>
	</table>
      </dd>
    </dl>
  </li>

  <li>
    <h3>PersistentGroupRemoved ( o : path )</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>o : path</dt>
      <dd>D-Bus object path for the persistent group. See \ref dbus_persistent_group.</dd>
    </dl>
  </li>

  <li>
    <h3>WpsFailed ( s : name, a{sv} : args )</h3>
    <p></p>
    <h4>Arguments</h4>
    <dl>
      <dt>s : name</dt>
      <dd>"fail"</dd>
      <dt>a{sv} : args</dt>
      <dd>A dictionary with following information:
	<table>
	  <tr><th>Key</th><th>Value type</th><th>Description</th></tr>
	  <tr><td>msg</td><td>i</td><td></td></tr>
	  <tr><td>config_error</td><td>n</td><td></td></tr>
	</table>
      </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>WPS - a{sv} - (read)</h3>
	<p>WPS information of the BSS. Empty dictionary indicates no WPS support. Dictionary entries are:</p>
	<table>
	  <tr><td>Type</td><td>s</td><td>"pbc", "pin", ""</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>
      <li>
	<h3>Age - u - (read)</h3>
	<p>Number of seconds since the BSS was last seen.</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/write)</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>

\section dbus_peer fi.w1.wpa_supplicant1.Peer

Interface implemented by objects representing P2P peer devices.

\subsection dbus_peer_properties Properties

<ul>
  <li>
    <h3>DeviceName - s - (read)</h3>
  </li>

  <li>
    <h3>PrimaryDeviceType - ay - (read)</h3>
  </li>

  <li>
    <h3>config_method - q - (read)</h3>
  </li>

  <li>
    <h3>level - i - (read)</h3>
  </li>

  <li>
    <h3>devicecapability - y - (read)</h3>
  </li>

  <li>
    <h3>groupcapability - y - (read)</h3>
    <p>Group Capability field from the last frame from which this peer information was updated.
    \note This field is only for debugging purposes and must not be used to determine whether the peer happens to be operating a group as a GO at the moment.
    </p>
  </li>

  <li>
    <h3>SecondaryDeviceTypes - aay - (read)</h3>
  </li>

  <li>
    <h3>VendorExtension - aay - (read)</h3>
  </li>

  <li>
    <h3>IEs - ay - (read)</h3>
    <p>This is a confusingly named property that includes Wi-Fi Display subelements from the peer.
    \bug This should really be renamed since "IEs" means something completely different..
    </p>
  </li>

  <li>
    <h3>DeviceAddress - ay - (read)</h3>
    <p>The P2P Device Address of the peer.</p>
  </li>

  <li>
    <h3>Groups - ao - (read)</h3>
    <p>The current groups in which this peer is connected.</p>
  </li>
</ul>

\subsection dbus_peer_signals Signals

<ul>
  <li>
    <h3>PropertiesChanged ( a{sv} : properties )</h3>
    <p>Some properties have changed.
    \deprecated Use org.freedesktop.DBus.Properties.PropertiesChanged instead.</p>
    \todo Explain how ProertiesChanged signals are supposed to be of any real use with Peer objects (i.e., one signal for multiple peers).
	<h4>Arguments</h4>
	<dl>
	  <dt>a{sv} : properties</dt>
	  <dd>A dictionary with pairs of properties names which have changed and their new values.</dd>
	</dl>
      </li>
    </ul>

\section dbus_group fi.w1.wpa_supplicant1.Group

Interface implemented by objects representing active P2P groups.

\subsection dbus_group_properties Properties

<ul>
  <li>
    <h3>Members - ao - (read)</h3>
    <p>Array of D-Bus object paths for the peer devices that are currently connected to the group. This is valid only on the GO device. An empty array is returned in P2P Client role.
  </li>

  <li>
    <h3>Group - o - (read)</h3>
    <p>\todo Why is this here? This D-Bus object path is to this specific group and one needs to know it to fetching this information in the first place..
    </p>
  </li>

  <li>
    <h3>Role - s - (read)</h3>
    <p>The role of this device in the group: "GO", "client".</p>
  </li>

  <li>
    <h3>SSID - ay - (read)</h3>
    <p>P2P Group SSID.</p>
  </li>

  <li>
    <h3>BSSID - ay - (read)</h3>
    <p>P2P Group BSSID (the P2P Interface Address of the GO).</p>
  </li>

  <li>
    <h3>Frequency - q - (read)</h3>
    <p>The frequency (in MHz) of the group operating channel.</p>
  </li>

  <li>
    <h3>Passphrase - s - (read)</h3>
    <p>Passphrase used in the group. This is always available on the GO. For P2P Client role, this may be available depending on whether the peer GO provided the passphrase during the WPS provisioning step. If not available, an empty string is returned.</p>
  </li>

  <li>
    <h3>PSK - ay - (read)</h3>
    <p>PSK used in the group.</p>
  </li>

  <li>
    <h3>WPSVendorExtensions - aay - (read/write)</h3>
    <p>WPS vendor extension attributes used on the GO. This is valid only the in the GO role. An empty array is returned in P2P Client role. At maximum, 10 separate vendor extension byte arrays can be configured. The GO device will include the configured attributes in WPS exchanges.</p>
  </li>
</ul>

\subsection dbus_group_signals Signals

<ul>
  <li>
    <h3>PeerJoined ( o : peer )</h3>
    <p>A peer device has joined the group. This is indicated only on the GO device.</p>
    <h4>Arguments</h4>
    <dl>
      <dt>o : peer</dt>
      <dd>A D-Bus path to the object representing the peer. See \ref dbus_peer.</dd>
    </dl>
  </li>

  <li>
    <h3>PeerDisconnected ( o : peer )</h3>
    <p>A peer device has left the group. This is indicated only on the GO device.</p>
    <h4>Arguments</h4>
    <dl>
      <dt>o : peer</dt>
      <dd>A D-Bus path to the object representing the peer. See \ref dbus_peer.</dd>
    </dl>
  </li>
</ul>

\section dbus_persistent_group fi.w1.wpa_supplicant1.PersistentGroup

Interface implemented by objects representing persistent P2P groups.

\subsection dbus_persistent_group_properties Properties

<ul>
  <li>
    <h3>Properties - a{sv} - (read/write)</h3>
    <p>Properties of the persistent group. These are same properties as in the \ref dbus_network. When writing this, only the entries to be modified are included, i.e., any item that is not included will be left at its existing value. The following entries are used for persistent groups:</p>
    <table>
      <tr><th>Key</th><th>Value type</th><th>Description</th></tr>
      <tr><td>bssid</td><td>s</td><td>P2P Device Address of the GO in the persistent group.</td></tr>
      <tr><td>ssid</td><td>s</td><td>SSID of the group</td></tr>
      <tr><td>psk</td><td>s</td><td>Passphrase (on the GO and optionally on P2P Client) or PSK (on P2P Client if passphrase ise not known)</td></tr>
      <tr><td>disabled</td><td>s</td><td>Set to "2" to indicate special network block use as a P2P persistent group information</td></tr>
      <tr><td>mode</td><td>s</td><td>"3" on GO or "0" on P2P Client</td></tr>
    </table>
  </li>
</ul>

*/
