Re: Using mISDN+CAPI with asterisk on RasperryPI

Jan Neuhäußer <[email protected]> Wed, 27 Sep 2017 22:47:47 +0200
Newsgroups gmane.linux.isdn.i4l.user
Message-ID <1548640.ettmDiq3ig@tobi15>
Dears,

I recompiled chan_capi and got a step further, but only a little:


Am Donnerstag, 21. September 2017, 09:48:09 CEST schrieb Thomas Jarosch:
> Hi Jan,
> 
> On Wednesday, 20 September 2017 22:57:37 CEST Jan Neuhäußer wrote:
 
> Your analysis regarding the CAPI library is also correct,
> you need the one supplied by isdn4-utils.
> 
> When I run "strace capiinfo", it first checks for /dev/capi20
> and then opens the mISDNuserd socket in /var/run/mISDNcapid/sock:
> 
> open("/dev/capi20", O_RDWR)             = 4
> ioctl(4, CAPI_INSTALLED, 0)             = -1 ENXIO (No such device or address)
> socket(PF_FILE, SOCK_SEQPACKET, 0)      = 5
> connect(5, {sa_family=AF_FILE, path="/var/run/mISDNcapid/sock"}, 110) = 0
> 
> Cheers,
> Thomas

Now "module load chan_capi.so" looks at two locations within the dev-tree and then tries to connect to the mISDNcapid socket, but gets the response "permission denied". Snippets from strace:

open("/dev/capi20", O_RDWR) = -1 ENOENT (No such file or directory)
open("/dev/isdn/capi20", O_RDWR) = -1 ENOENT (No such file or directory)

socket(PF_LOCAL, SOCK_SEQPACKET, 0) = 19
connect(19, {sa_family=AF_LOCAL, sun_path="/run/mISDNcapid/sock"}, 110) = -1 EACCES (Permission denied)
close(19)                   = 0

(/var/run or /run makes no difference, one is a softlink to the other, (/var/run -> /run) )

The rights on the socket were as follows:

root@raspbx:/run/mISDNcapid# ls -l
insgesamt 0
srw-rw-rw- 1 root dialout 0 Sep 26 21:34 sock

Still asterisk is member of group dialout.

The strace of capiinfo looks similar, only it uses fd 4:

socket(PF_LOCAL, SOCK_SEQPACKET, 0) = 4
connect(4, {sa_family=AF_LOCAL, sun_path="/run/mISDNcapid/sock"}, 110) = 0


Any ideas?
@Thomas: what are the permissions of the socket on your system, and owner/group?



You may find the full strace for pid 3371 below.

Cheers,
Jan


[pid  3371] poll([{fd=24, events=POLLIN}, {fd=25, events=POLLIN}], 2, -1 <unfinished ...>
[pid  3371] <... poll resumed> )        = 1 ([{fd=24, revents=POLLIN}])
[pid  3371] read(24, "module load chan_capi.so\0", 512) = 25
[pid  3371] getsockopt(24, SOL_SOCKET, SO_PEERCRED, {pid=3370, uid=0, gid=0}, [12]) = 0
[pid  3371] open("/usr/lib/asterisk/modules/chan_capi.so", O_RDONLY|O_CLOEXEC) = 19
[pid  3371] read(19, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\250i\0\0004\0\0\0"..., 512) = 512
[pid  3371] lseek(19, 897424, SEEK_SET) = 897424
[pid  3371] read(19, "\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"..., 1440) = 1440
[pid  3371] lseek(19, 298479, SEEK_SET) = 298479
[pid  3371] read(19, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47
[pid  3371] fstat64(19, {st_mode=S_IFREG|0755, st_size=898864, ...}) = 0
[pid  3371] mmap2(NULL, 365220, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 19, 0) = 0x7429b000
[pid  3371] mprotect(0x742e2000, 65536, PROT_NONE) = 0
[pid  3371] mmap2(0x742f2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 19, 0x47000) = 0x742f2000
[pid  3371] mmap2(0x742f4000, 676, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x742f4000
[pid  3371] close(19)                   = 0
[pid  3371] munmap(0x7429b000, 365220)  = 0
[pid  3371] open("/usr/lib/asterisk/modules/chan_capi.so", O_RDONLY|O_CLOEXEC) = 19
[pid  3371] read(19, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0(\0\1\0\0\0\250i\0\0004\0\0\0"..., 512) = 512
[pid  3371] lseek(19, 897424, SEEK_SET) = 897424
[pid  3371] read(19, "\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"..., 1440) = 1440
[pid  3371] lseek(19, 298479, SEEK_SET) = 298479
[pid  3371] read(19, "A.\0\0\0aeabi\0\1$\0\0\0\0056\0\6\6\10\1\t\1\n\2\22\4\24\1\25"..., 47) = 47
[pid  3371] fstat64(19, {st_mode=S_IFREG|0755, st_size=898864, ...}) = 0
[pid  3371] mmap2(NULL, 365220, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 19, 0) = 0x7429b000
[pid  3371] mprotect(0x742e2000, 65536, PROT_NONE) = 0
[pid  3371] mmap2(0x742f2000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 19, 0x47000) = 0x742f2000
[pid  3371] mmap2(0x742f4000, 676, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x742f4000
[pid  3371] close(19)                   = 0
[pid  3371] stat64("/etc/asterisk/capi.conf", {st_mode=S_IFREG|0664, st_size=972, ...}) = 0
[pid  3371] open("/etc/asterisk/capi.conf", O_RDONLY|O_LARGEFILE) = 19
[pid  3371] gettimeofday({1506458386, 231984}, NULL) = 0
[pid  3371] gettid()                    = 3371
[pid  3371] futex(0x25daec, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x25dae8, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
[pid  3371] futex(0x2457d8, FUTEX_WAKE_PRIVATE, 1) = 1
[pid  3371] fstat64(19,  <unfinished ...>
[pid  3371] <... fstat64 resumed> {st_mode=S_IFREG|0664, st_size=972, ...}) = 0
[pid  3371] mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0 <unfinished ...>
[pid  3371] <... mmap2 resumed> )       = 0x76f89000
[pid  3371] read(19,  <unfinished ...>
[pid  3371] <... read resumed> ";\n; CAPI config\n;\n;\n\n; general s"..., 4096) = 972
[pid  3371] read(19,  <unfinished ...>
[pid  3371] <... read resumed> "", 4096) = 0
[pid  3371] close(19 <unfinished ...>
[pid  3371] <... close resumed> )       = 0
[pid  3371] munmap(0x76f89000, 4096 <unfinished ...>
[pid  3371] <... munmap resumed> )      = 0
[pid  3371] write(2, "            capi20.c: 164       "..., 51) = 51
[pid  3371] write(2, "Already initialized\n", 20) = 20
[pid  3371] open("/etc/capi20.conf", O_RDONLY) = 19
[pid  3371] fstat64(19, {st_mode=S_IFREG|0644, st_size=773, ...}) = 0
[pid  3371] mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x76f89000
[pid  3371] read(19, "# This is a example config file "..., 4096) = 773
[pid  3371] read(19, "", 4096)          = 0
[pid  3371] close(19)                   = 0
[pid  3371] munmap(0x76f89000, 4096)    = 0
[pid  3371] write(2, "            capi20.c: 164       "..., 51) = 51
[pid  3371] write(2, "[capi20_isinstalled]: standard l"..., 55) = 55
[pid  3371] open("/dev/capi20", O_RDWR) = -1 ENOENT (No such file or directory)
[pid  3371] open("/dev/isdn/capi20", O_RDWR) = -1 ENOENT (No such file or directory)
[pid  3371] write(2, "            capi20.c: 164       "..., 51) = 51
[pid  3371] write(2, "[capi20_isinstalled]: capi_fd: -"..., 34) = 34
[pid  3371] write(2, "            capi20.c: 164       "..., 51) = 51
[pid  3371] write(2, "[capi20_isinstalled]: standard l"..., 52) = 52
[pid  3371] write(2, "            capi20.c: 164       "..., 51) = 51
[pid  3371] write(2, "[capi20_isinstalled]: other loop"..., 52) = 52
[pid  3371] write(2, "            capi20.c: 164       "..., 51) = 51
[pid  3371] write(2, "[capi20_isinstalled]: other loop"..., 49) = 49
[pid  3371] socket(PF_LOCAL, SOCK_SEQPACKET, 0) = 19
[pid  3371] connect(19, {sa_family=AF_LOCAL, sun_path="/run/mISDNcapid/sock"}, 110) = -1 EACCES (Permission denied)
[pid  3371] close(19)                   = 0
[pid  3371] write(2, "            capi20.c: 164       "..., 51) = 51
[pid  3371] write(2, "[capi20_isinstalled]: capi_fd: -"..., 34) = 34
[pid  3371] write(2, "            capi20.c: 164       "..., 51) = 51
[pid  3371] write(2, "[capi20_isinstalled]: CapiRegNot"..., 42) = 42
[pid  3371] gettimeofday({1506458386, 237801}, NULL) = 0
[pid  3371] gettid()                    = 3371
[pid  3371] futex(0x25daec, FUTEX_WAKE_OP_PRIVATE, 1, 1, 0x25dae8, {FUTEX_OP_SET, 0, FUTEX_OP_CMP_GT, 1}) = 1
[pid  3371] futex(0x2457d8, FUTEX_WAKE_PRIVATE, 1 <unfinished ...>
[pid  3371] <... futex resumed> )       = 0
[pid  3371] gettimeofday( <unfinished ...>
[pid  3371] <... gettimeofday resumed> {1506458386, 238431}, NULL) = 0
[pid  3371] gettid( <unfinished ...>
[pid  3371] <... gettid resumed> )      = 3371
[pid  3371] gettimeofday( <unfinished ...>
[pid  3371] <... gettimeofday resumed> {1506458386, 238892}, NULL) = 0
[pid  3371] gettimeofday( <unfinished ...>
[pid  3371] <... gettimeofday resumed> {1506458386, 239087}, NULL) = 0
[pid  3371] poll([{fd=24, events=POLLOUT}], 1, 100 <unfinished ...>
[pid  3371] <... poll resumed> )        = 1 ([{fd=24, revents=POLLOUT}])
[pid  3371] write(24, "Loaded chan_capi.so\n", 20 <unfinished ...>
[pid  3371] <... write resumed> )       = 20
[pid  3371] gettimeofday( <unfinished ...>
[pid  3371] <... gettimeofday resumed> {1506458386, 239988}, NULL) = 0
[pid  3371] poll([{fd=24, events=POLLIN}, {fd=25, events=POLLIN}], 2, -1 <unfinished ...>
[pid  3371] <... poll resumed> )        = 1 ([{fd=25, revents=POLLIN}])
[pid  3371] read(25,  <unfinished ...>
[pid  3371] <... read resumed> "\375Parsing '/etc/asterisk/capi.con"..., 512) = 218
[pid  3371] getsockopt(25, SOL_SOCKET, SO_PEERCRED, {pid=1835, uid=1000, gid=1000}, [12]) = 0
[pid  3371] write(24, "\375Parsing '/etc/asterisk/capi.con"..., 218) = 218
[pid  3371] poll([{fd=24, events=POLLIN}, {fd=25, events=POLLIN}], 2, -1 <unfinished ...>