[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