Changeset 29134


Ignore:
Timestamp:
2011-11-14T22:27:40+01:00 (4 years ago)
Author:
zioproto
Message:

[packages] olsrd: Manuel Munz freifunk@… modified init file of olsrd with improvements for 6and4 operation and also for setup of smartgw

File:
1 edited

Legend:

Unmodified
Added
Removed
  • packages/net/olsrd/files/olsrd.init

    r29065 r29134  
    11#!/bin/sh /etc/rc.common 
    2 # Copyright (C) 2008-2011 OpenWrt.org 
    32# Copyright (C) 2008  Alina Friedrichsen <x-alina@gmx.net> 
    43# Special thanks to bittorf wireless )) 
    54 
    65START=65 
    7  
    8 SERVICE_DAEMONIZE=1 
    9 SERVICE_WRITE_PID=1 
     6BIN=/usr/sbin/olsrd 
     7CONF=/var/etc/olsrd.conf 
     8PID=/var/run/olsrd.pid 
     9PID6=/var/run/olsrd.ipv6.pid 
    1010 
    1111OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 AllowNoInt=yes' 
     
    4646        validate_ifname "$ifname" || return 1 
    4747        IFNAME="$ifname" 
    48  
    4948        return 0 
    5049} 
     
    325324        validate_varname "$cfg" || return 0 
    326325        local ignore 
    327         local ipversion 
    328326 
    329327        config_get_bool ignore "$cfg" ignore 0 
     
    337335                config_set "$cfg" IpVersion '6' 
    338336        fi 
     337        config_get smartgateway "$cfg" SmartGateway 
     338        config_get smartgatewayuplink "$cfg" SmartGatewayUplink 
    339339 
    340340        config_write_options "$OLSRD_OLSRD_SCHEMA" "$cfg" olsrd_write_option 
    341341        echo 
    342342        OLSRD_COUNT=$((OLSRD_COUNT + 1)) 
    343  
    344343        return 0 
    345344} 
     
    462461                        fi 
    463462 
    464                         config_get latlon_file "$cfg" latlon_file 
     463                        for f in latlon_file hosts_file services_file resolv_file macs_file; do 
     464                                config_get $f "$cfg" $f 
     465                        done 
     466 
    465467                        [ -z "$latlon_file" ] && config_set "$cfg" latlon_file '/var/run/latlon.js' 
     468                ;; 
     469                olsrd_watchdog.*) 
     470                        config_get wd_file "$cfg" file 
    466471                ;; 
    467472        esac 
     
    491496                        if get_ifname "$interface"; then 
    492497                                ifnames="$ifnames \"$IFNAME\"" 
     498                                ifsglobal="$ifsglobal $IFNAME" 
    493499                        else 
    494500                                echo "Warning: Interface '$interface' not found, skipped" 1>&2 
     
    563569} 
    564570 
     571olsrd_setup_smartgw_rules() { 
     572        # Check if ipip is installed 
     573        [ ! -e /etc/modules.d/[0-9]*-ipip ] && echo "Warning: kmod-ipip is missing. SmartGateway will not work until you install it." 
     574 
     575        wanifnames=$(ip r l e 0/0 t all | sed -e 's/^.* dev //' |cut -d " " -f 1 | sort | uniq) 
     576        nowan=0 
     577        if [ -z "$wanifnames" ]; then 
     578                nowan=1 
     579        fi 
     580 
     581        IP4T=$(which iptables) 
     582        IP6T=$(which ip6tables) 
     583 
     584        # Delete smartgw firewall rules first 
     585        for IPT in $IP4T $IP6T; do 
     586                while $IPT -D forwarding_rule -o tnl_+ -j ACCEPT 2> /dev/null; do :;done 
     587                for IFACE in $wanifnames; do 
     588                        while $IPT -D forwarding_rule -i tunl0 -o $IFACE -j ACCEPT 2> /dev/null; do :; done 
     589                done 
     590                for IFACE in $ifsglobal; do 
     591                        while $IPT -D input_rule -i $IFACE -p 4 -j ACCEPT 2> /dev/null; do :; done 
     592                done 
     593        done 
     594        while $IP4T -t nat -D postrouting_rule -o tnl_+ -j MASQUERADE 2> /dev/null; do :;done 
     595 
     596        if [ "$smartgateway" == "yes" ]; then 
     597                echo "Notice: Inserting firewall rules for SmartGateway" 
     598                if [ ! "$smartgatewayuplink" == "none" ]; then 
     599                        if [ "$smartgatewayuplink" == "ipv4" ]; then 
     600                                # Allow everything to be forwarded to tnl_+ and use NAT for it 
     601                                $IP4T -I forwarding_rule -o tnl_+ -j ACCEPT 
     602                                $IP4T -t nat -I postrouting_rule -o tnl_+ -j MASQUERADE 
     603                                # Allow forwarding from tunl0 to (all) wan-interfaces 
     604                                if [ "$nowan"="0" ]; then 
     605                                        for IFACE in $wanifnames; do 
     606                                                $IP4T -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT 
     607                                        done 
     608                                fi 
     609                                # Allow incoming ipip on all olsr-interfaces 
     610                                for IFACE in $ifsglobal; do 
     611                                        $IP4T -I input_rule -i $IFACE -p 4 -j ACCEPT 
     612                                done 
     613                        elif [ "$smartgatewayuplink" == "ipv6" ]; then 
     614                                $IP6T -I forwarding_rule -o tnl_+ -j ACCEPT 
     615                                if [ "$nowan"="0" ]; then 
     616                                        for IFACE in $wanifnames; do 
     617                                                $IP6T -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT 
     618                                        done 
     619                                fi 
     620                                for IFACE in $ifsglobal; do 
     621                                        $IP6T -I input_rule -i $IFACE -p 4 -j ACCEPT 
     622                                done 
     623                        else 
     624                                for IPT in $IP4T $IP6T; do 
     625                                        $IPT -I forwarding_rule -o tnl_+ -j ACCEPT 
     626                                        $IPT -t nat -I postrouting_rule -o tnl_+ -j MASQUERADE 
     627                                        if [ "$nowan"="0" ]; then 
     628                                                for IFACE in $wanifnames; do 
     629                                                        $IPT -A forwarding_rule -i tunl0 -o $IFACE -j ACCEPT 
     630                                                done 
     631                                        fi 
     632                                        for IFACE in $ifsglobal; do 
     633                                                $IPT -I input_rule -i $IFACE -p 4 -j ACCEPT 
     634                                        done 
     635                                done 
     636                        fi 
     637                fi 
     638        fi 
     639} 
     640 
    565641start() { 
    566642        SYSTEM_HOSTNAME= 
     
    599675        if [ "$OLSRD_IPVERSION_6AND4" -ne 0 ]; then 
    600676                bindv6only="$(sysctl -n net.ipv6.bindv6only)" 
    601                 sysctl -w net.ipv6.bindv6only=1 
    602                 sed -e 's/^\t\t[0-9.]*[ ][0-9.]*$//' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv6 
    603                 sed -i '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' /var/etc/olsrd.conf.ipv6 
    604                 service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv6 -nofork 
     677                sysctl -w net.ipv6.bindv6only=1 > /dev/null 
     678                sed -e '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv6 
    605679                sed -e 's/^IpVersion[ ][ ]*6$/IpVersion 4/' -e 's/^\t\t[A-Fa-f0-9.:]*[:][A-Fa-f0-9.:]*[ ][0-9]*$//' < "$OLSRD_CONFIG_FILE" > /var/etc/olsrd.conf.ipv4 
    606                 service_start /usr/sbin/olsrd -f /var/etc/olsrd.conf.ipv4 -nofork 
     680                rm $OLSRD_CONFIG_FILE 
     681 
     682                # some filenames should get the suffix .ipv6 
     683                for file in $latlon_file $hosts_file $services_file $resolv_file $macs_file $wd_file;do 
     684                        f=$(echo $file|sed 's/\//\\\//g') 
     685                        sed -i "s/$f/$f.ipv6/g" /var/etc/olsrd.conf.ipv6 
     686                done 
     687 
     688                if ([ -s $PID6 ] && kill -0 $(cat $PID6) 2>&-); then 
     689                        echo "Error: There already is a IPv6 instance of olsrd running ($(cat $PID6)), not starting." 
     690                else 
     691                        start-stop-daemon -q -b -m -p $PID6 -x $BIN -S -- -f /var/etc/olsrd.conf.ipv6 -nofork 
     692                fi 
     693 
     694                if ([ -s $PID ] && kill -0 $(cat $PID) 2>&-); then 
     695                                echo "Error: There already is a IPv4 instance of olsrd running ($(cat $PID)), not starting." 
     696                else 
     697                        start-stop-daemon -q -b -m -p $PID -x $BIN -S -- -f /var/etc/olsrd.conf.ipv4 -nofork 
     698                fi 
     699 
    607700                sleep 3 
    608                 sysctl -w net.ipv6.bindv6only="$bindv6only" 
     701                sysctl -w net.ipv6.bindv6only="$bindv6only" > /dev/null 
     702 
    609703        else 
    610                 service_start /usr/sbin/olsrd -f "$OLSRD_CONFIG_FILE" -nofork 
    611         fi 
     704 
     705                if [ "$ipversion" = "6" ]; then 
     706                        sed -i '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/d' "$OLSRD_CONFIG_FILE" 
     707                fi 
     708 
     709                ### check for running instance 
     710                if ([ -s $PID ] && kill -0 $(cat $PID) 2>&-); then 
     711                        echo "Error: There already is a instance of olsrd running ($(cat $PID)), exiting now." 
     712                        return 1 
     713                else 
     714                        start-stop-daemon -q -b -m -p $PID -x $BIN -S -- -f "$OLSRD_CONFIG_FILE" -nofork 
     715                fi 
     716        fi 
     717        olsrd_setup_smartgw_rules 
    612718} 
    613719 
    614720stop() { 
    615         service_stop /usr/sbin/olsrd 
    616 } 
     721        start-stop-daemon -q -p $PID -x $BIN -K 
     722        start-stop-daemon -q -p $PID6 -x $BIN -K 
     723        test -s $PID && rm $PID 
     724        test -s $PID6 && rm $PID6 
     725} 
Note: See TracChangeset for help on using the changeset viewer.