[Olsr-users] Discrepancy between ETX value and ping packet loss

Dan O'Keeffe (spam-protected)
Tue Mar 17 21:43:41 CET 2015


Hello,
I'm trying to use the OLSR ETX extensions to determine the path quality
to different destinations (so my application can send data to the
destination with the best path as the quality changes over time).
However the ETX values I'm seeing don't seem to correspond particularly
well to the packet loss I observe when I manually ping the different
destinations.

More specifically, I have a two node network with each node running
olsrd and one node pinging the other (using a ping payload size of 0
so that the actual ping is just a 28 byte header). At a certain distance
the ping packet loss goes to 40%, but the ETX I observe using the
txtinfo plugin is 1.000 (i.e. from the output of 'echo "/all" | nc
localhost 2006).

Does anyone have an idea as to why I'm not seeing any packet loss
affecting the ETX? Using tshark I can see the OLSR control
messages being sent and received. However it's hard to tell whether
any of the control messages are actually being dropped, and so
I'm not sure whether the issue is that the OLSR control messages just
aren't experiencing packet loss or I haven't configured the ETX
calculation properly. From what I understand the ETX calculation should
 be based on the number of hello messages sucessfully sent and received
over a sliding window, but perhaps there's more to the implementation?

The output of olsrd --version is:

*** olsr.org -  0.6.3-git_-hash_e334b612adcb7c22239a9dcafaf5b7ba  - ***
 Build date: 2013-03-28 03:47:37 on marid


I have made a few tweaks to the default config (see attached), but
I don't see that they should make a difference.


Finally, I should note that I'm running in an emulated environment
(using the CORE EMANE wireless network emulator). The only way I could
see that making a difference is that perhaps the same packet loss isn't
being applied to broadcast traffic as to normal traffic, but before I
check that on the CORE EMANE mailing list I'd just like to be sure there
isn't an obvious issue with my olsrd configuration.

Thanks for any help!
Dan
-------------- next part --------------
#
# olsr.org OLSR daemon config file
#
# Lines starting with a # are discarded
#
# This file was shipped with the debian olsrd package
#

# Debug level(0-9)
# If set to 0 the daemon runs in the background

DebugLevel	2

# the interface the mesh runs on is specified at run time using the -i flag

InterfaceDefaults
{
  # Olsrd can autodetect changes in NIC configurations (IP address
  # changes etc.).  This is enabled by default and the interval to
  # poll for changes on is defined by NicChgsPollInt.  This polling
  # can be disabled pr. NIC by setting AutoDetectChanges to no.

  #AutoDetectChanges            no

  # IPv4 broadcast address to use. The
  # one usefull example would be 255.255.255.255
  # If not defined the broadcastaddress
  # every card is configured with is used

  Ip4Broadcast		255.255.255.255

  # IPv6 address scope to use.
  # Must be 'site-local' or 'global'

  #Ip6AddrType		site-local

  # IPv6 multicast address to use when
  # using site-local addresses.
  # If not defined, ff05::15 is used

  #Ip6MulticastSite		ff05::11

  # IPv6 multicast address to use when
  # using global addresses
  # If not defined, ff0e::1 is used

  #Ip6MulticastGlobal	ff0e::1


  # Emission intervals.
  # If not defined, RFC proposed values will
  # be used in most cases.

  # Hello interval in seconds(float)
    HelloInterval		2.0

  # HELLO validity time
    #HelloValidityTime		600.0
    HelloValidityTime		10.0

  # TC interval in seconds(float)
    TcInterval			0.5

  # TC validity time
    #TcValidityTime		300.0
    TcValidityTime		30.0

  # MID interval in seconds(float)
    MidInterval			10.0

  # MID validity time
    #MidValidityTime		300.0
    MidValidityTime		30.0

  # HNA interval in seconds(float)
    HnaInterval			10.0

  # HNA validity time
    #HnaValidityTime		300.0
    HnaValidityTime		30.0

  # When multiple links exist between hosts
  # the weight of interface is used to determine
  # the link to use. Normally the weight is
  # automatically calculated by olsrd based
  # on the characteristics of the interface,
  # but here you can specify a fixed value.
  # Olsrd will choose links with the lowest value.

  #Weight 0


  # If a certain route should be preferred 
  # or ignored by the mesh, the Link Quality 
  # value of a node can be multiplied with a factor 
  # entered here. In the example the route 
  # using 192.168.0.1 would rather be ignored.
  # A multiplier of 0.5 will result in a small
  # (bad) LinkQuality value and a high (bad)
  # ETX value.

  #LinkQualityMult 192.168.0.1 0.5

  # This multiplier applies to all other nodes 
  # LinkQualityMult default 0.8
}

## these settings should work for funkfeuer, freifunk, etc.
# Fisheye mechanism for TC messages 0=off, 1=on
LinkQualityFishEye 1
LinkQualityAlgorithm "etx_ff"

## if using commotionwireless.net, comment the line above and uncomment these:
#LinkQualityFishEye 0
#LinkQualityAlgorithm "etx_ffeth"

# IP version to use (4 or 6)

IpVersion	4

# Clear the screen each time the internal state changes

ClearScreen     yes

# HNA IPv4 routes
# syntax: netaddr netmask
# Example Internet gateway:
# 0.0.0.0 0.0.0.0

Hna4
{
#   Internet gateway:
#   0.0.0.0      0.0.0.0
#   more entries can be added:
#   192.168.1.0  255.255.255.0
}

# HNA IPv6 routes
# syntax: netaddr prefix
# Example Internet gateway:
Hna6
{
#   Internet gateway:
#   ::              0
#   more entries can be added:
#   fec0:2200:106:: 48
}


# Should olsrd keep on running even if there are
# no interfaces available? This is a good idea
# for a PCMCIA/USB hotswap environment.
# "yes" OR "no"

AllowNoInt	yes

# TOS(type of service) value for
# the IP header of control traffic.
# If not set it will default to 16

#TosValue	16

# The fixed willingness to use(0-7)
# If not set willingness will be calculated
# dynamically based on battery/power status
# if such information is available

Willingness    	3

# Allow processes like the GUI front-end
# to connect to the daemon.

IpcConnect
{
     # Determines how many simultaneously
     # IPC connections that will be allowed
     # Setting this to 0 disables IPC

     MaxConnections  0

     # By default only 127.0.0.1 is allowed
     # to connect. Here allowed hosts can
     # be added

     Host            127.0.0.1
     #Host            10.0.0.5

     # You can also specify entire net-ranges 
     # that are allowed to connect. Multiple
     # entries are allowed

     #Net             192.168.1.0 255.255.255.0     
}

# Wether to use hysteresis or not
# Hysteresis adds more robustness to the
# link sensing but delays neighbor registration.
# Used by default. 'yes' or 'no'
# Do not use hysteresis with ETX!

UseHysteresis	no

# Hysteresis parameters
# Do not alter these unless you know 
# what you are doing!
# Set to auto by default. Allowed
# values are floating point values
# in the interval 0,1
# THR_LOW must always be lower than
# THR_HIGH.

#HystScaling	0.50
#HystThrHigh	0.80
#HystThrLow	0.30


# Link quality level
# 0 = do not use link quality
# 1 = use link quality for MPR selection
# 2 = use link quality for MPR selection and routing
# Defaults to 0

LinkQualityLevel	2

# Polling rate in seconds(float). 
# Default value 0.05 sec

Pollrate	0.1


# TC redundancy
# Specifies how much neighbor info should
# be sent in TC messages
# Possible values are:
# 0 - only send MPR selectors
# 1 - send MPR selectors and MPRs
# 2 - send all neighbors
#
# defaults to 0

TcRedundancy	2


#
# MPR coverage
# Specifies how many MPRs a node should
# try select to reach every 2 hop neighbor
#
# Can be set to any integer >0
#
# defaults to 1

MprCoverage	5


# Olsrd plugins to load
# This must be the absolute path to the file
# or the loader will use the following scheme:
# - Try the paths in the LD_LIBRARY_PATH 
#   environment variable.
# - The list of libraries cached in /etc/ld.so.cache
# - /lib, followed by /usr/lib

# Configuration examples for plugins:
# see /usr/share/doc/olsrd-plugins/ for some for documentation

# these are loaded from LD_LIBRARY_PATH
#LoadPlugin "olsrd_httpinfo.so.0.1"
#{
  # defaults to 1978
  #PlParam "Port" "8080"
  # if you dont set these, the default is to listen only on the loopback device
  #PlParam "Host"   "80.23.53.22"
  #PlParam "Net"    "10.0.0.0 255.0.0.0"
  #PlParam "Net" "0.0.0.0 0.0.0.0"
  #PlParam "Host"  "127.0.0.1"
#}

## for more info: http://olsr.org/?q=txtinfo_plugin
LoadPlugin "olsrd_txtinfo.so.0.1"
{
  PlParam     "port"   "2006"
  PlParam     "accept" "0.0.0.0"
}

## for more info: http://olsr.org/?q=jsoninfo_plugin
#LoadPlugin "olsrd_jsoninfo.so.0.0"
#{
#  PlParam     "port"   "9090"
#  PlParam     "accept" "0.0.0.0"
#}

# useful if your machine has an uplink
#LoadPlugin "olsrd_dyn_gw.so.0.4"
#{
  # Here parameters are set to be sent to the
  # plugin. Theese are on the form "key" "value".
  # Parameters ofcause, differs from plugin to plugin.
  # Consult the documentation of your plugin for details.

  # Example: dyn_gw params

  # how often to check for Internet connectivity
  # defaults to 5 secs
  #PlParam     "Interval"   "40"
    
  # if one or more IPv4 addresses are given, do a ping on these in
  # descending order to validate that there is not only an entry in
  # routing table, but also a real internet connection. If any of
  # these addresses could be pinged successfully, the test was
  # succesful, i.e. if the ping on the 1st address was successful,the
  # 2nd won't be pinged
  #PlParam     "Ping"       "141.1.1.1"
  #PlParam     "Ping"       "194.25.2.129"
#}

#LoadPlugin "olsrd_nameservice.so.0.2"
#{
  #PlParam "name" "xxx"
  #PlParam "a.b.c.d" "xxx-eth"
  #PlParam "a.b.c.e" "xxx-bbb"
  #PlParam "a.b.c.f" "xxx-olsr"
  #PlParam "suffix" ".olsr"
#}

#LoadPlugin "olsrd_dot_draw.so.0.3"
#{
  # accept connection from IP:
  # default 127.0.0.1 (localhost)  
  #PlParam     "accept" "192.168.0.5"
  #PlParam     "port" "2004"
#}




More information about the Olsr-users mailing list