[Babel-users] Investigating a babeld crash on OpenWRT

Baptiste Jonglez baptiste.jonglez at ens-lyon.fr
Sun Jul 13 05:09:17 UTC 2014


Hi,

babeld 1.5.0-1 just crashed on one of my OpenWRT router, running AA.  The
symptoms are: babeld is not running anymore, but /var/run/babeld.pid still
exists.  babeld.log has nothing more than the usual:

  netlink_read: recvmsg(): No buffer space available

which happens just about all the time.  I don't see any log about a
segfault in dmesg, but maybe OpenWRT doesn't display that.

Attached is the OpenWRT configuration file for babeld.  Babel runs on two
VPN interfaces (one GRE, one Tinc in tap mode).  Tinc logs don't seem to
indicate anything strange happening before the crash.

Note that Quagga is also running on this router, doing BGP and installing
routes into the kernel.  It's definitely not pretty, but Quagga and babeld
generally deal with different sets of routes, and babeld is quite friendly
when some routes already exist in the kernel.

babeld had been running without interruption for 4 or 5 days, and I'm
using babeld 1.5.0 without trouble since a few weeks.


Could this be a race condition when manipulating kernel routes?  How can I
debug things if this happens again?  I'd love to run babeld with "-d 2",
but there would not be enough space to store all these logs.


Thanks,
Baptiste
-------------- next part --------------
package babeld

config general
        # option 'multicast_address' 'ff02:0:0:0:0:0:1:6'
        # option 'port' '6696'
        # option 'state_file' '/var/lib/babel-state'
        # option 'hello_interval' '4'
        # option 'wired_hello_interval' '20'
        # option 'diversity' '0,128'
        # option 'smoothing_half_time' '4'
        # option 'kernel_priority' '0'
        # Do not use this option unless you know what you are doing, as it can
        # cause persistent route flapping.
        ## option 'duplication_priority' '0'
        # option 'carrier_sense' 'false'
        # option 'assume_wireless' 'false'
        # option 'no_split_horizon' 'false'
        # option 'debug' '0'
        # Listen for connections from a front-end, e.g. on port 33123.
        option 'local_server' '33123'
        # option 'random_router_id' 'false'
        # Keep unfeasible routes
        ## option 'keep_unfeasible' 'false'
        # Use the given kernel routing table for routes inserted by babeld.
        ## option 'export_table' '0'
        # Export routes from the given kernel routing tables.
        ## list 'import_table' '0'
        ## list 'import_table' '42'
        # The configuration file is not necessary since you can do everything
        # from this file.
        # option 'conf_file' '/etc/babeld.conf'
        # option 'log_file' '/var/log/babeld.log'

# You can use aliases (like lan, wlan) or real names (like eth0.0).
# If you use an alias, it must be already defined when babeld starts.
# Otherwise, the name is taken literally and the interface can be
# brought up later (useful for tunnels for instance).
config interface wlan
        # Remove this line to enable babeld on this interface
        option 'ignore' 'true'
        # option 'wired' 'auto'
        # option 'link_quality' 'auto'
        # option 'split_horizon' 'auto'
        # The default is 96 for wired interfaces, and 256 for wireless ones
        ## option 'rxcost' '256'
        # The default is specified with the -h and -H command-line flags.
        ## option 'hello_interval' '4'
        # This can be set to a fairly large  value,  unless significant
        # packet loss is expected.  The default is four times the hello
        # interval.
        ## option 'update_interval' '16'

#config interface lan
#       option 'wired' 'true'
#       option 'rxcost' 5

config interface tinc
        option max_rtt_penalty 250
        option rtt_max 500
        option split_horizon false

config interface dn42mejis
        option 'wired' 'true'
        option 'enable_timestamps' 'true'
        #option 'max_rtt_penalty' '60'
        option 'rxcost' '45'

#config interface dn42archminux
#       option 'wired' 'true'
#       option 'rxcost' '85'

# A filter consists in a type ('in', 'out' or 'redistribute'), an action
# ('allow', 'deny' or 'metric xxx') and a set of selectors ('ip', 'eq',
# etc.).  See /etc/babeld.conf for more details.
# Here is a sample filter wich redistributes the default route if its
# protocol number is "boot", e.g. when it installed by dhcp.  It is
# disabled by default.
config filter
        option 'type' 'redistribute'
        option 'ip' '172.23.184.0/24'
        # Proto kernel, see /etc/iproute2/rt_protos
        option 'proto' '2'
        option 'le' '29'
        option 'action' 'allow'

config filter
        option 'type' 'redistribute'
        option 'ip' '10.0.0.0/8'
        # New: announce zebra routes.
        #option 'proto' '11'
        #option 'ge' '8'
        option 'eq' '8'
        #option 'action' 'allow'
        option 'action' 'metric 255'

config filter
        option 'type' 'redistribute'
        option 'ip' '172.22.0.0/15'
        #option 'proto' '11'
        #option 'ge' '15'
        option 'eq' '15'
        #option 'action' 'allow'
        option 'action' 'metric 128'

config filter
        option 'type' 'redistribute'
        option 'ip' '172.31.0.0/16'
        #option 'proto' '11'
        #option 'ge' '16'
        option 'eq' '16'
        #option 'action' 'allow'
        option 'action' 'metric 255'

config filter
        option 'type' 'redistribute'
        option 'local' 'true'
        option 'action' 'deny'

config filter
        option 'type' 'in'
        option 'ip' '172.22.0.0/15'
        option 'action' 'allow'

config filter
        option 'type' 'in'
        option 'action' 'deny'
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: not available
URL: <http://lists.alioth.debian.org/pipermail/babel-users/attachments/20140713/8676c812/attachment-0001.sig>


More information about the Babel-users mailing list