[Olsr-dev] OLSRd V2 - [PATCH] [openwrt] add uci-fication and hotplug-script
Henning Rogge
(spam-protected)
Thu May 22 12:49:34 CEST 2014
Hi Basti,
I think thats a good start but we can do better with olsrd2... I see
two possible enhancements, one easy and one hard (both independent
from each other).
First, olsrd2 can reload its configuration during runtime, just send a
SIGHUB to it and it should reload the configuration (it also keeps the
command line arguments that modified the config). This capability is
not well tested, but I think it will be useful. SIGHUB does NOT make
olsrd2 to forget everything it learned, so it should be a clean way to
change the config.
Second, we could teach olsrd2 to read UCI config files directly... if
someone gives me a full description of the UCI config file format, I
could write a parser (maybe I can also take another look at libuci) so
we don't need the whole "temporary config".
What do you think?
Henning
On Thu, May 22, 2014 at 11:25 AM, Bastian Bittorf
<(spam-protected)> wrote:
> OLSRd V2 - [openwrt] add uci-fication and hotplug-script
>
> implementing a small subset for a working native-olsrd2 config-file.
> the file is created during startup into ramdisc and during hotplug-events
> we _restart_ the daemon if needed. this is generated on my end from
> the included uci-file:
>
> (spam-protected):~ cat /var/etc/olsrd2.conf
> [global]
> fork true
> failfast no
>
> [log]
> stderr true
> syslog true
> file /var/log/olsrd2.log
>
> [domain=0]
> table 234
>
> [telnet]
> port 2007
>
> [interface=lo] # loopback
> [interface=eth0.2] # wan
> [interface=eth0.1] # lan
> [interface=wlan0] # wlanadhoc
> [interface=wlan1] # wlanadhocRADIO1
>
> Signed-off-by: Bastian Bittorf <(spam-protected)>
> ---
> openwrt/olsrd2-git/Makefile | 10 +++--
> openwrt/olsrd2-git/files/olsrd2.conf | 13 ------
> openwrt/olsrd2-git/files/olsrd2.hotplug | 71 +++++++++++++++++++++++++++++++++
> openwrt/olsrd2-git/files/olsrd2.uci | 22 ++++++++++
> 4 files changed, 100 insertions(+), 16 deletions(-)
> delete mode 100644 openwrt/olsrd2-git/files/olsrd2.conf
> create mode 100755 openwrt/olsrd2-git/files/olsrd2.hotplug
> create mode 100644 openwrt/olsrd2-git/files/olsrd2.uci
>
> diff --git a/openwrt/olsrd2-git/Makefile b/openwrt/olsrd2-git/Makefile
> index 8be848f..05f9425 100644
> --- a/openwrt/olsrd2-git/Makefile
> +++ b/openwrt/olsrd2-git/Makefile
> @@ -77,6 +77,7 @@ TARGET_CFLAGS += -I$(STAGING_DIR)/usr/include
> define Package/olsrd2-git/install
> $(INSTALL_DIR) $(1)/etc
> $(INSTALL_DIR) $(1)/etc/init.d
> + $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
> $(INSTALL_DIR) $(1)/usr
> $(INSTALL_DIR) $(1)/usr/sbin
> $(INSTALL_BIN) \
> @@ -85,13 +86,16 @@ define Package/olsrd2-git/install
> $(INSTALL_BIN) \
> ./files/olsrd2.init \
> $(1)/etc/init.d/olsrd2
> + $(INSTALL_BIN) \
> + ./files/olsrd2.hotplug \
> + $(1)/etc/hotplug.d/iface/50-olsrd2
> $(INSTALL_DATA) \
> - ./files/olsrd2.conf \
> - $(1)/etc
> + ./files/olsrd2.uci \
> + $(1)/etc/config/olsrd2
> endef
>
> define Package/olsrd2-git/conffiles
> -/etc/olsrd2.conf
> +/etc/config/olsrd2
> endef
>
> #define Package/olsrd2-git-plugin-ff-ett/install
> diff --git a/openwrt/olsrd2-git/files/olsrd2.conf b/openwrt/olsrd2-git/files/olsrd2.conf
> deleted file mode 100644
> index a855b00..0000000
> --- a/openwrt/olsrd2-git/files/olsrd2.conf
> +++ /dev/null
> @@ -1,13 +0,0 @@
> -#[global]
> -# fork no
> -# failfast no
> -
> -[log]
> -# file /var/log/olsrd2.log
> - stderr true
> - syslog true
> -# info all
> -# debug all
> -#
> -
> -[interface=wlan0]
> diff --git a/openwrt/olsrd2-git/files/olsrd2.hotplug b/openwrt/olsrd2-git/files/olsrd2.hotplug
> new file mode 100755
> index 0000000..8ead809
> --- /dev/null
> +++ b/openwrt/olsrd2-git/files/olsrd2.hotplug
> @@ -0,0 +1,71 @@
> +#!/bin/sh
> +
> +olsrd2_log()
> +{
> + local prio="$1"
> + local message="$2"
> +
> + logger -t olsrd2_hotplug -p daemon.$prio "$message"
> +}
> +
> +olsrd2_list_configured_interfaces()
> +{
> + local i=0
> + local interface
> +
> + while interface="$( uci -q get (spam-protected)[$i].ifname )"; do {
> + case "$( uci -q get (spam-protected)[$i].ignore )" in
> + 1|on|true|enabled|yes)
> + # must be ignored
> + ;;
> + *)
> + echo "$interface" # e.g. 'lan wan wifi'
> + ;;
> + esac
> +
> + i=$(( $i + 1 ))
> + } done
> +}
> +
> +olsrd2_interface_already_in_config()
> +{
> + if grep ^"\[interface=${DEVICE}\]" '/var/etc/olsrd2.conf'; then
> + olsrd2_log debug "[OK] already_active: '$INTERFACE' => '$DEVICE'"
> + return 0
> + else
> + olsrd2_log info "[OK] ifup/adding: '$INTERFACE' => '$DEVICE'"
> + return 1
> + fi
> +}
> +
> +olsrd2_interface_needs_adding()
> +{
> + local interface
> +
> + # likely and cheap operation:
> + olsrd_interface_already_in_config && return 1
> +
> + for interface in $(olsrd2_list_configured_interfaces); do {
> + [ "$interface" = "$INTERFACE" ] && {
> + olsrd2_interface_already_in_config || return 0
> + }
> + } done
> +
> + olsrd2_log debug "[OK] interface '$INTERFACE' => '$DEVICE' not used for olsrd"
> + return 1
> +}
> +
> +case "$ACTION" in
> + ifup)
> + # only work after the first normal startup
> + # also: no need to test, if enabled
> + [ -e '/var/etc/olsrd2.conf' ] && {
> + # used global vars:
> + # INTERFACE = e.g. 'wlanadhocRADIO1' or 'cfg144d8f'
> + # DEVICE = e.g. 'wlan1-1'
> + olsrd2_interface_needs_adding && {
> + . /etc/rc.common /etc/init.d/olsrd2 restart
> + }
> + }
> + ;;
> +esac
> diff --git a/openwrt/olsrd2-git/files/olsrd2.uci b/openwrt/olsrd2-git/files/olsrd2.uci
> new file mode 100644
> index 0000000..cdd7cb5
> --- /dev/null
> +++ b/openwrt/olsrd2-git/files/olsrd2.uci
> @@ -0,0 +1,22 @@
> +config global
> + option 'fork' 'yes'
> + option 'failfast' 'no'
> + option 'table' '234'
> +
> +config log
> + option 'file' '/var/log/olsrd2.log'
> + option 'stderr' 'true'
> + option 'syslog' 'true'
> +# option 'info' 'all'
> +# option 'debug' 'all'
> +
> +config plugin
> + option 'name' 'telnet'
> + option 'port' '2007'
> +
> +config interface
> + option 'ifname' 'loopback'
> +# option 'ignore' '1'
> +
> +config interface
> + list 'ifname' 'wan lan wlanadhoc wlanadhocRADIO1'
> --
> 1.8.1.2
>
>
> --
> Olsr-dev mailing list
> (spam-protected)
> https://lists.olsr.org/mailman/listinfo/olsr-dev
More information about the Olsr-dev
mailing list