On May 1, 2011, at 4:40 PM, Grant Erickson wrote:
> On May 1, 2011, at 3:52 PM, Grant Erickson wrote:
>> On Apr 29, 2011, at 9:51 AM, Grant Erickson wrote:
>>> I am investigating all sort of odd state issues with connman and my user 
>>> interface / application and the latest oddity is that when I issue:
>>> 
>>>     net.connman.Service.Disconnect
>>> 
>>> and then:
>>> 
>>>     net.connman.Manager.SetProperty OfflineMode 1
>>> 
>>> I end up in a state in which no services are connected, yet connman still 
>>> reports that State=online and ConnectedTechnologies = [ wifi ], despite the 
>>> fact that there are no connected services or technologies. Is this normal, 
>>> expected, as-designed behavior?
>> 
>> I've done some additional instrumentation and debugging of this and the 
>> high-level cause is that on connection to a service, 
>> __connman_notifier_connect is called twice whereas on the service disconnect 
>> path, __connman_notifier_disconnect is called only once, leading to the 
>> __connman_notifier_count_connected inconsistency.
>> 
>> I've not fully narrowed in to the root cause for this; however, 
>> __connman_service_indicate_state seems to be called twice with new_state 4 
>> (ready) and type 1 (IPv4), leading to the two calls to 
>> __connman_notifier_connect. The state transitions, incorrectly (?), seem to 
>> be:
>> 
>>      association -> configuration -> ready -> online -> ready
>> 
>> It seems to me that __connman_notifier_connect should only be called for the 
>> ONLINE state, not the READY state. What's the design philosophy for calling 
>> it from the READY state or is that a defect?
> 
> FWIW, I looked at whether there are any behavioral deltas between 0.71 and 
> 0.73. As far as this issue is concerned, the behavior is the same.
> 
> Still investigating the odd state transition behavior.

Marcel and Daniel:

Thanks for the dialog on IRC this earlier. Here's an update on what I've 
discovered and tried in terms of patches.

The following patch seems to address this issue. If you're OK with this 
approach, I'll submit it as a formal patch.

This is, of course, a patch. A more rigorous overhaul of the service state 
machine is probably in order as we discussed on IRC, allowing changes
only by external event excitation inputs rather than the current approach today 
of explicitly setting or "indicating" service state from all around connman:

        int __connman_service_set_ipconfig_ready(struct connman_service 
*service,
                enum connman_ipconfig_type type)
        {
                int err = 0;
        
                connman_trace_in("service %p (%s) type %d (%s)",
                                 service, service ? service->identifier : NULL,
                                 type, __connman_ipconfig_type2string(type));
        
                connman_require_execute(service != NULL, done, err = -EINVAL);
        
                if (service->ipv4.state == CONNMAN_SERVICE_STATE_READY ||
                        service->ipv4.state == CONNMAN_SERVICE_STATE_ONLINE) {
                        err = -EALREADY;
                } else if (service->ipv6.state == CONNMAN_SERVICE_STATE_READY ||
                        service->ipv6.state == CONNMAN_SERVICE_STATE_ONLINE) {
                        err = -EALREADY;
                } else {
                        err = __connman_service_indicate_state(service,
                                                   CONNMAN_SERVICE_STATE_READY,
                                                   type);
                }
        
         done:
                connman_trace_out("err %d", err);
        
                return err;
        }

### Start-up connman and let it connect to the default, configured favorite 
service.
###
### Note that the service transitions as expected: association -> configuration 
-> ready -> online.

# ./connmand-0.71 -W wext -n &
connmand[270]: Connection Manager version 0.71
connmand[270]: Checking loopback interface settings
connmand[270]: System hostname is fish.local
connmand[270]: System domainname is domain.actdsltmp
connmand[270]: Adding NTP server pool.ntp.org
connmand[270]: Adding profile default
connmand[270]: Failed to open RFKILL control device
connmand[270]: lo {newlink} index 1 operstate 0 <UNKNOWN>
connmand[270]: wlan0 {create} index 2 type 1 <ETHER>
connmand[270]: wlan0 {RX} 1081 packets 1443451 bytes
connmand[270]: wlan0 {TX} 505 packets 49375 bytes
connmand[270]: wlan0 {update} flags 4099 <UP>
connmand[270]: wlan0 {newlink} index 2 address 00:0c:29:4c:56:a2 mtu 1500
connmand[270]: wlan0 {newlink} index 2 operstate 2 <DOWN>
connmand[270]: wlan0 runs an unsupported 802.11 driver
connmand[270]: Create interface wlan0 [ wifi ]
connmand[270]: --> (0) __connman_service_create_from_network: network 0x74d98 
000c294c56a2
connmand[270]:     --> (1) setup_ip4config: service 0x74220 
wifi_000c294c56a2_53706f74_managed_psk index 2
connmand[270]:         --> (2) connman_ipconfig_create: index 2 type 1
connmand[270]:         <-- (2) connman_ipconfig_create: 
connmand[270]:     <-- (1) setup_ip4config: 
connmand[270]:     --> (1) connman_ipconfig_create: index 2 type 2
connmand[270]:     <-- (1) connman_ipconfig_create: 
connmand[270]: <-- (0) __connman_service_create_from_network: 
connmand[270]: mmap error Invalid argument for 
/var/lib/connman/stats/wifi_000c294c56a2_53706f74_managed_psk.data
connmand[270]: 
/var/lib/connman/stats/wifi_000c294c56a2_53706f74_managed_psk.data might be on 
a file system, such as JFFS2, that does not allow shared writable mappings.
connmand[270]: wlan0 up
connmand[270]: wlan0 lower down
connmand[270]: wlan0 up
connmand[270]: wlan0 lower down
connmand[270]: Skipping disconnect of 53706f74_managed_psk, network is 
connecting.
connmand[270]: Requesting connection to network "Spot" identifier 
"53706f74_managed_psk".
connmand[270]: --> (0) __connman_service_indicate_state: service 0x74220 
wifi_000c294c56a2_53706f74_managed_psk new_state 2 (association) type 1 (IPv4)
connmand[270]: service 0x74220 state idle/idle => idle new association/1 => 
association
connmand[270]: <-- (0) __connman_service_indicate_state: err 0
connmand[270]: wlan0 {add} route ff00:: gw :: scope 0 <UNIVERSE>
connmand[270]: wlan0 {add} route fe80:: gw :: scope 0 <UNIVERSE>
connmand[270]: wlan0 {update} flags 69635 <UP,LOWER_UP>
connmand[270]: wlan0 {newlink} index 2 address 00:0c:29:4c:56:a2 mtu 1500
connmand[270]: wlan0 {RX} 1081 packets 1443451 bytes
connmand[270]: wlan0 {TX} 505 packets 49375 bytes
connmand[270]: wlan0 {newlink} index 2 address 00:0c:29:4c:56:a2 mtu 1500
connmand[270]: wlan0 {newlink} index 2 operstate 5 <DORMANT>
connmand[270]: wlan0 {RX} 1083 packets 1443729 bytes
connmand[270]: wlan0 {TX} 509 packets 49791 bytes
connmand[270]: wlan0 {update} flags 69699 <UP,RUNNING,LOWER_UP>
connmand[270]: wlan0 lower up
connmand[270]: wlan0 lower up
connmand[270]: wlan0 {newlink} index 2 address 00:0c:29:4c:56:a2 mtu 1500
connmand[270]: wlan0 {newlink} index 2 operstate 6 <UP>
connmand[270]: --> (0) set_connected: service 0x74220
connmand[270]: network connected 1
connmand[270]:     --> (1) set_connected_dhcp: network 0x74d98
connmand[270]:         --> (2) __connman_service_indicate_state: service 
0x74220 wifi_000c294c56a2_53706f74_managed_psk new_state 3 (configuration) type 
1 (IPv4)
connmand[270]: service 0x74220 state association/idle => association new 
configuration/1 => configuration
connmand[270]: mmap error Invalid argument for 
/var/lib/connman/stats/wifi_000c294c56a2_53706f74_managed_psk.data
connmand[270]: 
/var/lib/connman/stats/wifi_000c294c56a2_53706f74_managed_psk.data might be on 
a file system, such as JFFS2, that does not allow shared writable mappings.
connmand[270]:         <-- (2) __connman_service_indicate_state: err 0
connmand[270]:     <-- (1) set_connected_dhcp: 
connmand[270]: <-- (0) set_connected: 
connmand[270]: --> (0) lease_available_cb: 
connmand[270]: Lease available
connmand[270]: DHCP lease available for service 
wifi_000c294c56a2_53706f74_managed_psk
connmand[270]: c_address: (null)
connmand[270]: c_gateway: (null)
connmand[270]: c_prefixlen: 0
connmand[270]: new address: 10.2.1.14
connmand[270]: new gateway: 10.2.0.1
connmand[270]: new prefixlen: 16
connmand[270]: ip_change: 1
connmand[270]:     --> (1) __connman_ipconfig_set_gateway: ipconfig 0x74fb0 
gateway 10.2.0.1
connmand[270]: ipconfig->address 0x6e008
connmand[270]:     <-- (1) __connman_ipconfig_set_gateway: 
connmand[270]: Setting domainname to domain.actdsltmp
connmand[270]:     --> (1) dhcp_callback: network 0x74d98 success 1
connmand[270]:         --> (2) dhcp_success: network 0x74d98
connmand[270]:             --> (3) connman_inet_set_address: index 2 local 
10.2.1.14 prefix_len 16
connmand[270]:                 --> (4) __connman_inet_modify_address: cmd 14 
flags 104 index 2 family 2 address 10.2.1.14 peer (null) prefixlen 16 broadcast 
(null)
connmand[270]:                 <-- (4) __connman_inet_modify_address: 
connmand[270]:             <-- (3) connman_inet_set_address: 
connmand[270]: Deleting host route failed (No such process)
connmand[270]:             --> (3) __connman_connection_gateway_add: service 
0x74220 index 2 ipv4 gateway 10.2.0.1 ipv6 gateway (null) vpn ip (null)
connmand[270]:                 --> (4) __connman_service_set_ipconfig_ready: 
service 0x74220 (wifi_000c294c56a2_53706f74_managed_psk) type 1 (IPv4)
connmand[270]:                     --> (5) __connman_service_indicate_state: 
service 0x74220 wifi_000c294c56a2_53706f74_managed_psk new_state 4 (ready) type 
1 (IPv4)
connmand[270]: service 0x74220 state configuration/idle => configuration new 
ready/1 => ready
connmand[270]: Adding DNS server 10.2.0.1
connmand[270]:                         --> (6) __connman_notifier_connect: type 
3 (wifi)
connmand[270]: before &connected[wifi] 0
connmand[270]:                             --> (7) technology_connected: type 3 
(wifi) connected 1
connmand[270]:                                 --> (8) state_changed: count 1
connmand[270]:                                 <-- (8) state_changed: 
connmand[270]:                             <-- (7) technology_connected: 
connmand[270]: after &connected[wifi] 1
connmand[270]:                         <-- (6) __connman_notifier_connect: 
connmand[270]: Enabling DNS server 10.2.0.1
connmand[270]:                     <-- (5) __connman_service_indicate_state: 
err 0
connmand[270]:                 <-- (4) __connman_service_set_ipconfig_ready: 
err 0
connmand[270]:                 --> (4) set_default_gateway: gateway 10.2.0.1
connmand[270]:                     --> (5) __connman_service_indicate_default: 
service 0x74220
connmand[270]: Enabling DNS server 10.2.0.1
connmand[270]:                         --> (6) __connman_location_detect: 
service 0x74220
connmand[270]:                             --> (7) 
connman_location_report_result: location 0x74440 result 2 (online)
connmand[270]:                                 --> (8) 
__connman_service_indicate_state: service 0x74220 
wifi_000c294c56a2_53706f74_managed_psk new_state 5 (online) type 1 (IPv4)
connmand[270]: service 0x74220 state ready/idle => ready new online/1 => online
connmand[270]: Resolving NTP peer pool.ntp.org
connmand[270]: Enabling DNS server 10.2.0.1
connmand[270]:                                 <-- (8) 
__connman_service_indicate_state: err 0
connmand[270]:                             <-- (7) 
connman_location_report_result: 
connmand[270]:                         <-- (6) __connman_location_detect: 0: 2
connmand[270]:                     <-- (5) __connman_service_indicate_default: 
connmand[270]:                 <-- (4) set_default_gateway: 
connmand[270]:             <-- (3) __connman_connection_gateway_add: 

### Note that the second __connman_service_set_ipconfig_ready comes in here but 
does not upset the service state, simply returning -EALREADY for anyone that 
cares to check.

connmand[270]:             --> (3) __connman_service_set_ipconfig_ready: 
service 0x74220 (wifi_000c294c56a2_53706f74_managed_psk) type 1 (IPv4)
connmand[270]:             <-- (3) __connman_service_set_ipconfig_ready: err 
-114
connmand[270]:         <-- (2) dhcp_success: OK
connmand[270]:     <-- (1) dhcp_callback: 
connmand[270]: <-- (0) lease_available_cb: 
connmand[270]: wlan0 {add} address 10.2.1.14/16 label wlan0 family 2
connmand[270]: --> (0) service_ip_bound: ipconfig 0x74fb0
connmand[270]: wlan0 ip bound
connmand[270]:     --> (1) __connman_ipconfig_append_ipv4: ipconfig 0x74fb0
connmand[270]: ipconfig->system 0x6e190
connmand[270]: ipconfig->system->local 0x6e750
connmand[270]: ipconfig->system->gateway (nil)
connmand[270]:     <-- (1) __connman_ipconfig_append_ipv4: 
connmand[270]: <-- (0) service_ip_bound: 
connmand[270]: --> (0) service_ip_bound: ipconfig 0x6e1b0
connmand[270]: wlan0 ip bound
connmand[270]:     --> (1) __connman_ipconfig_append_ipv4: ipconfig 0x74fb0
connmand[270]: ipconfig->system 0x6e190
connmand[270]: ipconfig->system->local 0x6e750
connmand[270]: ipconfig->system->gateway (nil)
connmand[270]:     <-- (1) __connman_ipconfig_append_ipv4: 
connmand[270]: <-- (0) service_ip_bound: 
connmand[270]: wlan0 {add} route 10.2.0.0 gw 0.0.0.0 scope 253 <LINK>
connmand[270]: wlan0 {add} route 10.2.0.1 gw 0.0.0.0 scope 253 <LINK>
connmand[270]: wlan0 {del} route fe80:: gw :: scope 0 <UNIVERSE>
connmand[270]: wlan0 {del} route ff00:: gw :: scope 0 <UNIVERSE>
connmand[270]: --> (0) service_ip_bound: ipconfig 0x74fb0
connmand[270]: wlan0 ip bound
connmand[270]:     --> (1) __connman_ipconfig_append_ipv4: ipconfig 0x74fb0
connmand[270]: ipconfig->system 0x6e190
connmand[270]: ipconfig->system->local 0x6e750
connmand[270]: ipconfig->system->gateway 0x77ca0
connmand[270]:     <-- (1) __connman_ipconfig_append_ipv4: 
connmand[270]: <-- (0) service_ip_bound: 
connmand[270]: --> (0) service_ip_bound: ipconfig 0x6e1b0
connmand[270]: wlan0 ip bound
connmand[270]:     --> (1) __connman_ipconfig_append_ipv4: ipconfig 0x74fb0
connmand[270]: ipconfig->system 0x6e190
connmand[270]: ipconfig->system->local 0x6e750
connmand[270]: ipconfig->system->gateway 0x77ca0
connmand[270]:     <-- (1) __connman_ipconfig_append_ipv4: 
connmand[270]: <-- (0) service_ip_bound: 
connmand[270]: wlan0 {add} route 0.0.0.0 gw 10.2.0.1 scope 0 <UNIVERSE>

### Now disconnect...

# dbus-send --system --dest=net.connman --print-reply 
/profile/default/wifi_000c294c56a2_53706f74_managed_psk 
net.connman.Service.Disconnect
connmand[270]: --> (0) disconnect_service: service 0x74220 identifier 
wifi_000c294c56a2_53706f74_managed_psk type 3 (wifi)
connmand[270]:     --> (1) __connman_service_disconnect: service 0x74220
connmand[270]:         --> (2) __connman_network_disconnect: network 0x74d98
connmand[270]: Requesting disconnection from network "Spot" identifier 
"53706f74_managed_psk".
connmand[270]:             --> (3) set_connected: service 0x74220
connmand[270]: network connected 0
connmand[270]: service 0x74220
connmand[270]:                 --> (4) __connman_service_indicate_state: 
service 0x74220 wifi_000c294c56a2_53706f74_managed_psk new_state 6 (disconnect) 
type 1 (IPv4)
connmand[270]: service 0x74220 state online/idle => online new disconnect/1 => 
disconnect
connmand[270]: Disabling DNS server 10.2.0.1
connmand[270]: Removing DNS server 10.2.0.1
connmand[270]:                     --> (5) __connman_notifier_disconnect: type 
3 (wifi)
connmand[270]: before &connected[wifi] 1
connmand[270]:                         --> (6) technology_connected: type 3 
(wifi) connected 0
connmand[270]:                             --> (7) state_changed: count 0
connmand[270]:                             <-- (7) state_changed: 
connmand[270]:                         <-- (6) technology_connected: 
connmand[270]: after &connected[wifi] 0
connmand[270]:                     <-- (5) __connman_notifier_disconnect: 
connmand[270]:                 <-- (4) __connman_service_indicate_state: err 0
connmand[270]:                 --> (4) __connman_service_indicate_state: 
service 0x74220 wifi_000c294c56a2_53706f74_managed_psk new_state 6 (disconnect) 
type 2 (IPv6)
connmand[270]: service 0x74220 state disconnect/idle => disconnect new 
disconnect/2 => disconnect
connmand[270]:                 <-- (4) __connman_service_indicate_state: err 
-114
connmand[270]: Deleting host route failed (No such process)
connmand[270]: Deleting host route failed (No such process)
connmand[270]:                 --> (4) __connman_service_indicate_state: 
service 0x74220 wifi_000c294c56a2_53706f74_managed_psk new_state 1 (idle) type 
1 (IPv4)
connmand[270]: service 0x74220 state disconnect/disconnect => disconnect new 
idle/1 => disconnect
connmand[270]:                 <-- (4) __connman_service_indicate_state: err 
-114
connmand[270]:                 --> (4) __connman_service_indicate_state: 
service 0x74220 wifi_000c294c56a2_53706f74_managed_psk new_state 1 (idle) type 
2 (IPv6)
connmand[270]: service 0x74220 state idle/disconnect => disconnect new idle/2 
=> idle
connmand[270]:                     --> (5) __connman_element_request_scan: 
connmand[270]:                         --> (6) request_scan: 
connmand[270]:                         <-- (6) request_scan: 
connmand[270]:                         --> (6) request_scan: 
connmand[270]:                             --> (7) __connman_device_scan: 
interface wlan0
connmand[270]: Requested scan for device wifi interface wlan0.
connmand[270]:                             <-- (7) __connman_device_scan: 
connmand[270]:                         <-- (6) request_scan: 
connmand[270]:                         --> (6) request_scan: 
connmand[270]:                         <-- (6) request_scan: 
connmand[270]:                         --> (6) request_scan: 
connmand[270]:                         <-- (6) request_scan: 
connmand[270]:                         --> (6) request_scan: 
connmand[270]:                         <-- (6) request_scan: 
connmand[270]:                         --> (6) request_scan: 
connmand[270]:                         <-- (6) request_scan: 
connmand[270]:                         --> (6) request_scan: 
connmand[270]:                         <-- (6) request_scan: 
connmand[270]:                         --> (6) request_scan: 
connmand[270]:                         <-- (6) request_scan: 
connmand[270]:                         --> (6) request_scan: 
connmand[270]:                         <-- (6) request_scan: 
connmand[270]:                         --> (6) request_scan: 
connmand[270]:                         <-- (6) request_scan: 
connmand[270]:                     <-- (5) __connman_element_request_scan: 
connmand[270]:                 <-- (4) __connman_service_indicate_state: err 0
connmand[270]:             <-- (3) set_connected: 
connmand[270]:             --> (3) set_connected: service 0x74220
connmand[270]: network connected 0
connmand[270]: service 0x74220
connmand[270]:                 --> (4) __connman_service_indicate_state: 
service 0x74220 wifi_000c294c56a2_53706f74_managed_psk new_state 6 (disconnect) 
type 1 (IPv4)
connmand[270]: service 0x74220 state idle/idle => idle new disconnect/1 => 
disconnect
connmand[270]:                 <-- (4) __connman_service_indicate_state: err -22
connmand[270]:                 --> (4) __connman_service_indicate_state: 
service 0x74220 wifi_000c294c56a2_53706f74_managed_psk new_state 6 (disconnect) 
type 2 (IPv6)
connmand[270]: service 0x74220 state idle/idle => idle new disconnect/2 => 
disconnect
connmand[270]:                 <-- (4) __connman_service_indicate_state: err -22
connmand[270]: Deleting host route failed (No such process)
connmand[270]:                 --> (4) __connman_service_indicate_state: 
service 0x74220 wifi_000c294c56a2_53706f74_managed_psk new_state 1 (idle) type 
1 (IPv4)
connmand[270]:                 <-- (4) __connman_service_indicate_state: err 
-114
connmand[270]:                 --> (4) __connman_service_indicate_state: 
service 0x74220 wifi_000c294c56a2_53706f74_managed_psk new_state 1 (idle) type 
2 (IPv6)
connmand[270]:                 <-- (4) __connman_service_indicate_state: 
EALREADY: 2
connmand[270]:             <-- (3) __connman_service_indicate_state: err -114
connmand[270]:         <-- (2) set_connected: 
connmand[270]:     <-- (1) __connman_network_disconnect: err 0
connmand[270]:     --> (1) __connman_inet_modify_address: cmd 15 flags 0 index 
2 family 2 address 10.2.1.14 peer (null) prefixlen 16 broadcast (null)
connmand[270]:     <-- (1) __connman_inet_modify_address: 
connmand[270]: <-- (0) __connman_service_disconnect: 
connmand[270]: __connman_notifier_count_connected() 0
connmand[270]: <-- (-1) disconnect_service: 

method return sender=:1.6 -> dest=:1.7 reply_serial=2

connmand[270]: wlan0 {RX} 1102 packets 1445629 bytes
connmand[270]: wlan0 {TX} 539 packets 55001 bytes
connmand[270]: wlan0 {update} flags 4099 <UP>
connmand[270]: wlan0 {newlink} index 2 address 00:0c:29:4c:56:a2 mtu 1500
connmand[270]: wlan0 {newlink} index 2 operstate 2 <DOWN>
connmand[270]: wlan0 {update} flags 4163 <UP,RUNNING>
connmand[270]: wlan0 {del} route 10.2.0.1 gw 0.0.0.0 scope 253 <LINK>
connmand[270]: wlan0 {del} route 0.0.0.0 gw 10.2.0.1 scope 0 <UNIVERSE>
connmand[270]: wlan0 {del} address 10.2.1.14/16 label wlan0
connmand[270]: wlan0 {del} route 10.2.0.0 gw 0.0.0.0 scope 253 <LINK>

### The manager state is sane.

# dbus-send --system --dest=net.connman --print-reply / 
net.connman.Manager.GetState
connmand[270]: --> (0) __connman_notifier_get_state: 
connmand[270]: <-- (0) __connman_notifier_get_state: 
method return sender=:1.6 -> dest=:1.8 reply_serial=2
   string "offline"
   
# dbus-send --system --dest=net.connman --print-reply / 
net.connman.Manager.GetProperties
connmand[270]: --> (0) __connman_notifier_get_state: 
connmand[270]: <-- (0) __connman_notifier_get_state: 
method return sender=:1.6 -> dest=:1.13 reply_serial=2
   array [
      dict entry(
         string "ActiveProfile"
         variant             object path "/profile/default"
      )
      dict entry(
         string "Profiles"
         variant             array [
               object path "/profile/default"
            ]
      )
      dict entry(
         string "Services"
         variant             array [
               object path 
"/profile/default/wifi_18b4300004d9_54696666616e79_managed_psk"
               object path 
"/profile/default/wifi_18b4300004d9_4f73636172_managed_wep"
               object path 
"/profile/default/wifi_18b4300004d9_4865786c6579_managed_psk"
               object path 
"/profile/default/wifi_18b4300004d9_50494e474c_managed_psk"
               object path 
"/profile/default/wifi_18b4300004d9_4d65656b6f_managed_psk"
               object path 
"/profile/default/wifi_18b4300004d9_41626279_managed_psk"
               object path 
"/profile/default/wifi_18b4300004d9_4e75727365496e7374656164576972656c657373_managed_wep"
               object path 
"/profile/default/wifi_18b4300004d9_6f665f6c696e6b7379735f31_managed_psk"
               object path 
"/profile/default/wifi_18b4300004d9_3257495245353831_managed_wep"
            ]
      )
      dict entry(
         string "Technologies"
         variant             array [
               object path "/net/connman/technology/wifi"
            ]
      )
      dict entry(
         string "State"
         variant             string "offline"
      )
      dict entry(
         string "OfflineMode"
         variant             boolean false
      )
      dict entry(
         string "AvailableTechnologies"
         variant             array [
               string "wifi"
            ]
      )
      dict entry(
         string "EnabledTechnologies"
         variant             array [
               string "wifi"
            ]
      )
      dict entry(
         string "ConnectedTechnologies"
         variant             array [
            ]
      )
      dict entry(
         string "DefaultTechnology"
         variant             string ""
      )
      dict entry(
         string "AvailableDebugs"
         variant             array [
            ]
      )
      dict entry(
         string "EnabledDebugs"
         variant             array [
            ]
      )
   ]

_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman

Reply via email to