Nicco Kunzmann

Essays

OLSR debuggen

OLSR debuggen

Ich debugge gerade, warum olsr ncht auf meinem Router läuft. Das erste, was ich feststelle, wenn ich SmartGateway ausschalte:

root@254-150-heinrich-von-kleist:~# /etc/init.d/olsrd start
olsrd: /etc/init.d/olsrd: olsrd_write_loadplugin() Warning: Plugin library 'olsrd_txtinfo.so.0.1' not found, skipped
olsrd: /etc/init.d/olsrd: olsrd_write_loadplugin() Warning: Plugin library 'olsrd_watchdog.so.0.1' not found, skipped
olsrd: /etc/init.d/olsrd: startup-error: check via: '/usr/sbin/olsrd -f "/var/etc/olsrd.conf" -nofork'

ich bekomme die Möglichkeit, den “olsr log file” bzw. den Output von OLSR zu sehen, wenn ich es so starte:

/usr/sbin/olsrd -f "/var/etc/olsrd.conf" -nofork

Vorher habe ich es so gestartet:

/etc/init.d/olsrd start

Nach einer Weile verschwindet der Prozess.

Das Problem ist, dass eine Assertion failed:

/usr/sbin/olsrd -f "/var/etc/olsrd.conf" -nofork
[...]
Assertion failed: multi_gateway_mode() (src/gateway.c: doRoutesMultiGw: 2371)

Volles Log

Google nach “olsr source code”. Dann finde ich den Code, der das Problem veursacht:

assert(multi_gateway_mode());

Quelle

static INLINE bool multi_gateway_mode(void) {
  return (olsr_cnf->smart_gw_use_count > 1);
}

Quelle

struct olsrd_config {
[...]
  uint8_t smart_gw_use_count;
[...]
}

Quelle

olsr_cnf->smart_gw_use_count = $2->integer;

Quelle: Parser

Ich kann schlussfolgern, dass der Wert in der Konfiguration gesetzt wird.

Ich habe eine Issue geöffnet, da Assertions eigendlich nicht auftreten dürfen. Darin wird empfohlen, Version 0.9.6.1 von olsrd zu benutzen. Ich benutze 0.9.5. Dafür compile ich die Freifunkfirmware selbst. In firmware/lede/feeds/routing/olsrd/Makefile steht nach dem ersten anstoßen von make die olsrd configuration. Diese kann ich ändern, indem ich 0.9.5 durch 0.9.6.1 ersetze:

PKG_VERSION:=0.9.6.1
PKG_RELEASE=$(PKG_SOURCE_VERSION)

PKG_SOURCE_PROTO:=git
PKG_SOURCE_URL:=https://github.com/OLSR/olsrd.git
PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
PKG_SOURCE_VERSION:=v0.9.6.1
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz

Das gibt Compileprobleme, wenn ich es manuell mache. Deswegen wird der Feed geändert:

diff --git a/feeds.conf b/feeds.conf
index 5d641d8..dfbdf91 100644
--- a/feeds.conf
+++ b/feeds.conf
@@ -1,6 +1,6 @@
 src-git packages https://github.com/openwrt/packages.git^ed90827282851ad93294e370860320f1af428bb2
 src-git luci https://github.com/openwrt/luci.git^a100738163585ae1edc24d832ca9bef1f34beef0
-src-git routing https://github.com/openwrt-routing/packages.git^dd36dd47bbd75defcb3c517cafe7a19ee425f0af
+src-git routing https://github.com/openwrt-routing/packages.git^a881d5d4a6c4d0a5d9c515525eb83774516d038c
 src-git packages_berlin https://github.com/freifunk-berlin/firmware-packages.git^3186386056cf52ebea3c7298b0a57fa8eafc851e
 
 ##

Dieser enthält alle Pakete. OLSR Meshing geht. Das JSON-Plugin und die weboberfläche zeigen aber leider keinen Status an. Siehe Pull-Request.