shill: Adopt API docs
The shill and flimflam APIs are starting to diverge in meaningful
ways, so it's time for us to have our own. The files are in a form
that make them easily diffable from flimflam. Initial changes have
been made to reflect how shill differs from flimflam, and highlight
a few API bits that shill does not yet implement.
BUG=chromium-os:30020
TEST=None
Change-Id: I9f926fab0bbbb11047aaf87408063a77ef8750b9
Reviewed-on: https://gerrit.chromium.org/gerrit/21146
Reviewed-by: mukesh agrawal <quiche@chromium.org>
Commit-Ready: Paul Stewart <pstew@chromium.org>
Tested-by: Paul Stewart <pstew@chromium.org>
diff --git a/doc/service-api.txt b/doc/service-api.txt
new file mode 100644
index 0000000..fa3bb0b
--- /dev/null
+++ b/doc/service-api.txt
@@ -0,0 +1,833 @@
+Service hierarchy
+=================
+
+Service org.chromium.flimflam
+Interface org.chromium.flimflam.Service
+Object path [variable prefix]/{service0,service1,...}
+
+Methods dict GetProperties()
+
+ Return the properties for the service object. See
+ the Properties section for available properties.
+
+ void SetProperty(string name, variant value)
+
+ Change 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
+ [service].Error.InvalidService
+ [service].Error.InvalidPassphrase
+
+ void ClearProperty(string name)
+
+ Clear 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
+
+ void Connect()
+
+ Initiate a connection for the specified service.
+
+ For Ethernet devices this method can only be used
+ if it has previously been disconnected. Otherwise
+ the plugging of a cable automatically triggers
+ a connection. If no cable is plugged in this
+ method will fail.
+
+ If the requested service is already connected
+ then this request is ignored and AlreadyConnected
+ is returned.
+
+ If the requested service is in the process of
+ connecting then this request is ignored and
+ InProgress is returned.
+
+ If another service of the same type is connected or
+ connecting then it is terminated before this request
+ is handled.
+
+ Possible Errors: [service].Error.AlreadyConnected
+ [service].Error.InProgress
+ [service].Error.OperationAborted
+ [service].Error.InvalidService
+
+ void Disconnect()
+
+ Disconnect a service. If the service is not
+ connected or in the process of connecting an
+ error message will be generated.
+
+ For Ethernet devices this will remove all
+ Layer 3 state and mark the associated network
+ interface down. If no cable is plugged in this
+ request will fail.
+
+ This method can also be used to abort a previous
+ connection attempt via the Connect method.
+
+ Possible Errors: [service].Error.InvalidArguments
+
+ void Remove()
+
+ Disconnect and remove all recorded state of a
+ service. The service must have previously had
+ a success connection so that the Favorite property
+ is marked "true".
+
+ This method is not permitted for Ethernet devices;
+ it will generate a NotSupported error response.
+
+ Possible Errors: [service].Error.InvalidArguments
+ [service].Error.NotSupported
+
+ [Silently ignored in shill so far]
+
+ void MoveBefore(object service)
+
+ Silently ignored in shill. Do not use.
+
+ void MoveAfter(object service)
+
+ Silently ignored in shill. Do not use.
+
+ void ActivateCellularModem(string carrier)
+
+ Activate a cellular modem on the provided carrier.
+
+ This method returns immediately. The caller
+ can either poll the Cellular.ActivationState
+ property, or monitor the PropertyChanged
+ signal to know when and if the
+ ActivateCellularModem call succeeded.
+
+ The correct carrier specific modem firmware
+ must already be loaded before this method is
+ called.
+
+ If this method is called for a non-cellular
+ service or on a service associated with a
+ non-CDMA device, it will return a NotSupported
+ error.
+
+ If the device is already activated nothing is returned.
+ but if the device needs to be activated an InProgress
+ error is returned.
+
+ Expected Result: [service].Error.InProgress
+ Possible Errors: [service].Error.NotSupported
+
+Signals PropertyChanged(string name, variant value)
+
+ This signal indicates a changed value of the given
+ property.
+
+
+Properties boolean AutoConnect [readwrite]
+
+ If set to true, this service will auto-connect
+ when no other connection is available. If multiple
+ services are marked for auto-connect then the highest
+ priority available service will be selected.
+
+ For favorite services it is possible to change
+ this value to prevent or permit automatic
+ connection attempts. For non-favorite services, setting
+ AutoConnect to TRUE causes favorite to be set to TRUE.
+
+ string Cellular.ActivationState [readonly]
+
+ (Cellular only) The activate state of the device
+ on the cellular network. Possible values for
+ activate_state are:
+ "not-activated"
+ "activating"
+ "partially-activated"
+ "activated"
+
+ A CDMA device can be activated by calling the
+ Activate method.
+
+ This property is relevant only for services
+ associated with a CDMA cellular device.
+
+ dict Cellular.ServingOperator [readonly] [GSM only]
+ (Cellular only) Description of the operator on whose
+ network the modem is currently registered, if any.
+ The dictionary may contain the following string-valued
+ properties:
+
+ "name" The operator name
+ "country" The two-letter country code.
+ "network_id" The MCC (Mobile Country Code)
+ and MNC (Mobile Network Code) of the
+ operator on whose network the device is
+ registered. The value of the property is
+ the simple concatenation of the MCC and
+ the MNC, with no separator. The first
+ three digits are always the MCC, and
+ the following two or three digits are the
+ MNC.
+
+ string Cellular.NetworkTechnology [readonly]
+
+ (Cellular only) If the modem is registered on a
+ network, then this property gives the data bearer
+ technology currently in use. The following
+ table lists the values this property may have,
+ along with a rough indication of the "generation"
+ to which the technology is considered to belong.
+
+ Value Generation
+ -----------------------------
+ "1xRTT" (CDMA) 2.5G
+ "EVDO" (CDMA) 3G to 3.5G
+ "GPRS" 2.5G
+ "EDGE" 2.75G
+ "UMTS" 3G
+ "HSPA" 3.5G
+ "HSPA+" 3.75G
+ "LTE" 3.9G
+ "LTE Advanced" 4G
+
+ string Cellular.RoamingState [readonly]
+
+ (Cellular only) The roaming status of the modem on
+ the current network. Possible values are "home",
+ "roaming", and "unknown".
+
+ string Cellular.Olp [readonly]
+
+ (Cellular only) A dictionary describing the
+ online payment portal (OLP) at which a user
+ can sign up for, or modify, a mobile data
+ plan. The value of this property is a
+ string -> string dictionary, which includes
+ the following keys:
+
+ "url" The URL for the portal
+ "method" The HTTP method to use, "GET" or "POST"
+ "postdata" If the method is POST then this key is
+ present and contains the postdata
+ to send.
+
+ dict Cellular.APN [readwrite] [GSM only]
+
+ (Cellular only) The APN to be used with a GSM
+ carrier for making data connections. The value of
+ this property is a string -> string dictionary,
+ which must include at least the following key:
+
+ "apn" The APN to use for making connections
+
+ There are three optional properties. The first is
+
+ "network_id" The network ID (MCC/MNC pair) of the
+ network for which the APN should be used.
+ If not specified, then the network ID of
+ the currently registered network is used.
+
+ The other two optional properties are "username"
+ and "password", which, if specified, will be supplied
+ to the connect operation on the modem along with the
+ APN.
+
+ When the APN is set using this method, it overrides
+ any APN that may be associated with the specified
+ network ID in the APN database. The APN setting is
+ persistent across reboots.
+
+ A user-specified APN may be cleared by clearing this
+ property.
+
+ The algorithm for connecting to GSM networks is as
+ follows, stopping when a connection is succesfully
+ established:
+ 1. Try the last APN that resulted in a successful
+ connection.
+ 2. Try the APN that was set from the Cellular.APN
+ property (if any).
+ 3. Try the list of APNs for the current provider one
+ at a time. The list comes from the mobile broadband
+ provider information database.
+ 4. As a last resort, try connecting without specifying
+ an APN.
+
+ If all these steps fail, then the connect attempt fails.
+ Whenever this property is set to establish a new APN to
+ use, the remembered last-good-APN is cleared. The
+ remembered last-good-APN is persistent across reboots.
+
+ dict Cellular.LastGoodAPN [readonly] [GSM only]
+
+ (Cellular only) The APN information used in the
+ last successful connection attempt. If the last
+ attempt was unsuccesful, this property is unset.
+ The format of this property is the same as for
+ the Cellular.APN property.
+
+ string CheckPortal [readwrite]
+
+ Control captive portal checking. Possible values
+ are "true", "false", and "auto" (default).
+ When set to "auto" captive portal checking is
+ controlled by Manager.CheckPortalList (which
+ is a per-technology mask/list of which services
+ should do captive portal checking).
+
+ boolean Connectable [readonly]
+
+ Indicates whether a service is prepared for use
+ as an argument to the Connect method. A service
+ will not be marked Connectable if, for example,
+ it is missing necessary security credentials.
+ Clients may use this property to not disable
+ services or to mark them in some way to indicate
+ they are present but not usable.
+
+ object Device [readonly]
+
+ The object path of the associated device.
+ This value may be used to retrieve and manipulate
+ Layer 3 configuration state.
+
+ string EAP.Identity [readwrite]
+
+ The client identity string used in setting up
+ services of type "802_1x".
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.EAP [readwrite]
+
+ The EAP methods that will be accepted when setting
+ up services of type "802_1x".
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.InnerEAP [readwrite]
+
+ The authentication methods that will be on the
+ inside of a PEAP or EAP-TTLS tunnel.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.AnonymousIdentity [readwrite]
+
+ The client identity string that will be used
+ for the outer EAP authentication for tunneled
+ methods such as PEAP and EAP-TTLS.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.ClientCert [readwrite]
+
+ The pathname to a file containing the client
+ certificate for setting up services of type
+ "802_1x". The certificate file must be in
+ PEM format.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.CertID [readwrite]
+
+ The PKCS#11 identifier of the client certificate
+ to use when setting up services of type "802_1x".
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.PrivateKey [readwrite]
+
+ The pathname of a file containing the private
+ key for setting up services of type "802_1x".
+ The private key file must be in PEM format.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.PrivateKeyPassword [readwrite]
+
+ The password to decrypt a private key given
+ in EAP.PrivateKey.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.KeyID [readwrite]
+
+ The PKCS#11 identifier of the private key to
+ use when setting up services of type "802_1x".
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.CACert [readwrite]
+
+ The pathname of a file containing the Certificate
+ Authority's certificate for validating server
+ certificates during the 802.1x authentication
+ process.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.CACertID [readwrite]
+
+ The PKCS#11 ID of the EAP.CACert file for
+ validating server certificate recieved during
+ the 802.1x authentication process.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ boolean EAP.UseSystemCAs [readwrite]
+
+ Control whether EAP operations are
+ configured to use the system's installed set
+ of certificate authorities when validating
+ server certificates. Note that if UseSystemCAs
+ is false and no CA is specified with EAP.CACert
+ or EAP.CaCertID - that is, no CAs are configured
+ at all - server certificates will not have their
+ signatures checked. Defaults to true.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.PIN [readwrite]
+
+ The PIN used to authenticate to the PKCS#11 device
+ to retrieve a client certificate, private key,
+ or certificate authority certificate.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.Password [readwrite]
+
+ The password to use in 802.1x authentication.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string EAP.KeyMgmt [readwrite]
+
+ (WiFi only) The key management algorithm to be
+ used in 802.1x authentication. If this property
+ is not set then "WPA-EAP" is used for the key
+ management algorithm.
+
+ This property is included in get requests only
+ when the requester has sufficient privileges.
+
+ string Error [readonly]
+
+ The service error status details.
+
+ When error occur during connection or disconnection
+ the detailed information are represented in this
+ property to help the user interface to present the
+ user with alternate options.
+
+ This property is only valid when the service is in
+ the "failure" or "activation-failure" states. Otherwise
+ it might be empty or not present at all.
+
+ Current defined error code is "dhcp-failed".
+
+ boolean Favorite [readonly]
+
+ Will be true if a cable is plugged in or the user
+ selected and successfully connected to this service.
+
+ This value is automatically changed and to revert
+ it back to false the Remove() method needs to be
+ used.
+
+ string GUID [readwrite]
+
+ The Globally Unique IDentifier for the service.
+ This value may be set by a client and is
+ intended for cross-referencing Service objects
+ to externally-maintained data.
+
+ object IPConfig [readonly]
+
+ The object path of the associated IP configuration.
+ This value only exists when the service is connected,
+ and is used used to retrieve Layer 3 configuration
+ state.
+
+ boolean IsActive [readonly]
+
+ Will be true if this service has a default route;
+ i.e. network traffic is being sent through it.
+
+ string Mode [readonly]
+
+ If the service type is "wifi", then this property is
+ present and contains the mode of the network. The
+ possible values are "managed" or "adhoc".
+
+ This property is present only for WiFi services.
+
+ string Name [readonly]
+
+ The service name (for example "Wireless" etc.)
+
+ This name can be used for directly displaying it in
+ the application. It has pure informational purpose.
+
+ For Ethernet devices and hidden WiFi networks it is
+ not guaranteed that this property is present. For
+ visible WiFi networks, this may contain the SSID.
+
+ See also the WiFi.HexSSID property.
+
+ string Passphrase [readwrite]
+
+ If the service type is "wifi", then this property
+ holds a passphrase used in setting up services of
+ type "wep", "wpa", "rsn", "psk", or a private
+ key password used in setting up services of
+ type "802_1x".
+
+ For "wep" services, this must contain the WEP
+ key and, optionally, a key index. Only 40-bit
+ and 104-bit WEP keys are supported. The WEP
+ key can be formatted either as an ASCII string
+ (5 or 13 characters), or as ASCII hex digits
+ (10 or 26). When using ASCII hex digits, the
+ key may optionally be preceded by "0x" or "0X".
+ To specify an optional WEP key index, prepend
+ the key with "0:", "1:", "2:" or "3:". If no
+ index is specified, 0 is used.
+
+ By default this property is not included in get
+ requests. It may be present if a non-default
+ security policy is configured and the client has
+ "read secret" privileges.
+
+ Note that no PropertyChanged signals are sent for
+ this property. The PassphraseRequired property
+ should be monitored instead.
+
+ boolean PassphraseRequired [readonly]
+
+ If the service type is "wifi", then this property
+ indicates if a passphrase or key (for WEP) is required.
+
+ If a passphrase has been set already or if no
+ passphrase is needed, then this property will
+ be set to false.
+
+ UI clients may monitor this property for a
+ PropertyChanged signals to prompt for a required
+ passphrase or key.
+
+ [We will be supporting this soon for VPN]
+
+ int32 Priority [readwrite]
+
+ An optional value used to calculate the priority order
+ of this service. Priorities are between 1 to 100.
+ Services with priorities are sorted ahead of services
+ without. Services with the same priority are ordered
+ by other means such as service type and signal
+ strength.
+
+ By default services are not assigned a priority;
+ clients must set one if they desire. To remove an
+ existing priority use the ClearProperty method.
+
+ object Profile [readwrite]
+
+ The object path of the associated Profile object.
+ This may not be present if the Service object
+ has not been written to a profile yet.
+
+ string ProxyConfig [readwrite]
+
+ An externalized json dictionary describing the proxy
+ configuration that can be stored on the service, and
+ modified by a user.
+ Flimflam does not use this information for anything,
+ but it is left available to the caller, and stored
+ persistently.
+ This property may be set by any client and will be
+ adopted by chrome during run-time. If syntax of the
+ value is wrong, chrome will ignore this property during
+ runtime.
+ The value of this property is a string -> string
+ dictionary that includes the following keys. The final
+ string is a comma separated list of key-value pairs
+ enclosed by "{" and "}"; syntax of a key-value pair is:
+ <key>":"<value>. Example:
+ {"mode":"fixed-servers","server":"http=foopy:80"}
+
+ "mode"
+ type of proxy that can be one of:
+ "direct" --
+ direct connection to network, other preferences
+ are ignored
+ "auto_detect" --
+ try to retrieve a PAC script from
+ http://wpad/wpad.dat or fall back to direct
+ connection
+ "pac_script" --
+ try to retrieve PAC script specified for "pac_url"
+ (see below) or fall back to direct connection
+ "fixed_servers" --
+ manual configuration of one or more servers
+ to be used as proxy
+
+ "pac_url"
+ URL for proxy .pac file (meaningful only if mode=
+ pac_script); scheme of URL must be specified
+
+ "pac_mandatory"
+ indciate if a valid PAC script is mandatory
+ (meaningful only if mode=pac_script);
+ value is either true or false (without quotes), e.g.
+ "pac_mandatory":true;
+ if true, network traffic does not fall back to
+ direct connections in case the PAC script is not
+ available
+
+ "server"
+ proxy server for manual configuration (meaningful
+ only if mode=fixed-servers); syntax is
+ [<proxy-scheme>"://"]<proxy-host>[":"<proxy-port>];
+ if the proxy to use depends on the scheme of the
+ URL, specify a semicolon separated list of :
+ <url-scheme>"="<proxy-uri>
+ for example:
+ - "http=foopy:80;ftp=foopy2" --
+ use HTTP proxy "foopy:80" for http:// URLs, and
+ HTTP proxy "foopy2:80" for ftp:// URLS
+ - "foopy:80" -- use HTTP proxy "foopy:80" for all
+ URLs
+ - "socks4://foopy" --
+ use SOCKS v4 proxy "foopy:80" for all URLs
+
+ "bypass_list"
+ proxy bypass rules for manual configuration
+ (meaningful only if mode=fixed-servers); format
+ can be any one of the following:
+ 1) [<url_scheme>"://"]<hostname_pattern>[":"<port>]
+ Match all hostnames that match the pattern
+ hostname_pattern which can be a substring of the
+ hostname with asterisks.
+ Examples: "foobar.com", "*foobar.com",
+ "*.foobar.com", "*foobar.com:99",
+ "https://x.*.y.com:99"
+ 2) "."<hostname_suffix_pattern>[":"<port>]
+ Match a particular domain suffix.
+ Examples: ".google.com", ".com",
+ "http://.google.com"
+ 3) [<scheme>"://"]<ip_literal>[":"<port>]
+ Match URLs that are IP address literals.
+ Conceptually this is the similar to (1), but with
+ special cases to handle IP literal
+ canonicalization. For example matching on
+ "[0:0:0::1]" would be the same as matching on
+ "[::1]" since the IPv6 canonicalization is done
+ internally.
+ Examples: "127.0.1", "[0:0::1]", "[::1]",
+ "http://[::1]:99"
+ 4) <ip_literal>"/"<prefix_length_in_bits>
+ Match any URL that is to an IP literal that falls
+ in the given range. IP range is specified using
+ CIDR notation.
+ Examples: "192.168.1.1/16", "fefe:13::abc/33".
+ 5) "<local>"
+ Match local addresses; this is a literal string.
+ "<local>" matches one of: "127.0.0.1", "::1",
+ "localhost".
+
+ dict Provider [readonly]
+
+ (VPN only) Provider data. A provider is a service
+ that piggy-backs on top of a transport service.
+ This is presently used by VPN services.
+
+ string Domain [readonly]
+ VPN domain name.
+ string Host [readonly]
+ VPN host IP address.
+ string Name [readonly]
+ VPN provider name.
+ string Type [readonly]
+ VPN provider type (e.g. openvpn).
+
+ boolean SaveCredentials [readwrite]
+
+ This property indicates if security credentials
+ should be reused and/or written to stable storage.
+ Setting this property to FALSE ensures nothing is
+ recorded and the client must supply credentials
+ for each Connect request.
+
+ The following credentials are not recorded when
+ this property is set to FALSE:
+
+ Passphrase
+ EAP.Identity
+ EAP.AnonymousIdentity
+ EAP.ClientCert
+ EAP.CertID
+ EAP.PrivateKey
+ EAP.PrivateKeyPassword
+ EAP.KeyID
+ EAP.PIN
+ EAP.Password
+
+ Note that no PropertyChanged signals are sent for
+ this property.
+
+ string Security [readonly]
+
+ If the service type is "wifi", then this property is
+ present and contains the security method or key
+ management setting.
+
+ Possible values are: "none" (no privacy),
+ "wep" (fixed key WEP), "wpa" (WPA-PSK), "rsn"
+ (IEEE 802.11i-PSK), "psk" (either "wpa" or "rsn"),
+ and "802_1x" (IEEE 802.11i with 802.1x authentication).
+
+ This property is only present for WiFi services.
+
+ string State [readonly]
+
+ The state of the service; one of:
+
+ "idle" The service is not enabled or otherwise
+ operational.
+
+ "carrier" The associated device is powered on and
+ ready for Layer 2 operation; e.g. a
+ wired Ethernet device that is powered
+ up and connected to a switch.
+
+ "association" Intermediate states associated with
+ "disconnect" connection-based devices such as WiFi
+ and Cellular. These are exposed for
+ UI applications to provide more
+ fine-grained status.
+
+ "configuration" Layer 2 is setup but Layer 3 setup
+ has yet to completed.
+
+ "ready" Layer 3 setup is complete; ready to
+ transit and receive data.
+
+ "portal" Layer 3 setup is complete but
+ connectivity to the Internet may be
+ limited or unavailable.
+
+ "online" Layer 3 setup is complete and an
+ Internet connection has been checked
+ to support HTTP access to the
+ Manager.PortalURL site.
+
+ "failure" An error occurred while trying to
+ reach the "ready" state. Consult the
+ Error propery for details.
+
+ "activation-failure"
+ An error occurred while trying to
+ activate a cellular modem. Consult the
+ Error property for details.
+
+ uint8 Strength [readonly]
+
+ Indicates the signal strength of the service. This
+ is a normalized value between 0 and 100.
+
+ This property will not be present for Ethernet
+ devices.
+
+ string Type [readonly]
+
+ The service type; one of:
+ "ethernet" (802.3 wired Ethernet),
+ "wifi" (IEEE 802.11),
+ "wimax" (IEEE 802.16),
+ "bluetooth" (Bluetooth PAN),
+ "cellular" (3G Cellular), or
+ "vpn" (Virtual Private Network).
+
+ This information should only be used to determine
+ advanced properties or showing the correct icon
+ to the user.
+
+ string UIData [readwrite]
+
+ This is additional data available about this service
+ for use by the user interface. This value is opaque
+ and not used by shill.
+
+ string WiFi.AuthMode [readonly]
+
+ (WiFi only) If the service state is
+ "configuration" or "ready", then this property
+ will be present and contains the negotiated
+ authentication method.
+
+ There are too many possible values to enumerate here.
+ The complete set depends on the capabilities of the
+ associated WiFi supplicant.
+
+ string WiFi.BSSID [readonly]
+
+ (WiFi only) The BSSID of the associated AP.
+ One can monitor this property for PropertyChanged
+ signals to identify when roaming changes the
+ current AP.
+
+ boolean WiFi.HiddenSSID [readonly]
+
+ (WiFi only) If true, the associated WiFi network
+ does not broadcast it's SSID in beacon frames.
+
+ uint16 WiFi.Frequency [readonly]
+
+ (WiFi only) The operating frequency in MHz of
+ the network.
+
+ string WiFi.PhyMode [readonly]
+
+ (WiFi only) If the service state is
+ "configuration" or "ready", then this property
+ will be present and contains the negotiated
+ operating mode for the channel. Possible values
+ include "802.11a", "802.11b", "802.11g",
+ "802.11n". This value is for informational
+ purposes only.
+
+ string WiFi.HexSSID [readonly]
+
+ (WiFi only) If the service's SSID contains
+ unprintable characters then this property is
+ present and holds a hex-encoded copy of the SSID.
+
+ See also the Name property. (Note that there is
+ no SSID property.)
+
+ string WiFi.SSID [readonly]
+ (WiFi only) The service's SSID. Must have a non-zero
+ length less than or equal to 32.