<commit_before>---
layout: post
title: OLSR debuggen
language: de
---


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][issue]

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

```
assert(multi_gateway_mode());
```
[Quelle](https://github.com/OLSR/olsrd/blob/master/src/gateway.c#L2380)

```
static INLINE bool multi_gateway_mode(void) {
  return (olsr_cnf->smart_gw_use_count > 1);
}
```
[Quelle](https://github.com/OLSR/olsrd/blob/9055710306714b9a363b89c20b7451c74dbd46ce/src/gateway.h#L67)

```
struct olsrd_config {
[...]
  uint8_t smart_gw_use_count;
[...]
}
```
[Quelle](https://github.com/OLSR/olsrd/blob/9055710306714b9a363b89c20b7451c74dbd46ce/src/olsr_cfg.h#L329)

```
olsr_cnf->smart_gw_use_count = $2->integer;
```
[Quelle: Parser](https://github.com/OLSR/olsrd/blob/9055710306714b9a363b89c20b7451c74dbd46ce/src/cfgparser/oparse.y#L1360)

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

Ich habe eine [Issue geöffnet][issue], da Assertions eigendlich nicht auftreten dürfen.
Darin wird empfohlen, [Version 0.9.6.1](https://github.com/OLSR/olsrd/tree/v0.9.6.1) von olsrd zu benutzen.
Ich benutze 0.9.5.
Dafür compile ich die Freifunkfirmware selbst.
In [firmware](https://github.com/freifunk-berlin/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
```





[issue]: https://github.com/OLSR/olsrd/issues/21<commit_msg>pull-request beschrieben<commit_after>---
layout: post
title: OLSR debuggen
language: de
---


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][issue]

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

```
assert(multi_gateway_mode());
```
[Quelle](https://github.com/OLSR/olsrd/blob/master/src/gateway.c#L2380)

```
static INLINE bool multi_gateway_mode(void) {
  return (olsr_cnf->smart_gw_use_count > 1);
}
```
[Quelle](https://github.com/OLSR/olsrd/blob/9055710306714b9a363b89c20b7451c74dbd46ce/src/gateway.h#L67)

```
struct olsrd_config {
[...]
  uint8_t smart_gw_use_count;
[...]
}
```
[Quelle](https://github.com/OLSR/olsrd/blob/9055710306714b9a363b89c20b7451c74dbd46ce/src/olsr_cfg.h#L329)

```
olsr_cnf->smart_gw_use_count = $2->integer;
```
[Quelle: Parser](https://github.com/OLSR/olsrd/blob/9055710306714b9a363b89c20b7451c74dbd46ce/src/cfgparser/oparse.y#L1360)

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

Ich habe eine [Issue geöffnet][issue], da Assertions eigendlich nicht auftreten dürfen.
Darin wird empfohlen, [Version 0.9.6.1](https://github.com/OLSR/olsrd/tree/v0.9.6.1) von olsrd zu benutzen.
Ich benutze 0.9.5.
Dafür compile ich die Freifunkfirmware selbst.
In [firmware](https://github.com/freifunk-berlin/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][pull].


[issue]: https://github.com/OLSR/olsrd/issues/21
[pull]: https://github.com/freifunk-berlin/firmware/pull/430
{'fraction_non_alphanumeric': 0.14479987637150363, 'fraction_numerical': 0.06660485241848246, 'mean_word_length': 5.076995305164319, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 11, 'https://': 22, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 10, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4418083', 'n_tokens_mistral': 2998, 'n_tokens_neox': 2717, 'n_words': 501}