[Olsr-users] Problems with OLSR/bmf-plugin and latest OpenWRT trunk

Björn Lichtblau (spam-protected)
Wed Sep 10 13:44:01 CEST 2008


Hi,
 
sorry i have to correct myself... after playing a bit more i learned 
that when running olsrd with bmf-1.5.3 in debug mode bmf does not forward
because of the problem discussed here:
http://lists.olsr.org/pipermail/olsr-dev/2008-July/002327.html
I had not really tested all combinations, bmf-1.6.1 works for me with 
-nofork and i think even 1.5.2 would have worked with -nofork.
 
I also found the cause why the bmf-plugin blocks olsr without -nofork, 
the pthread_create(..)-call in InitBmf(..) never returns so
olsr can't finish the plugin initializations: It is pthread_create(..) 
after daemon(..) that is not working with my uClibc-0.9.29,
this seems to be known for some time 
(http://busybox.net/lists/uclibc/2007-June/018048.html, 
http://busybox.net/lists/uclibc/2007-June/018072.html).
 From the second link and its followups it sounds like pthread_create is 
not a safe thing after a daemon()/fork(), but i don't get it if this is 
right or just
wrong in uClibc-0.9.29...
 
So sorry again for you inconvenience,
Regards Björn

> Hi all,
>  
> i had olsrd (v0.5.5) with the bmf plugin (v1.5.2) successfully running 
> on OpenWRT Kamikaze 7.09 (Kernel 2.6.22).
>  
> Lately i updated several times to the latest trunk version of OpenWRT 
> (Kernel is now 2.6.25.16) and olsrd together with
> the bmf-plugin stopped working with this strange behaviour.
>  
> - Running olsr without the bmf plugin is fine, everything works.
> - Running olsr with bmf plugin blocks olsr. That means olsr sets no 
> routes, it does not send any packets, and even
>   dotdraw and textinfo plugin are not reachable. olsr seems to be 
> hanging somewhere in the bmf plugin initialization,
>   see strace at the end of my mail.
> - Running olsr with bmf plugin and starting it in debug mode (-d 1 or 
> higher) or with the -nofork option works as if
>   olsr was started without bmf plugin (so routes are set ok), but the 
> bmf plugin does not really work
>   (packets sent to multicast address 224.0.0.1 are only received by the 
> host itself, no other host).
>   In that strace i see that the bmf plugin also seems to be polling 
> something endlessly, however if olsr is started with -nofork
>   that does not to block everything else, like in the above case without 
> -nofork.
>  
> I tried following versions, all with the same observed behaviour:
> - olsrd 0.5.5 with bmf 1.5.2
> - olsrd 0.5.6-rc7 with bmf 1.5.3
> - olsrd 0.5.6-rc7 with bmf 1.6.1
> - olsrd 0.5.6 with bmf 1.5.3
> - olsrd 0.5.6 with bmf 1.6.1
>  
>  
> So the problems is very likely not an OLSR/bmf problem but something 
> with my latest openwrt/linux updates, but i'd like to ask here first if 
> anyone
> - has olsr with bmf running on that kernel or a current OpenWRT trunk 
> version?
> - has similar problems?
> - has any hint on what may be wrong, what may have changed or what i 
> missed (on any side, olsr, bmf, or kernel/latest openwrt)?
> - knows what i should try further?
>  
> Here is the strace of running olsrd with bmf plugin, the poll(fd=9..) 
> stuff in the end never stops and nothing else happens:
> ============== strace -f olsrd -f /etc/olsrd-bmf.conf ===================
> (spam-protected):/etc# <mailto:(spam-protected):/etc#> strace -f olsrd -f 
> /etc/olsrd-bmf.conf
> execve("/usr/sbin/olsrd", ["olsrd", "-f", "/etc/olsrd-bmf.conf"], [/* 8 
> vars */]) = 0
> ...
> write(1, "---------- LOADING LIBRARY ", 27) = 27
> write(1, "olsrd_bmf.so.1.5.3", 18)      = 18
> write(1, " ----------\n", 12)           = 12
> open("/trunk/build_dir/i386/olsrd-0.5.6//ipkg-install/usr/lib/olsrd_bmf.so.1.5.3", 
> O_RDONLY) = -1 ENOENT (No such file or directory)
> open("/lib/olsrd_bmf.so.1.5.3", O_RDONLY) = -1 ENOENT (No such file or 
> directory)
> open("/lib/olsrd_bmf.so.1.5.3", O_RDONLY) = -1 ENOENT (No such file or 
> directory)
> open("/usr/lib/olsrd_bmf.so.1.5.3", O_RDONLY) = 7
> fstat(7, {st_mode=S_IFREG|0755, st_size=33125, ...}) = 0
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 
> 0) = 0xb7f0b000
> read(7, 
> "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200$\0\0004\0\0\0"..., 
> 4096) = 4096
> mmap2(NULL, 53248, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7e95000
> mmap2(0xb7e95000, 32068, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_FIXED, 7, 
> 0) = 0xb7e95000
> mmap2(0xb7e9d000, 357, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED, 7, 
> 0x8) = 0xb7e9d000
> mmap2(0xb7e9e000, 14432, PROT_READ|PROT_WRITE, 
> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0xb7e9e000
> close(7)                                = 0
> mprotect(0xb7e95000, 32068, PROT_READ|PROT_WRITE|PROT_EXEC) = 0
> munmap(0xb7f0b000, 4096)                = 0
> open("/lib/libpthread.so.0", O_RDONLY)  = 7
> fstat(7, {st_mode=S_IFREG|0644, st_size=58930, ...}) = 0
> close(7)                                = 0
> open("/lib/libgcc_s.so.1", O_RDONLY)    = 7
> fstat(7, {st_mode=S_IFREG|0644, st_size=31974, ...}) = 0
> close(7)                                = 0
> open("/lib/libc.so.0", O_RDONLY)        = 7
> fstat(7, {st_mode=S_IFREG|0644, st_size=275645, ...}) = 0
> close(7)                                = 0
> open("/lib/libc.so.0", O_RDONLY)        = 7
> fstat(7, {st_mode=S_IFREG|0644, st_size=275645, ...}) = 0
> close(7)                                = 0
> open("/lib/ld-uClibc.so.0", O_RDONLY)   = 7
> fstat(7, {st_mode=S_IFREG|0755, st_size=16390, ...}) = 0
> close(7)                                = 0
> open("/lib/libc.so.0", O_RDONLY)        = 7
> fstat(7, {st_mode=S_IFREG|0644, st_size=275645, ...}) = 0
> close(7)                                = 0
> open("/lib/ld-uClibc.so.0", O_RDONLY)   = 7
> fstat(7, {st_mode=S_IFREG|0755, st_size=16390, ...}) = 0
> close(7)                                = 0
> write(1, "OLSRD Basic Multicast Forwarding"..., 169) = 169
> write(1, "\n", 1)                       = 1
> write(1, "Checking plugin interface versio"..., 35) = 35
> write(1, " ", 1)                        = 1
> write(1, "5", 1)                        = 1
> write(1, " - OK\n", 6)                  = 6
> socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 7
> ioctl(7, SIOCGIFCONF, {128, {{"lo", {AF_INET, inet_addr("127.0.0.1")}}, 
> {"eth0", {AF_INET, inet_addr("192.168.4.188")}}, {"ath1", {AF_INET, 
> inet_addr("10.12.133.213")}}, {"ath2", {AF_INET, inet_addr("
> 192.168.100.1")}}}}) = 0
> close(7)                                = 0
> socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 7
> setsockopt(7, SOL_SOCKET, SO_BROADCAST, [1], 4) = 0
> setsockopt(7, SOL_SOCKET, SO_BINDTODEVICE, "ath1\0", 5) = 0
> bind(7, {sa_family=AF_INET, sin_port=htons(50698), 
> sin_addr=inet_addr("0.0.0.0")}, 16) = 0
> fcntl(7, F_GETFL)                       = 0x2 (flags O_RDWR)
> fcntl(7, F_SETFL, O_RDWR)               = 0
> ioctl(7, SIOCGIFHWADDR, {ifr_name="ath1", ifr_hwaddr=00:0c:42:0c:85:d5}) = 0
> open("/dev/net/tun", O_RDWR|O_NONBLOCK) = 8
> ioctl(8, TUNSETIFF, 0xbf8106f4)         = 0
> socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 9
> ioctl(9, SIOCSIFADDR, 0xbf8106f4)       = 0
> ioctl(9, SIOCSIFNETMASK, 0xbf8106f4)    = 0
> ioctl(9, SIOCSIFBRDADDR, 0xbf8106f4)    = 0
> ioctl(9, SIOCGIFFLAGS, {ifr_name="bmf0", 
> ifr_flags=IFF_POINTOPOINT|IFF_NOARP|IFF_MULTICAST}) = 0
> ioctl(9, SIOCSIFFLAGS, 0xbf8106f4)      = 0
> ioctl(9, SIOCGIFFLAGS, {ifr_name="bmf0", 
> ifr_flags=IFF_UP|IFF_POINTOPOINT|IFF_RUNNING|IFF_NOARP|IFF_MULTICAST}) = 0
> ioctl(9, SIOCSIFFLAGS, 0xbf8106f4)      = 0
> ioctl(8, TUNSETPERSIST, 0xbf8106f4)     = 0
> close(9)                                = 0
> brk(0x8472000)                          = 0x8472000
> pipe([9, 10])                           = 0
> clone(Process 1657 attached
> child_stack=0x8471374, 
> flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND) = 1657
> [pid  1657] rt_sigprocmask(SIG_SETMASK, ~[TRAP RT_1], NULL, 8) = 0
> [pid  1657] read(9,  <unfinished ...>
> [pid  1654] write(10, 
> "\0\0\0\0\5\0\0\0\204\6\201\277\340\201\360\267\f\6\201\277b\372\355\267\230c\356\267\364?\360\267"..., 
> 148) = 148
> [pid  1657] <... read resumed> 
> "\0\0\0\0\5\0\0\0\204\6\201\277\340\201\360\267\f\6\201\277b\372\355\267\230c\356\267\364?\360\267"..., 
> 148) = 148
> [pid  1654] rt_sigprocmask(SIG_SETMASK, NULL,  <unfinished ...>
> [pid  1657] poll( <unfinished ...>
> [pid  1654] <... rt_sigprocmask resumed> [RTMIN], 8) = 0
> [pid  1654] write(10, 
> "\340\201\360\267\0\0\0\0\0\0\0\0`\201\351\267\0\0\0\0\0\0\0\200\0\0\0\0\274\6\201\277"..., 
> 148) = 148
> [pid  1657] <... poll resumed> [{fd=9, events=POLLIN, revents=POLLIN}], 
> 1, 2000) = 1
> [pid  1654] rt_sigprocmask(SIG_SETMASK, NULL, [RTMIN], 8) = 0
> [pid  1654] rt_sigsuspend([] <unfinished ...>
> [pid  1657] getppid()                   = 1654
> [pid  1657] read(9, 
> "\340\201\360\267\0\0\0\0\0\0\0\0`\201\351\267\0\0\0\0\0\0\0\200\0\0\0\0\274\6\201\277"..., 
> 148) = 148
> [pid  1657] old_mmap(0xbf1fc000, 16384, PROT_READ|PROT_WRITE|PROT_EXEC, 
> MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS|MAP_GROWSDOWN, -1, 0) = 0xbf1fc000
> [pid  1657] clone(Process 1659 attached
> child_stack=0xbf1ffe04, 
> flags=CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|SIGRT_1) = 1659
> [pid  1659] getpid()                    = 1659
> [pid  1659] rt_sigprocmask(SIG_SETMASK, [RTMIN], NULL, 8) = 0
> [pid  1659] rt_sigprocmask(SIG_BLOCK, ~[ALRM RT_1 RT_2], NULL, 8) = 0
> [pid  1657] kill(1651, SIGRTMIN <unfinished ...>
> [pid  1659] rt_sigaction(SIGALRM, {0xb7e97650, [ALRM], 
> SA_RESTORER|SA_RESTART, 0xb7eac998},  <unfinished ...>
> [pid  1657] <... kill resumed> )        = -1 ESRCH (No such process)
> [pid  1659] <... rt_sigaction resumed> {SIG_DFL}, 8) = 0
> [pid  1657] poll( <unfinished ...>
> [pid  1659] select(9, [7 8], NULL, NULL, NULL <unfinished ...>
> [pid  1657] <... poll resumed> [{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll([{fd=9, events=POLLIN}], 1, 2000) = 0
> [pid  1657] getppid()                   = 1654
> [pid  1657] poll(^C <unfinished ...>
> ==========================================================================
>
> Regards, Björn
>
>   





More information about the Olsr-users mailing list