intermittent failures
by Fred Ollinger
New Note 58
Given i.MX6 hardware with ARMv7 processor, I'm having intermittent failures when connecting to access points.
It's intermittent in that I can sometimes connect to an access point then other times, connecting fails. From what I can see, we authenticate properly, but then fail to get a password via dhcp.
I'm running connman 1.25 and I'm connecting by using the DBUS interface. This is built with Yocto.
Is there any other information you need?
Has this been fixed in a later release?
Is there a bugzilla I can go to in order to search for similar problems?
Here's the debug output from a failure.
connmand[510]: Skipping disconnect of 43533635782d3136302d4368757061636162726173_managed_none, network is connecting.
connmand[510]: wlan0 {add} route ff00:: gw :: scope 0 <UNIVERSE>
connmand[510]: wlan0 {add} route fe80:: gw :: scope 0 <UNIVERSE>
connmand[510]: wlan0 {RX} 32 packets 4991 bytes
connmand[510]: wlan0 {TX} 299 packets 53708 bytes
connmand[510]: wlan0 {update} flags 69699 <UP,RUNNING,LOWER_UP>
connmand[510]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[510]: wlan0 {newlink} index 3 operstate 6 <UP>
connmand[510]: wlan0 {RX} 32 packets 4991 bytes
connmand[510]: wlan0 {TX} 299 packets 53708 bytes
connmand[510]: wlan0 {update} flags 69635 <UP,LOWER_UP>
connmand[510]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[510]: wlan0 {newlink} index 3 operstate 5 <DORMANT>
connmand[510]: wlan0 {RX} 32 packets 4991 bytes
connmand[510]: wlan0 {TX} 299 packets 53708 bytes
connmand[510]: wlan0 {update} flags 69699 <UP,RUNNING,LOWER_UP>
connmand[510]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[510]: wlan0 {newlink} index 3 operstate 6 <UP>
connmand[510]: wlan0 {add} address 192.168.8.27/32 label wlan0 family 2
connmand[510]: wlan0 {add} route 0.0.0.0 gw 0.0.0.0 scope 253 <LINK>
connmand[510]: wlan0 {RX} 33 packets 5333 bytes
connmand[510]: wlan0 {TX} 306 packets 55004 bytes
connmand[510]: wlan0 {update} flags 4099 <UP>
connmand[510]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[510]: wlan0 {newlink} index 3 operstate 2 <DOWN>
connmand[510]: wlan0 {del} route fe80:: gw :: scope 0 <UNIVERSE>
connmand[510]: wlan0 {del} route ff00:: gw :: scope 0 <UNIVERSE>
connmand[510]: Probably roaming right now! Staying connected...
connmand[510]: wlan0 {RX} 33 packets 5333 bytes
connmand[510]: wlan0 {TX} 306 packets 55004 bytes
connmand[510]: wlan0 {update} flags 69699 <UP,RUNNING,LOWER_UP>
connmand[510]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[510]: wlan0 {newlink} index 3 operstate 6 <UP>
connmand[510]: wlan0 {RX} 33 packets 5333 bytes
connmand[510]: wlan0 {TX} 306 packets 55004 bytes
connmand[510]: wlan0 {update} flags 69635 <UP,LOWER_UP>
connmand[510]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[510]: wlan0 {newlink} index 3 operstate 5 <DORMANT>
connmand[510]: wlan0 {RX} 33 packets 5333 bytes
connmand[510]: wlan0 {TX} 306 packets 55004 bytes
connmand[510]: wlan0 {update} flags 69699 <UP,RUNNING,LOWER_UP>
connmand[510]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[510]: wlan0 {newlink} index 3 operstate 6 <UP>
connmand[510]: Probably roaming right now! Staying connected...
Case2:
connmand[524]: wlan0 {RX} 2 packets 463 bytes
connmand[524]: wlan0 {TX} 12 packets 1712 bytes
connmand[524]: wlan0 {update} flags 4099 <UP>
connmand[524]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[524]: wlan0 {newlink} index 3 operstate 2 <DOWN>
connmand[524]: Skipping disconnect of 43533635782d3136302d4368757061636162726173_managed_none, network is connecting.
connmand[524]: wlan0 {RX} 2 packets 463 bytes
connmand[524]: wlan0 {TX} 12 packets 1712 bytes
connmand[524]: wlan0 {update} flags 69699 <UP,RUNNING,LOWER_UP>
connmand[524]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[524]: wlan0 {newlink} index 3 operstate 6 <UP>
connmand[524]: wlan0 {RX} 2 packets 463 bytes
connmand[524]: wlan0 {TX} 12 packets 1712 bytes
connmand[524]: wlan0 {update} flags 69635 <UP,LOWER_UP>
connmand[524]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[524]: wlan0 {newlink} index 3 operstate 5 <DORMANT>
connmand[524]: wlan0 {RX} 2 packets 463 bytes
connmand[524]: wlan0 {TX} 12 packets 1712 bytes
connmand[524]: wlan0 {update} flags 69699 <UP,RUNNING,LOWER_UP>
connmand[524]: wlan0 {newlink} index 3 address E0:E5:CF:7C:60:FC mtu 1500
connmand[524]: wlan0 {newlink} index 3 operstate 6 <UP>
connmand[524]: wlan0 {add} address 192.168.8.27/32 label wlan0 family 2
connmand[524]: wlan0 {add} route 0.0.0.0 gw 0.0.0.0 scope 253 <LINK>
Thanks.
Sincerely,
Frederick Ollinger
2 years, 9 months
Connman Error wifi: Operation not permitted [HELP please]
by Jared Harvey
Hello,
I'm having problems getting connman to turn on my wifi. It appears I have a
permission problem. Can someone please suggest some next steps for getting
the WiFi routing traffic to the internet? It appears I have a functional
kernel driver, but for some reason I can not get connman to turn the wifi
module on. It fails to scan networks.
Here is a bunch of information from my particular setup.
Beagle Bone Black (BBB) with LCD7 and UWN100 USB wifi
machinekit@beaglebone:~$ sudo connmanctl scan wifi
Error /net/connman/technology/wifi: No carrier
machinekit@beaglebone:~$ sudo connmanctl enable wifi
Error wifi: Operation not permitted
machinekit@beaglebone:~$ sudo connmanctl technologies
/net/connman/technology/wifi
Name = WiFi
Type = wifi
Powered = *False*
Connected = False
Tethering = False
/net/connman/technology/gadget
Name = Gadget
Type = gadget
Powered = True
Connected = False
Tethering = False
/net/connman/technology/ethernet
Name = Wired
Type = ethernet
Powered = True
Connected = True
Tethering = False
machinekit@beaglebone:~$ sudo connmanctl services
*AO Wired ethernet_9059af8e326c_cable
machinekit@beaglebone:~$ lsmod
Module Size Used by
*mt7601Usta * 461214 0
omap_rng 4254 0
8021q 15004 0
garp 5513 1 8021q
stp 1867 1 garp
llc 5058 2 stp,garp
g_ether 23921 0
libcomposite 15107 1 g_ether
machinekit@beaglebone:~$ lsusb
Bus 001 Device 002: ID 148f:*7601 *Ralink Technology, Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
machinekit@beaglebone:~$ uname -r
3.8.13-bone83
machinekit@beaglebone:~$ cat /etc/debian_version
8.7
machinekit@beaglebone:~$ dmesg | grep rt2
[ 23.998753] rt2870 1-1:1.0: usb_probe_interface
[ 23.998908] rt2870 1-1:1.0: usb_probe_interface - got id
[ 24.063742] usbcore: registered new interface driver rt2870
machinekit@beaglebone:~$ dmesg | grep 7601
[ 1.176010] usbcore: registered new interface driver cdc_ncm
[ 2.081250] usb 1-1: New USB device found, idVendor=148f, idProduct=7601
[84932.378008] Modules linked in: mt7601Usta(O) omap_rng 8021q garp stp llc
g_ether libcomposite
[84932.378703] [<c032b6a3>] (usb_submit_urb+0x1cb/0x398) from [<bf86b7ab>]
(BulkInCmdRspEvent+0x42/0x68 [mt7601Usta])
[84932.379294] [<bf86b7ab>] (BulkInCmdRspEvent+0x42/0x68 [mt7601Usta]) from
[<bf86b8cd>] (RTUSBBulkCmdRspEventReceive+0x38/0x58 [mt7601Usta])
[84932.379670] [<bf86b8cd>] (RTUSBBulkCmdRspEventReceive+0x38/0x58
[mt7601Usta]) from [<bf84dabf>] (NICInitializeAsic+0xea/0x3c0 [mt7601Usta])
[84932.379870] [<bf84dabf>] (NICInitializeAsic+0xea/0x3c0 [mt7601Usta])
from [<e0d8a000>] (0xe0d8a000)
machinekit@beaglebone:~$sudo strace connmanctl enable wifi
execve("/usr/sbin/connmanctl", ["connmanctl", "enable", "wifi"], [/* 14
vars */]) = 0
brk(0) = 0xb6f2f000
uname({sys="Linux", node="beaglebone", ...}) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or
directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb6f0a000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or
directory)
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=72696, ...}) = 0
mmap2(NULL, 72696, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb6ed3000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or
directory)
open("/lib/arm-linux-gnueabihf/libdbus-1.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0xV\0\0004\0\0\0"...,
512) = 512
lseek(3, 173452, SEEK_SET) = 173452
read(3,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
1040) = 1040
lseek(3, 173112, SEEK_SET) = 173112
read(3, "A2\0\0\0aeabi\0\1(\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 51)
= 51
fstat64(3, {st_mode=S_IFREG|0644, st_size=174492, ...}) = 0
mmap2(NULL, 238892, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xb6e98000
mprotect(0xb6ec2000, 61440, PROT_NONE) = 0
mmap2(0xb6ed1000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x29000) = 0xb6ed1000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or
directory)
open("/lib/arm-linux-gnueabihf/libglib-2.0.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3,
"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\330T\1\0004\0\0\0"..., 512)
= 512
lseek(3, 813200, SEEK_SET) = 813200
read(3,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
1080) = 1080
lseek(3, 812848, SEEK_SET) = 812848
read(3, "A4\0\0\0aeabi\0\1*\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 53)
= 53
fstat64(3, {st_mode=S_IFREG|0644, st_size=814280, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb6f09000
mmap2(NULL, 879968, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xb6dc1000
mprotect(0xb6e87000, 61440, PROT_NONE) = 0
mmap2(0xb6e96000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xc5000) = 0xb6e96000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or
directory)
open("/lib/arm-linux-gnueabihf/libreadline.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3,
"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\350\315\0\0004\0\0\0"...,
512) = 512
lseek(3, 173340, SEEK_SET) = 173340
read(3,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
1040) = 1040
lseek(3, 173028, SEEK_SET) = 173028
read(3, "A2\0\0\0aeabi\0\1(\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 51)
= 51
fstat64(3, {st_mode=S_IFREG|0644, st_size=174380, ...}) = 0
mmap2(NULL, 243336, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xb6d85000
mprotect(0xb6dac000, 61440, PROT_NONE) = 0
mmap2(0xb6dbb000, 20480, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x26000) = 0xb6dbb000
mmap2(0xb6dc0000, 1672, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6dc0000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or
directory)
open("/lib/arm-linux-gnueabihf/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\3\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0Mw\1\0004\0\0\0"...,
512) = 512
lseek(3, 908188, SEEK_SET) = 908188
read(3,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
2880) = 2880
lseek(3, 904740, SEEK_SET) = 904740
read(3, "A4\0\0\0aeabi\0\1*\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\3\f"..., 53) =
53
fstat64(3, {st_mode=S_IFREG|0755, st_size=911068, ...}) = 0
mmap2(NULL, 980392, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xb6c95000
mprotect(0xb6d70000, 61440, PROT_NONE) = 0
mmap2(0xb6d7f000, 12288, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xda000) = 0xb6d7f000
mmap2(0xb6d82000, 9640, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6d82000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or
directory)
open("/lib/arm-linux-gnueabihf/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0EQ\0\0004\0\0\0"...,
512) = 512
lseek(3, 100684, SEEK_SET) = 100684
read(3,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
1520) = 1520
lseek(3, 65940, SEEK_SET) = 65940
read(3, "A4\0\0\0aeabi\0\1*\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 53)
= 53
fstat64(3, {st_mode=S_IFREG|0755, st_size=102204, ...}) = 0
mmap2(NULL, 139836, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xb6c72000
mprotect(0xb6c82000, 61440, PROT_NONE) = 0
mmap2(0xb6c91000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xf000) = 0xb6c91000
mmap2(0xb6c93000, 4668, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb6c93000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or
directory)
open("/lib/arm-linux-gnueabihf/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0@\20\0\0004\0\0\0"...,
512) = 512
lseek(3, 307536, SEEK_SET) = 307536
read(3,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
1040) = 1040
lseek(3, 307224, SEEK_SET) = 307224
read(3, "A2\0\0\0aeabi\0\1(\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 51)
= 51
fstat64(3, {st_mode=S_IFREG|0644, st_size=308576, ...}) = 0
mmap2(NULL, 372812, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xb6c16000
mprotect(0xb6c61000, 61440, PROT_NONE) = 0
mmap2(0xb6c70000, 8192, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x4a000) = 0xb6c70000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or
directory)
open("/lib/arm-linux-gnueabihf/libtinfo.so.5", O_RDONLY|O_CLOEXEC) = 3
read(3,
"\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\220]\0\0004\0\0\0"..., 512)
= 512
lseek(3, 107928, SEEK_SET) = 107928
read(3,
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
1040) = 1040
lseek(3, 107620, SEEK_SET) = 107620
read(3, "A2\0\0\0aeabi\0\1(\0\0\0\0057-A\0\6\n\7A\10\1\t\2\n\4\22"..., 51)
= 51
fstat64(3, {st_mode=S_IFREG|0644, st_size=108968, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb6f08000
mmap2(NULL, 174284, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) =
0xb6beb000
mprotect(0xb6c03000, 65536, PROT_NONE) = 0
mmap2(0xb6c13000, 12288, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x18000) = 0xb6c13000
close(3) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0xb6f07000
set_tls(0xb6f074c0, 0xb6f0d050, 0xb6f07ba8, 0xb6f074c0, 0xb6f0d050) = 0
mprotect(0xb6d7f000, 8192, PROT_READ) = 0
mprotect(0xb6c13000, 8192, PROT_READ) = 0
mprotect(0xb6c91000, 4096, PROT_READ) = 0
mprotect(0xb6c70000, 4096, PROT_READ) = 0
mprotect(0xb6dbb000, 4096, PROT_READ) = 0
mprotect(0xb6e96000, 4096, PROT_READ) = 0
mprotect(0xb6ed1000, 4096, PROT_READ) = 0
mprotect(0xb6f2d000, 4096, PROT_READ) = 0
mprotect(0xb6f0c000, 4096, PROT_READ) = 0
munmap(0xb6ed3000, 72696) = 0
set_tid_address(0xb6f07068) = 4759
set_robust_list(0xb6f07070, 12) = 0
rt_sigaction(SIGRTMIN, {0xb6c76d9d, [], SA_RESTORER|SA_SIGINFO,
0xb6cbbb01}, NULL, 8) = 0
rt_sigaction(SIGRT_1, {0xb6c76cbd, [], SA_RESTORER|SA_RESTART|SA_SIGINFO,
0xb6cbbb01}, NULL, 8) = 0
rt_sigprocmask(SIG_UNBLOCK, [RTMIN RT_1], NULL, 8) = 0
getrlimit(RLIMIT_STACK, {rlim_cur=8192*1024, rlim_max=RLIM_INFINITY}) = 0
clock_getres(CLOCK_MONOTONIC, {0, 1}) = 0
getresuid32([0], [0], [0]) = 0
getresgid32([0], [0], [0]) = 0
brk(0) = 0xb6f2f000
brk(0xb6f50000) = 0xb6f50000
socket(PF_LOCAL, SOCK_STREAM|SOCK_CLOEXEC, 0) = 3
connect(3, {sa_family=AF_LOCAL,
sun_path="/var/run/dbus/system_bus_socket"}, 33) = 0
fcntl64(3, F_GETFL) = 0x2 (flags O_RDWR)
fcntl64(3, F_SETFL, O_RDWR|O_NONBLOCK) = 0
geteuid32() = 0
getsockname(3, {sa_family=AF_LOCAL, NULL}, [2]) = 0
poll([{fd=3, events=POLLOUT}], 1, 0) = 1 ([{fd=3, revents=POLLOUT}])
send(3, "\0", 1, MSG_NOSIGNAL) = 1
send(3, "AUTH EXTERNAL 30\r\n", 18, MSG_NOSIGNAL) = 18
poll([{fd=3, events=POLLIN}], 1, -1) = 1 ([{fd=3, revents=POLLIN}])
read(3, "OK 9c3d7e050288030b07fac39a58bfe"..., 2048) = 37
poll([{fd=3, events=POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}])
send(3, "NEGOTIATE_UNIX_FD\r\n", 19, MSG_NOSIGNAL) = 19
poll([{fd=3, events=POLLIN}], 1, -1) = 1 ([{fd=3, revents=POLLIN}])
read(3, "AGREE_UNIX_FD\r\n", 2048) = 15
poll([{fd=3, events=POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}])
send(3, "BEGIN\r\n", 7, MSG_NOSIGNAL) = 7
poll([{fd=3, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=3, revents=POLLOUT}])
sendmsg(3, {msg_name(0)=NULL,
msg_iov(2)=[{"l\1\0\1\0\0\0\0\1\0\0\0n\0\0\0\1\1o\0\25\0\0\0/org/fre"...,
128}, {"", 0}], msg_controllen=0, msg_flags=0}, MSG_NOSIGNAL) = 128
clock_gettime(CLOCK_MONOTONIC, {88078, 434444433}) = 0
poll([{fd=3, events=POLLIN}], 1, 25000) = 1 ([{fd=3, revents=POLLIN}])
recvmsg(3, {msg_name(0)=NULL,
msg_iov(1)=[{"l\2\1\1\n\0\0\0\1\0\0\0=\0\0\0\6\1s\0\5\0\0\0:1.33\0\0\0"...,
2048}], msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_CMSG_CLOEXEC) =
260
recvmsg(3, 0xbef42450, MSG_CMSG_CLOEXEC) = -1 EAGAIN (Resource temporarily
unavailable)
fstat64(3, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0
fcntl64(3, F_GETFL) = 0x802 (flags O_RDWR|O_NONBLOCK)
gettimeofday({1489060339, 326397}, NULL) = 0
futex(0xb6e97ca0, FUTEX_WAKE, 2147483647) = 0
eventfd2(0, O_NONBLOCK|O_CLOEXEC) = 4
write(4, "\1\0\0\0\0\0\0\0", 8) = 8
write(4, "\1\0\0\0\0\0\0\0", 8) = 8
clock_gettime(CLOCK_MONOTONIC, {88078, 448895108}) = 0
sendmsg(3, {msg_name(0)=NULL,
msg_iov(2)=[{"l\1\0\1\24\0\0\0\2\0\0\0\200\0\0\0\1\1o\0\34\0\0\0/net/con"...,
144}, {"\7\0\0\0Powered\0\1b\0\0\1\0\0\0", 20}], msg_controllen=0,
msg_flags=0}, MSG_NOSIGNAL) = 164
clock_gettime(CLOCK_MONOTONIC, {88078, 454675769}) = 0
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}], 2, 0) = 1 ([{fd=4,
revents=POLLIN}])
clock_gettime(CLOCK_MONOTONIC, {88078, 456264419}) = 0
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}], 2, 119993) = 1
([{fd=4, revents=POLLIN}])
read(4, "\2\0\0\0\0\0\0\0", 16) = 8
clock_gettime(CLOCK_MONOTONIC, {88078, 458413464}) = 0
clock_gettime(CLOCK_MONOTONIC, {88078, 458873031}) = 0
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}], 2, 119991) = 1
([{fd=3, revents=POLLIN}])
read(4, 0xbef425dc, 16) = -1 EAGAIN (Resource temporarily
unavailable)
clock_gettime(CLOCK_MONOTONIC, {88079, 81565917}) = 0
write(4, "\1\0\0\0\0\0\0\0", 8) = 8
recvmsg(3, {msg_name(0)=NULL,
msg_iov(1)=[{"l\3\1\1\34\0\0\0k\0\0\0U\0\0\0\6\1s\0\5\0\0\0:1.33\0\0\0"...,
2048}], msg_controllen=0, msg_flags=MSG_CMSG_CLOEXEC}, MSG_CMSG_CLOEXEC) =
132
recvmsg(3, 0xbef424e8, MSG_CMSG_CLOEXEC) = -1 EAGAIN (Resource temporarily
unavailable)
write(4, "\1\0\0\0\0\0\0\0", 8) = 8
poll([{fd=4, events=POLLIN}, {fd=3, events=POLLIN}], 2, 0) = 1 ([{fd=4,
revents=POLLIN}])
write(2, "Error wifi: Operation not permit"..., 36Error wifi: Operation not
permitted
) = 36
write(4, "\1\0\0\0\0\0\0\0", 8) = 8
futex(0xb6f3221c, FUTEX_WAKE, 2147483647) = 0
exit_group(0) = ?
+++ exited with 0 +++
My network adapter is the UWN100 from logic supply. It's a RA7601 as noted
above in lsusb and lsmod. Which is advertised as the official BBB wifi
device here. However that's based off Armstrong Linux. Not Debian.
https://www.logicsupply.com/media/resources/manuals/Tutorial_Installing-C...
The BBB image I started with is found here
https://rcn-ee.com/rootfs/bb.org/testing/2017-02-12/machinekit/bone-debia...
Which is linked on this page.
http://elinux.org/Beagleboard:BeagleBoneBlack_Debian#BBW.2FBBB_.28All_Rev...
Here is a blog which explains some of the basics of this particular image.
Here is a snippet quote about the basic setup of this image.
> based on the official Debian release for the BeagleBone using Robert C
> Nelson's omap-image-builder scripts
> <https://github.com/RobertCNelson/omap-image-builder> and the Machinekit
> software <http://www.machinekit.io/>
>
http://blog.machinekit.io/p/machinekit_16.html
Thanks for this wonderful networking tool. I am eager to get the last bit
of configuration squared away such that I can use the wifi.
Best regards.
.. ..-. / -.-- --- ..- / .-. . .- -.. / - .... .. ...
.-.. . - ... / .... .- ...- . / .- / -... . . .-.
Jared Harvey Operator KB1GTT
e-mail mail(a)jaredharvey.com
Web page http://jaredharvey.com
2 years, 9 months
[PATCH] service: Add EnableOnlineCheck config option
by Lukasz Nowak
From: Lukasz Nowak <lnowak(a)tycoint.com>
Global config option, which allows to enable/disable (enabled by default)
use of http get in wispr to transition a default service from READY to
ONLINE state.
---
doc/connman.conf.5.in | 9 +++++++++
src/main.c | 14 ++++++++++++++
src/main.conf | 9 +++++++++
src/service.c | 15 ++++++++-------
4 files changed, 40 insertions(+), 7 deletions(-)
diff --git a/doc/connman.conf.5.in b/doc/connman.conf.5.in
index c113ac3..9c99910 100644
--- a/doc/connman.conf.5.in
+++ b/doc/connman.conf.5.in
@@ -136,6 +136,15 @@ See RFC6343. Default value is false (as recommended by RFC6343 section 4.1).
Set DHCP option 60 (Vendor Class ID) to the given string. This option can
be used by DHCP servers to identify specific clients without having to
rely on MAC address ranges, etc
+.TP
+.BI EnableOnlineCheck=true\ \fR|\fB\ false
+Enable or disable use of http get as on online status check.
+When a service is in a READY state, and is selected as default,
+ConnMan will issue an HTTP GET request to verify that end-to-end
+connectivity is successful. Only then the service will be
+transitioned to ONLINE state.
+If this setting is false, the default service will remain in READY state.
+Default value is true.
.SH "EXAMPLE"
The following example configuration disables hostname updates and enables
ethernet tethering.
diff --git a/src/main.c b/src/main.c
index 915c17e..b3e6bc9 100644
--- a/src/main.c
+++ b/src/main.c
@@ -78,6 +78,7 @@ static struct {
bool persistent_tethering_mode;
bool enable_6to4;
char *vendor_class_id;
+ bool enable_online_check;
} connman_settings = {
.bg_scan = true,
.pref_timeservers = NULL,
@@ -94,6 +95,7 @@ static struct {
.persistent_tethering_mode = false,
.enable_6to4 = false,
.vendor_class_id = NULL,
+ .enable_online_check = true,
};
#define CONF_BG_SCAN "BackgroundScanning"
@@ -111,6 +113,7 @@ static struct {
#define CONF_PERSISTENT_TETHERING_MODE "PersistentTetheringMode"
#define CONF_ENABLE_6TO4 "Enable6to4"
#define CONF_VENDOR_CLASS_ID "VendorClassID"
+#define CONF_ENABLE_ONLINE_CHECK "EnableOnlineCheck"
static const char *supported_options[] = {
CONF_BG_SCAN,
@@ -128,6 +131,7 @@ static const char *supported_options[] = {
CONF_PERSISTENT_TETHERING_MODE,
CONF_ENABLE_6TO4,
CONF_VENDOR_CLASS_ID,
+ CONF_ENABLE_ONLINE_CHECK,
NULL
};
@@ -394,6 +398,13 @@ static void parse_config(GKeyFile *config)
connman_settings.vendor_class_id = vendor_class_id;
g_clear_error(&error);
+
+ boolean = __connman_config_get_bool(config, "General",
+ CONF_ENABLE_ONLINE_CHECK, &error);
+ if (!error)
+ connman_settings.enable_online_check = boolean;
+
+ g_clear_error(&error);
}
static int config_init(const char *file)
@@ -574,6 +585,9 @@ bool connman_setting_get_bool(const char *key)
if (g_str_equal(key, CONF_ENABLE_6TO4))
return connman_settings.enable_6to4;
+ if (g_str_equal(key, CONF_ENABLE_ONLINE_CHECK))
+ return connman_settings.enable_online_check;
+
return false;
}
diff --git a/src/main.conf b/src/main.conf
index d619413..68870b2 100644
--- a/src/main.conf
+++ b/src/main.conf
@@ -102,6 +102,15 @@
# section 4.1).
# Enable6to4 = false
+# Enable use of http get as on online status check.
+# When a service is in a READY state, and is selected as default,
+# ConnMan will issue an HTTP GET request to verify that end-to-end
+# connectivity is successful. Only then the service will be
+# transitioned to ONLINE state.
+# If this setting is false, the default service will remain in READY state.
+# Default value is true.
+# EnableOnlineCheck = false
+
# List of technologies with AutoConnect = true which are always connected
# regardless of PreferredTechnologies setting. Default value is empty and
# will connect a technology only if it is at a higher preference than any
diff --git a/src/service.c b/src/service.c
index 4e97a15..b889879 100644
--- a/src/service.c
+++ b/src/service.c
@@ -5981,13 +5981,14 @@ int __connman_service_ipconfig_indicate_state(struct connman_service *service,
case CONNMAN_SERVICE_STATE_CONFIGURATION:
break;
case CONNMAN_SERVICE_STATE_READY:
- if (type == CONNMAN_IPCONFIG_TYPE_IPV4) {
- check_proxy_setup(service);
- service_rp_filter(service, true);
- } else {
- service->online_check_count = 1;
- __connman_wispr_start(service, type);
- }
+ if (connman_setting_get_bool("EnableOnlineCheck"))
+ if (type == CONNMAN_IPCONFIG_TYPE_IPV4) {
+ check_proxy_setup(service);
+ service_rp_filter(service, true);
+ } else {
+ service->online_check_count = 1;
+ __connman_wispr_start(service, type);
+ }
break;
case CONNMAN_SERVICE_STATE_ONLINE:
break;
--
2.7.4
2 years, 9 months
[PATCH] bluetooth: Check for network in callbacks
by Patrik Flykt
If there is an ongoing connect or disconnect when the system is suspended,
the Bluetooth PAN device might be gone when the system resumes. This can
cause the network being removed before the connect or disconnect callback
is called. As the connect or disconnect callback do not re-check for an
existing pan->network, a crash will happen as a NULL network is accessed.
Fix this by verifying that pan->network exists when the callback is called.
connmand[9153]: src/network.c:__connman_network_disconnect() network 0x563544e6ca30
connmand[9153]: plugins/bluetooth.c:bluetooth_pan_disconnect() network 0x563544e6ca30
connmand[9153]: src/network.c:connman_network_unref_debug() 0x563544e6ca30 name phone ref 3 by src/service.c:4687:service_free()
connmand[9153]: src/ipconfig.c:__connman_ipconfig_unref_debug() 0x563544e58330 ref 0 by src/service.c:4697:service_free()
connmand[9153]: src/ipconfig.c:__connman_ipconfig_disable() ipconfig 0x563544e58330
connmand[9153]: src/ipconfig.c:__connman_ipconfig_unref_debug() 0x563544e81fd0 ref 0 by src/service.c:4704:service_free()
connmand[9153]: src/ipconfig.c:__connman_ipconfig_disable() ipconfig 0x563544e81fd0
connmand[9153]: plugins/bluetooth.c:bluetooth_pan_remove() network 0x563544e6ca30 pan 0x563544e580b0
connmand[9153]: plugins/bluetooth.c:pan_remove_nap() network 0x563544e6ca30 pan 0x563544e580b0
connmand[9153]: src/device.c:connman_device_remove_network() device 0x563544e630d0 network 0x563544e6ca30
connmand[9153]: src/device.c:free_network() network 0x563544e6ca30
connmand[9153]: src/network.c:network_remove() network 0x563544e6ca30 name phone
connmand[9153]: plugins/bluetooth.c:bluetooth_pan_remove() network 0x563544e6ca30 pan (nil)
connmand[9153]: src/network.c:connman_network_unref_debug() 0x563544e6ca30 name phone ref 2 by src/device.c:378:free_network()
connmand[9153]: src/network.c:connman_network_unref_debug() 0x563544e6ca30 name phone ref 1 by plugins/bluetooth.c:160:pan_remove_nap()
connmand[9153]: src/network.c:connman_network_unref_debug() 0x563544e6ca30 name phone ref 0 by src/device.c:378:free_network()
connmand[9153]: src/network.c:network_destruct() network 0x563544e6ca30 name phone
connmand[9153]: plugins/bluetooth.c:pan_connect_cb() network (nil) org.bluez.Error.Failed
connmand[9153]: src/network.c:connman_network_set_associating() network (nil) associating 0
connmand[9153]: Aborting (signal 11) [src/connmand]
connmand[9153]: ++++++++ backtrace ++++++++
---
plugins/bluetooth.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/plugins/bluetooth.c b/plugins/bluetooth.c
index 401bb30f..f759a902 100644
--- a/plugins/bluetooth.c
+++ b/plugins/bluetooth.c
@@ -206,7 +206,7 @@ static void pan_connect_cb(DBusMessage *message, void *user_data)
DBusMessageIter iter;
pan = g_hash_table_lookup(networks, path);
- if (!pan) {
+ if (!pan || !pan->network) {
DBG("network already removed");
return;
}
@@ -273,7 +273,7 @@ static void pan_disconnect_cb(DBusMessage *message, void *user_data)
struct bluetooth_pan *pan;
pan = g_hash_table_lookup(networks, path);
- if (!pan) {
+ if (!pan || !pan->network) {
DBG("network already removed");
return;
}
--
2.11.0
2 years, 9 months
[PATCH] main: Make --noplugin option repeatable
by Slava Monich
---
src/main.c | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/src/main.c b/src/main.c
index 915c17e..651b3e2 100644
--- a/src/main.c
+++ b/src/main.c
@@ -511,6 +511,21 @@ static bool parse_debug(const char *key, const char *value,
return true;
}
+static bool parse_noplugin(const char *key, const char *value,
+ gpointer user_data, GError **error)
+{
+ if (option_noplugin) {
+ char *prev = option_noplugin;
+
+ option_noplugin = g_strconcat(prev, ",", value, NULL);
+ g_free(prev);
+ } else {
+ option_noplugin = g_strdup(value);
+ }
+
+ return true;
+}
+
static GOptionEntry options[] = {
{ "config", 'c', 0, G_OPTION_ARG_STRING, &option_config,
"Load the specified configuration file "
@@ -524,7 +539,7 @@ static GOptionEntry options[] = {
"Specify networking interface to ignore", "DEV" },
{ "plugin", 'p', 0, G_OPTION_ARG_STRING, &option_plugin,
"Specify plugins to load", "NAME,..." },
- { "noplugin", 'P', 0, G_OPTION_ARG_STRING, &option_noplugin,
+ { "noplugin", 'P', 0, G_OPTION_ARG_CALLBACK, &parse_noplugin,
"Specify plugins not to load", "NAME,..." },
{ "wifi", 'W', 0, G_OPTION_ARG_STRING, &option_wifi,
"Specify driver for WiFi/Supplicant", "NAME" },
--
1.9.1
2 years, 9 months
[PATCH] gsupplicant: Do not modify ConfigMethods if they are already set
by blanquicet@gmail.com
From: Jose Blanquicet <jose.blanquicet-melendez(a)magnetimarelli.com>
If ConnMan does not allow to configure the value to be set to ConfigMethods,
then it should not modify the ones that were configured on wpa_s.
With this patch ConnMan will first verify if the ConfigMethods were already set
on wpa_s before setting its ones. Doing so, ConnMan will not change the
configuration users already set at wpa_s level.
---
gsupplicant/supplicant.c | 39 ++++++++++++++++++++++++++++++++-------
1 file changed, 32 insertions(+), 7 deletions(-)
diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c
index 36c4dd5..4a1d147 100644
--- a/gsupplicant/supplicant.c
+++ b/gsupplicant/supplicant.c
@@ -2111,10 +2111,37 @@ static void interface_bss_removed(DBusMessageIter *iter, void *user_data)
static void set_config_methods(DBusMessageIter *iter, void *user_data)
{
- const char *config_methods = "push_button";
+ dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING, user_data);
+}
+
+static void wps_property(const char *key, DBusMessageIter *iter,
+ void *user_data)
+{
+ GSupplicantInterface *interface = user_data;
+
+ if (!interface)
+ return;
+
+ SUPPLICANT_DBG("key: %s", key);
+
+ if (g_strcmp0(key, "ConfigMethods") == 0) {
+ const char *config_methods = "push_button", *str = NULL;
+
+ dbus_message_iter_get_basic(iter, &str);
+ if (str && strlen(str) > 0) {
+ // It was already set at wpa_s level, don't modify it.
+ SUPPLICANT_DBG("%s", str);
+ return;
+ }
+
+ supplicant_dbus_property_set(interface->path,
+ SUPPLICANT_INTERFACE ".Interface.WPS",
+ "ConfigMethods", DBUS_TYPE_STRING_AS_STRING,
+ set_config_methods, NULL, &config_methods, NULL);
+
+ SUPPLICANT_DBG("No value. Set %s", config_methods);
+ }
- dbus_message_iter_append_basic(iter, DBUS_TYPE_STRING,
- &config_methods);
}
static void interface_property(const char *key, DBusMessageIter *iter,
@@ -2143,11 +2170,9 @@ static void interface_property(const char *key, DBusMessageIter *iter,
debug_strvalmap("Mode capability", mode_capa_map,
interface->mode_capa);
-
- supplicant_dbus_property_set(interface->path,
+ supplicant_dbus_property_get_all(interface->path,
SUPPLICANT_INTERFACE ".Interface.WPS",
- "ConfigMethods", DBUS_TYPE_STRING_AS_STRING,
- set_config_methods, NULL, NULL, NULL);
+ wps_property, interface, interface);
if (interface->ready)
callback_interface_added(interface);
--
1.9.1
2 years, 9 months
[PATCH] timeserver: Update nameservers when DNS changed.
by Antoine Aubert
When the IP address changes, DNS provided by the DHCP may change.
We should update namerver list.
Bug seen on various internet provider box. During xDSL syncronisation,
the first DNS server is a fake one. Later, a renew set another DNS.
---
src/timeserver.c | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/src/timeserver.c b/src/timeserver.c
index f0d33e5..0e555a7 100644
--- a/src/timeserver.c
+++ b/src/timeserver.c
@@ -291,6 +291,8 @@ static void ts_recheck_enable(void)
int __connman_timeserver_sync(struct connman_service *default_service)
{
struct connman_service *service;
+ char **nameservers;
+ int i;
if (default_service)
service = default_service;
@@ -314,6 +316,17 @@ int __connman_timeserver_sync(struct connman_service *default_service)
if (resolv_id > 0)
g_resolv_cancel_lookup(resolv, resolv_id);
+ g_resolv_flush_nameservers(resolv);
+
+ nameservers = connman_service_get_nameservers(service);
+ if (!nameservers)
+ return -EINVAL;
+
+ for (i = 0; nameservers[i]; i++)
+ g_resolv_add_nameserver(resolv, nameservers[i], 53, 0);
+
+ g_strfreev(nameservers);
+
g_slist_free_full(ts_list, g_free);
ts_list = __connman_timeserver_get_all(service);
--
2.9.3
2 years, 9 months
Unable to establish a data connection on cdma network
by Nicolas ADELL
Hi all,
We're using connman 1.31 to manage cdma network using a Cinterion modem. In particular cases, connman is uncapable to configuring the network.
The current head branch leads to the same behavior.
During its initialization, ofono broadcasts a 'PropertyChanged' signal notifying the addition of 'org.ofono.cdma.NetworkRegistration' as new interface.
Connman catches this signal and requests its properties. Because, the interface 'org.ofono.cdma.ConnectionManager' is postponed immediately after the request, connman is not able to retrieve these properties because the pending call did not have received a reply yet.
Jan 01 00:31:48 pcm connmand[470]: plugins/ofono.c:api_added() cdma-netreg added
Jan 01 00:31:48 pcm connmand[470]: plugins/ofono.c:get_properties() /cinterionpxs8_0 path /cinterionpxs8_0 org.ofono.cdma.NetworkRegistration
...
Jan 01 00:31:48 pcm connmand[470]: plugins/ofono.c:modem_changed() /cinterionpxs8_0 Interfaces 0x1b
Jan 01 00:31:48 pcm connmand[470]: plugins/ofono.c:modem_update_interfaces() /cinterionpxs8_0
Jan 01 00:31:48 pcm connmand[470]: plugins/ofono.c:api_added() cmda-cm added
Jan 01 00:31:48 pcm connmand[470]: plugins/ofono.c:get_properties() /cinterionpxs8_0 path /cinterionpxs8_0 org.ofono.cdma.ConnectionManager
Jan 01 00:31:48 pcm connmand[470]: Pending GetProperties
Jan 01 00:31:48 pcm connmand[470]: plugins/ofono.c:get_properties_reply() /cinterionpxs8_0 path /cinterionpxs8_0 org.ofono.cdma.NetworkRegistration
Jan 01 00:31:48 pcm connmand[470]: plugins/ofono.c:cdma_netreg_properties_reply() /cinterionpxs8_0
Then, when ofono broadcasts a PropertyChanged signal into dbus system bus notifying its new ConnectionManager settings, no context list were created and connnman is trying to use a NULL list causing a segfault.
Jan 01 00:31:55 pcm connmand[470]: plugins/ofono.c:get_properties() /cinterionpxs8_0 path /cinterionpxs8_0 org.ofono.cdma.NetworkRegistration
Jan 01 00:31:55 pcm connmand[470]: plugins/ofono.c:cdma_cm_update_settings() /cinterionpxs8_0 Settings
Jan 01 00:31:55 pcm connmand[470]: Aborting (signal 11) [/usr/sbin/connmand]
The CDMA access technology does not require a context but connman needs to hold settings into a context.
By modifying the cdma_cm_update_settings() function, we got a better behavior.
First, by checking if a context exists to avoid the aborting situation.
In case of missing context, verifying if a pending call is still waiting a reply and wait until the pending call is completed if necessary.
Then, connman can send its request to ofono to get its ConnectionManager properties.
I can work on a patch but that would be interesting if you could give me your opinion about the situation, confirm me that this is an actual issue, and not a misinterpretation of the code.
Thanks,
Regards,
Nicolas
2 years, 9 months
None
by Daniel Wagner
Hi,
I pestered Marcel for a release a bit during ELC last week. He agreed to
do one. A soon it is done patches will will get applied again. Sorry for
the inconvenience.
Thanks,
Daniel
2 years, 9 months
Create statistics file and service folder strictly only after successful connect
by Jose Blanquicet
Hi,
We noticed that the service directory and the statistics file are
created even if the connection is not successful because for example
user entered an incorrect key.
I think that it is because before starting the connection process,
ConnMan tries to read the statistics file in
service.c:service_connect(). Doing so, the function
__connman_stats_service_register() will create the directory and the
file if they do not exists. I saw that commit 50fb779bc95 already
tried to solved this but it still happens.
To solve this, I propose to either do the same of 50fb779bc95 in
service_connect():
- if (__connman_stats_service_register(service) == 0) {
+ if (!service->new_service &&
+
__connman_stats_service_register(service) == 0) {
Or, maybe better, why ConnMan needs to access the file that early?
Shouldn't it be done when service goes into CONFIGURATION state or
READY state for new services? If it does not break any statistics
feature, I would suggest to completely remove that piece of code from
service_connect():
- if (__connman_stats_service_register(service) == 0) {
- __connman_stats_get(service, false,
- &service->stats.data);
- __connman_stats_get(service, true,
- &service->stats_roaming.data);
- }
What do yo think?
Regards,
Jose Blanquicet
2 years, 9 months