[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