Changeset 3409

Show
Ignore:
Timestamp:
08/05/07 20:12:51 (5 years ago)
Author:
spaetzle
Message:

- some ifupdown logic rework to make things a bit clearer
- some syntax changes to use mksh features
- moved manual stuff to /etc/network/methods/manual

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/freewrt/package/broadcom-wl/Makefile

    r3386 r3409  
    99PKG_NAME:=              broadcom-wl 
    1010PKG_VERSION:=           4.80.53.0 
    11 PKG_RELEASE:=           11 
     11PKG_RELEASE:=           12 
    1212PKG_MD5SUM:=            a7d8dde3ce474c361143b83e1d9890b1 
    1313PKG_MODULE:=            11 
  • trunk/freewrt/package/broadcom-wl/files/wl-broadcom

    r3386 r3409  
    77# Copyright (c) 2007 
    88#       Thorsten Glaser <tg@freewrt.org> 
     9#   Christian Fischer <spaetzle@freewrt.org> 
    910# Copyright (c) 2006 
    1011#       Dirk Nehring <dnehring@freewrt.org> 
     
    2021 
    2122iface_type() { 
    22         [ x"$IF_WIRELESS_TYPE" = x"broadcom" ] && echo $IFACE | grep -q ^wl[0-9] 
     23        [[ $IF_WIRELESS_TYPE = broadcom ]] && echo $IFACE | grep -q ^wl[0-9] 
    2324} 
    2425 
    2526security_none() { 
    2627        wsec=0 
    27         [ x"$IF_WIRELESS_MODE" = x"sta" ] && init_debug wl join $IF_WIRELESS_SSID 
     28        [[ $IF_WIRELESS_MODE = sta ]] && init_debug wl join $IF_WIRELESS_SSID 
    2829} 
    2930 
     
    3536        init_debug wl wpa_auth 0 
    3637 
    37         if [ x"$IF_WIRELESS_MODE" = x"sta" ]; then 
     38        if [[ $IF_WIRELESS_MODE = sta ]]; then 
    3839                case $IF_WIRELESS_AUTHORIZATION in 
    39                        shared) 
    40                                authorization=shared 
    41                                ;; 
    42                        *) 
    43                                authorization=open 
    44                                ;; 
     40                shared) 
     41                        authorization=shared 
     42                        ;; 
     43                *) 
     44                        authorization=open 
     45                        ;; 
    4546                esac 
    4647 
     
    5152                for keyno in '' 0 1 2 3; do 
    5253                        eval wkey='$IF_WIRELESS_KEY'$keyno 
    53                         test -z $wkey && continue 
     54                        [[ -z $wkey ]] && continue 
    5455 
    5556                        # wkey ist set, do an entry 
     
    5859 
    5960                        # is key numberless? 
    60                         test -z "$keyno" && break  # yes, ignore numbered keys 
     61                        [[ -z $keyno ]] && break  # yes, ignore numbered keys 
    6162 
    6263                        # primary key number set? 
    63                         test -z "$pkey" && pkey=$keyno  # set it with the first one found 
     64                        [[ -z $pkey ]] && pkey=$keyno  # set it with the first one found 
    6465 
    6566                        # set primary key number from config if it isn't out of range 
    66                         test x"$IF_WIRELESS_PRIMARY_KEY" = x"$keyno" && pkey=$keyno 
     67                        [[ $IF_WIRELESS_PRIMARY_KEY = $keyno ]] && pkey=$keyno 
    6768                done 
    6869 
    69                 test -z "$wkey_set" && return 1  # no wepkey entries done, break here 
     70                [[ -z $wkey_set ]] && return 1  # no wepkey entries done, break here 
    7071                init_debug wl primary_key $pkey 
    7172        fi 
     
    7677 
    7778        case $IF_WIRELESS_AUTHORIZATION in 
    78                psk) 
    79                        auth=4 
    80                 ;; 
    81                psk2) 
    82                        auth=128 
    83                 ;; 
    84                "psk psk2") 
    85                        auth=132 
    86                 ;; 
    87                *) 
    88                        mstate 1 
    89                        merr "Wrong wireless authorisation $IF_WIRELESS_AUTHORIZATION for security wpa-psk" 
    90                        return 1 
     79        psk) 
     80                auth=4 
     81                ;; 
     82        psk2) 
     83                auth=128 
     84                ;; 
     85        "psk psk2") 
     86                auth=132 
     87                ;; 
     88        *) 
     89                mstate 1 
     90                merr "Wrong wireless authorisation $IF_WIRELESS_AUTHORIZATION for security wpa-psk" 
     91                return 1 
    9192                ;; 
    9293        esac 
     
    9798        # don't handle wds as special case, i think its only interesting 
    9899        # if we have routed or bridged networking 
    99         if bridged_mode 
    100         then 
     100        if bridged_mode; then 
    101101                cat > ${postup}/postup <<EOF 
    102102mprint -n "Starting nas daemon" 
     
    133133 
    134134        case $IF_WIRELESS_AUTHORIZATION in 
    135                wep) 
    136                        auth=0 
    137                        # only honour bridged or routed 
    138                        if bridged_mode; then 
    139                                cat > ${postup}/postup <<EOF 
     135        wep) 
     136                auth=0 
     137                # only honour bridged or routed 
     138                if bridged_mode; then 
     139                        cat > ${postup}/postup <<EOF 
    140140mprint -n "Starting nas daemon" 
    141141(doquit=0 
     
    149149mstate 0 
    150150EOF 
    151                        else 
    152                                mprint -n "Starting nas daemon" 
    153                                (doquit=0 
    154                                trap 'doquit=1' USR1 
    155                                while sleep 1; do 
    156                                        [[ $doquit = 0 ]] || break 
    157                                        /usr/sbin/nas -P /var/run/nas.lan.pid \ 
    158                                            -H 34954 -i $IFACE 
    159                                done) & 
    160                                echo $! >/var/run/nas.watch.pid 
    161                                mstate 0 
    162                        fi 
    163                        return 0 
    164                 ;; 
    165                wpa) 
    166                        auth=2 
    167                 ;; 
    168                wpa2) 
    169                        auth=64 
    170                 ;; 
    171                "wpa wpa2") 
    172                        auth=66 
    173                 ;; 
    174                *) 
    175                        merr "Wrong wireless authorisation $IF_WIRELESS_AUTHORIZATION for security wpa-psk" 
    176                        return 1 
     151                else 
     152                        mprint -n "Starting nas daemon" 
     153                        (doquit=0 
     154                        trap 'doquit=1' USR1 
     155                        while sleep 1; do 
     156                                [[ $doquit = 0 ]] || break 
     157                                /usr/sbin/nas -P /var/run/nas.lan.pid \ 
     158                                    -H 34954 -i $IFACE 
     159                        done) & 
     160                        echo $! >/var/run/nas.watch.pid 
     161                        mstate 0 
     162                fi 
     163                return 0 
     164                ;; 
     165        wpa) 
     166                auth=2 
     167                ;; 
     168        wpa2) 
     169                auth=64 
     170                ;; 
     171        "wpa wpa2") 
     172                auth=66 
     173                ;; 
     174        *) 
     175                merr "Wrong wireless authorisation $IF_WIRELESS_AUTHORIZATION for security wpa-psk" 
     176                return 1 
    177177                ;; 
    178178        esac 
     
    181181        init_debug wl eap 0 
    182182 
    183         if bridged_mode 
    184         then 
     183        if bridged_mode; then 
    185184                cat > ${postup}/postup <<EOF 
    186185mprint -n "Starting nas daemon" 
     
    215214 
    216215get_bridge_iface() { 
    217         [ -x "$(which brctl)" ] || return 1 
     216        [[ -x $(whence -p brctl) ]] || return 1 
    218217        brctl show 2>&- | grep -q $IFACE || return 1 
    219         for var in $(brctl show 2>&- | grep -o ^[a-z]*[^[:space:]]) 
    220         do 
     218        for var in $(brctl show 2>&- | grep -o ^[a-z]*[^[:space:]]); do 
    221219                brctl showstp $var | grep -q ^${IFACE}[[:space:]] || continue 
    222220                BRIDGE_IFACE=$var 
     
    226224 
    227225bridged_mode() { 
    228         if [ x"$PARENT_IFACE_TYPE" = x"bridge" ] 
    229         then 
     226        if [[ $PARENT_IFACE_TYPE = bridge ]]; then 
    230227                BRIDGE_IFACE=$PARENT_IFACE 
    231228        else 
    232229                get_bridge_iface || return 1 
    233230 
    234                 if ! is_up $BRIDGE_IFACE 
    235                 then 
     231                if ! is_up $BRIDGE_IFACE; then 
    236232                        mprint -n "Starting nas daemon" 
    237233                        mstate 1 
     
    240236                fi 
    241237        fi 
    242         postup="/tmp/ifupdown/pcode/${BRIDGE_IFACE}/${IFACE}
     238        postup="/tmp/ifupdown/pcode/${BRIDGE_IFACE}/$IFACE
    243239        mkdir -p $postup 
    244240        chmod 700 $postup 
     
    259255        mprint -n "Initializing $IFACE_TYPE $IFACE" 
    260256 
    261         [ -z "$IF_WIRELESS_SSID" ] && err="ESSID not set" 
    262         [ -z "$IF_WIRELESS_MODE" ] && err="Operation mode not set" 
    263         [ x"$IF_WIRELESS_SECURITY" = x"8021x" -a -z "$IF_WIRELESS_RADIUS_IPADDR"
    264                 -a x"$IF_WIRELESS_AUTHORIZATION" != x"wep" ] && \ 
     257        [[ -z $IF_WIRELESS_SSID ]] && err="ESSID not set" 
     258        [[ -z $IF_WIRELESS_MODE ]] && err="Operation mode not set" 
     259        [[ $IF_WIRELESS_SECURITY = 8021x && -z $IF_WIRELESS_RADIUS_IPADDR &&
     260                $IF_WIRELESS_AUTHORIZATION != wep ]] && \ 
    265261                err="Radius server address not set" 
    266262 
    267         [ -n "$err" ] && { 
     263        if [[ -n $err ]]; then 
    268264                mstate 1 
    269265                merr $err 
    270266                return 1 
    271         } 
     267        fi 
    272268 
    273269 
     
    306302                ;; 
    307303        wds) 
    308                 [ -z "$IF_WIRELESS_WDS" ] && return 1 
     304                [[ -z $IF_WIRELESS_WDS ]] && return 1 
    309305                # TODO: messages 
    310306                init_debug wl ap 1 
     
    327323 
    328324        case $IF_WIRELESS_ENCRYPTION in 
    329                wep) 
    330                        wsec=1 
    331                        ;; 
    332                tkip) 
    333                        wsec=2 
    334                        ;; 
    335                aes) 
    336                        wsec=4 
    337                        ;; 
    338                aes+tkip) 
    339                        wsec=6 
    340                        ;; 
     325        wep) 
     326                wsec=1 
     327                ;; 
     328        tkip) 
     329                wsec=2 
     330                ;; 
     331        aes) 
     332                wsec=4 
     333                ;; 
     334        aes+tkip) 
     335                wsec=6 
     336                ;; 
    341337        esac 
    342338 
    343339        # set country 
    344         [ -n "$IF_WIRELESS_COUNTRY" ] && init_debug wl country $IF_WIRELESS_COUNTRY 
     340        [[ -n $IF_WIRELESS_COUNTRY ]] && init_debug wl country $IF_WIRELESS_COUNTRY 
    345341 
    346342        # set gmode 
    347         [ -n "$IF_WIRELESS_GMODE" ] && init_debug wl gmode $IF_WIRELESS_GMODE 
     343        [[ -n $IF_WIRELESS_GMODE ]] && init_debug wl gmode $IF_WIRELESS_GMODE 
    348344 
    349345        # set isolate mode 
    350         [ -n "$IF_WIRELESS_ISOLATE" ] && init_debug wl ap_isolate \ 
     346        [[ -n $IF_WIRELESS_ISOLATE ]] && init_debug wl ap_isolate \ 
    351347                $IF_WIRELESS_ISOLATE 
    352348 
    353349        # set macmode mode 
    354         [ -n "$IF_WIRELESS_MACMODE" ] && init_debug wl macmode $IF_WIRELESS_MACMODE 
     350        [[ -n $IF_WIRELESS_MACMODE ]] && init_debug wl macmode $IF_WIRELESS_MACMODE 
    355351 
    356352        # set MAC addresses 
    357         [ -n "$IF_WIRELESS_MAC" ] && init_debug wl mac $IF_WIRELESS_MAC 
     353        [[ -n $IF_WIRELESS_MAC ]] && init_debug wl mac $IF_WIRELESS_MAC 
    358354 
    359355        # set WLAN channel 
    360         [ -n "$IF_WIRELESS_CHANNEL" ] && init_debug wl channel $IF_WIRELESS_CHANNEL 
     356        [[ -n $IF_WIRELESS_CHANNEL ]] && init_debug wl channel $IF_WIRELESS_CHANNEL 
    361357 
    362358        # set frameburst 
    363         [ -n "$IF_WIRELESS_FRAMEBURST" ] && init_debug wl frameburst \ 
     359        [[ -n $IF_WIRELESS_FRAMEBURST ]] && init_debug wl frameburst \ 
    364360                $IF_WIRELESS_FRAMEBURST 
    365361 
    366362        # set afterburner 
    367363        # remove this because command afterburner_override seems to be nonexistent for now 
    368         #[ -n "$IF_WIRELESS_AFTERBURNER" ] && init_debug wl afterburner_override \ 
     364        #[[ -n $IF_WIRELESS_AFTERBURNER ]] && init_debug wl afterburner_override \ 
    369365        #       $IF_WIRELESS_AFTERBURNER 
    370366 
     
    373369 
    374370        case $IF_WIRELESS_SECURITY in 
    375                none) 
    376                        security_none 
    377                        ;; 
    378                wep) 
    379                        security_wep 
    380                        ;; 
    381                wpa-psk) 
    382                        security_wpapsk 
    383                        ;; 
    384                8021x) 
    385                        security_8021x 
    386                        ;; 
    387                *) 
    388                        # no fallback 
    389                        mstate 1 
    390                        merr "Wireless security not set" 
    391                        return 1 
    392                        ;; 
     371        none) 
     372                security_none 
     373                ;; 
     374        wep) 
     375                security_wep 
     376                ;; 
     377        wpa-psk) 
     378                security_wpapsk 
     379                ;; 
     380        8021x) 
     381                security_8021x 
     382                ;; 
     383        *) 
     384                # no fallback 
     385                mstate 1 
     386                merr "Wireless security not set" 
     387                return 1 
     388                ;; 
    393389        esac 
    394390 
     
    398394        mstate 0 
    399395 
    400         [ -z "$PARENT_IFACE_TYPE" ] && is_up ${BRIDGE_IFACE:="FOO"} || return 0 
    401  
    402         [ -f /tmp/ifupdown/pcode/${BRIDGE_IFACE}/${IFACE}/postup ] && \ 
     396        [[ -z $PARENT_IFACE_TYPE ]] && is_up ${BRIDGE_IFACE:="FOO"} || return 0 
     397 
     398        [[ -f /tmp/ifupdown/pcode/${BRIDGE_IFACE}/${IFACE}/postup ]] && \ 
    403399                . /tmp/ifupdown/pcode/${BRIDGE_IFACE}/${IFACE}/postup 
    404400} 
  • trunk/freewrt/package/fwifupdown/Makefile

    r3239 r3409  
    4141        cd ${IDIR_FWIFUPDOWN}/sbin && ln -s ifup ifdown 
    4242        ${INSTALL_DATA} ${PKG_SRC_ROOT}/lib/lladdr ${IDIR_FWIFUPDOWN}/${PKG_CONFIG_PLUGDIR}/ 
     43        ${INSTALL_DATA} ${PKG_SRC_ROOT}/lib/manual ${IDIR_FWIFUPDOWN}/${PKG_CONFIG_METHSDIR} 
    4344 
    4445ifeq (${FWIFUPDOWN_CONFIG_BRIDGE},y) 
  • trunk/freewrt/package/fwifupdown/files/ifupdown.sh

    r3105 r3409  
    1010 
    1111config() { 
    12         [ x"$1" = x"1"
     12        [[ $1 = 1 ]
    1313} 
    1414 
     
    3434        redirect= 
    3535fi 
    36 [ -e /tmp/.booting ] && redirect="$redirect >/dev/console" 
     36[[ -e /tmp/.booting ]] && redirect="$redirect >/dev/console" 
    3737 
    3838# cleanup ifstate files 
  • trunk/freewrt/package/fwifupdown/files/main.sh

    r3198 r3409  
    88# 
    99 
    10 built_in() { 
    11         local what=$1 
    12         local alias=$(alias $what) 
    13         unalias $what 
    14         alias $(echo $alias|sed 's/'\''//g') 
    15         shift 
    16         $what $@ 
    17 
    18  
    19 config() { 
    20         [ x"$1" != x"0" ] 
    21 
    22  
    23 __ifupdown() { 
     10main_ifupdown() { 
    2411        local environ=$(cat $ENVFILE) 
    2512 
     
    3118 
    3219        retval=$? 
    33         echo $environ > $ENVFILE 
     20        grep -q RT_BB_NOEXEC=1 $ENVFILE && retval=0 
     21        echo $environ >$ENVFILE 
    3422        return $retval 
    3523} 
    3624 
    37 __exit() { 
    38         [ x"$1" != x"0" ] && echo "RT_ERR=1" >> $ENVFILE 
     25main_exit() { 
     26        [[ $1 != 0 ]] && echo "RT_ERR=1" >>$ENVFILE 
    3927        exit $1 
    40 } 
    41  
    42 iface_exists() { 
    43         grep -q "${1:-$IFACE}:" /proc/net/dev 
    44 } 
    45  
    46 is_up() { 
    47         local iface=${1:-$IFACE} 
    48  
    49         if iface_exists $iface 
    50         then 
    51                 ip a|grep ${iface}:[[:space:]]|grep -q UP && return 
    52  
    53                 ### ifupdown netlink bug workaround ### 
    54                 # suppress "ip: RTNETLINK answers: File exists" message in the case of 
    55                 # iface is down but an ip address is assigned 
    56                 ip a|grep ${iface}$|grep -q inet && ip addr flush dev $iface >/dev/null 2>&1 
    57                 ### end workaround ### 
    58         fi 
    59         return 1 
    6028} 
    6129 
     
    6735 
    6836        # create env file 
    69         if ! [ -f "$ENVFILE" ] 
    70         then 
    71                 [ -d ${ENVFILE%/*} ] || mkdir -p ${ENVFILE%/*} 
     37        if ! [[ -f $ENVFILE ]]; then 
     38                [[ -d ${ENVFILE%/*} ]] || mkdir -p ${ENVFILE%/*} 
    7239                echo "MDENT=0" >> $ENVFILE 
    7340                echo "LASTLOG=0" >> $ENVFILE 
    7441 
    75                 is_up && IFACE_STATE="up" || IFACE_STATE="down" 
    76                 echo "IFACE_STATE=$IFACE_STATE" >> $ENVFILE 
    77  
    78                 if [ x"$IFACE" != x"lo" ] 
    79                 then 
     42                is_up && IFACE_STATE=up || IFACE_STATE=down 
     43                echo "IFACE_STATE=$IFACE_STATE" >>$ENVFILE 
     44 
     45                if [[ $IFACE != lo ]]; then 
    8046                        # search for existing lib files end evaluate iface type by using the appropriate 
    8147                        # function from lib file 
    82                         for lib in ${LIBDIR}/iftypes/* 
    83                         do 
    84                                 [ -f $lib ] && (. $lib; iface_type 2>&-) || continue 
    85                                 if [ -n "$lastmatch" ] 
    86                                 then 
    87                                         if [ ${lib##*/} = ${lastmatch##*/} ] 
    88                                         then 
     48                        for lib in ${LIBDIR}/iftypes/*; do 
     49                                [[ -f $lib ]] && (. $lib; iface_type 2>&-) || continue 
     50                                if [[ -n $lastmatch ]]; then 
     51                                        if [[ ${lib##*/} = ${lastmatch##*/} ]]; then 
    8952                                                mprint -s "Warning: $lib overlays $lastmatch" 
    9053                                        else 
     
    9760 
    9861                # if iface type isn't evaluated type "iface" is default 
    99                 [ -n "$lastmatch" ] && IFACE_TYPE=${lastmatch##*/} || IFACE_TYPE="iface" 
     62                [[ -n $lastmatch ]] && IFACE_TYPE=${lastmatch##*/} || IFACE_TYPE=iface 
    10063 
    10164                # update env 
    102                 echo "IFACE_TYPE=${IFACE_TYPE}" >> $ENVFILE 
     65                echo "IFACE_TYPE=$IFACE_TYPE" >>$ENVFILE 
    10366        fi 
    10467 
     
    11174        done 
    11275 
    113         [ $t_mdent -gt $MDENT ] && MDENT=$t_mdent 
     76        [[ $t_mdent -gt $MDENT ]] && MDENT=$t_mdent 
    11477        main_pos_update 
    11578} 
    11679 
    11780main_pos_update() { 
    118         [ x"$MDENT" = x"0" ] && STARTCOL= || STARTCOL="[$(expr ${MDENT:-0} \* ${TAB})C" 
     81        [[ $MDENT = 0 ]] && STARTCOL= || \ 
     82                STARTCOL="[$(( ${MDENT:-0} * $TAB))C" 
    11983        sed 's/MDENT=[0-9]*/'MDENT=$MDENT'/' -i $ENVFILE 
    12084} 
    12185 
     86### global helper functions ### 
     87 
     88config() { 
     89        [[ $1 != 0 ]] 
     90} 
     91 
     92iface_exists() { 
     93        grep -q "${1:-$IFACE}:" /proc/net/dev 
     94} 
     95 
     96phys_exist() { 
     97        config $IFACE_LOGICAL && return 
     98        iface_exists && return 
     99        merr "No such device" 
     100        return 1 
     101} 
     102 
     103is_up() { 
     104        local iface=${1:-$IFACE} 
     105 
     106        iface_exists $iface || return 1 
     107        ip a|grep ${iface}:[[:space:]]|grep -q UP && return 
     108 
     109        ### ifupdown netlink bug workaround ### 
     110        # suppress "ip: RTNETLINK answers: File exists" message in the case of 
     111        # iface is down but an ip address is assigned 
     112        ip a|grep ${iface}$|grep -q inet && ip addr flush dev $iface >/dev/null 2>&1 
     113        ### end workaround ### 
     114 
     115        return 1 
     116} 
     117 
     118### functions used by main up/down functions ### 
     119### DON'T remove empty ones ### 
     120 
     121main_exec_hookscripts() { 
     122        for hook in ${LIBDIR}/${1}/${2}; do 
     123                [[ -f $hook ]] || continue 
     124                . $hook 
     125                eval "${hook##*/}_$3" || [[ $? = 127 ]] || exit 
     126        done 
     127} 
     128 
     129main_bb_methods_override() { 
     130        [[ -r ${LIBDIR}/methods/$METHOD ]] || return 
     131        . ${LIBDIR}/methods/$METHOD 
     132        whence ${METHOD}_$1 2>&- 1>&- || return 
     133 
     134        # fake busybox ifupdown.c up or down code 
     135        case $1 in 
     136        up) 
     137                eval $IF_PRE_UP 
     138                eval ${METHOD}_$1 || exit  
     139                eval $IF_UP 
     140                # call up function from here because we leave 
     141                # run-parts after returning 
     142                main_up 
     143                ;; 
     144        down) 
     145                eval $IF_DOWN 
     146                eval ${METHOD}_$1 || exit  
     147                eval $IF_POST_DOWN 
     148                main_postdown 
     149                ;; 
     150        esac 
     151 
     152        RT_BB_NOEXEC=1 
     153} 
     154 
     155main_exec_pcode() { 
     156        [[ -d /tmp/ifupdown/pcode/$IFACE ]] || return 
     157        for dir in /tmp/ifupdown/pcode/${IFACE}/*; do 
     158                [[ -f ${dir}/$1 ]] || continue 
     159                . ${dir}/$1 
     160        done 
     161} 
     162 
     163prereq_preup() { 
     164        main_prereq_preup 
     165} 
     166 
     167main_prereq_preup() { 
     168        is_up || return 0 
     169        mup 
     170        mstate 1 
     171        minfo "Interface already up" 
     172        exit 1 
     173} 
     174 
     175prereq_up() { 
     176        main_prereq_up 
     177} 
     178 
     179main_prereq_up() { 
     180        is_up 
     181        mstate $? || exit 
     182} 
     183 
     184prereq_down() { 
     185        : 
     186} 
     187 
     188prereq_postdown() { 
     189        main_prereq_postdown 
     190} 
     191 
     192main_prereq_postdown() { 
     193        is_up 
     194        mstate $((!$?)) || exit 
     195        [[ $IFACE_STATE = down ]] && minfo "Interface already down" 
     196        return 0 
     197} 
     198 
     199if_preup() { 
     200        : 
     201} 
     202 
     203if_up() { 
     204        : 
     205} 
     206 
     207if_down() { 
     208        : 
     209} 
     210 
     211if_postdown() { 
     212        : 
     213} 
     214 
     215### main up/down functions ### 
     216 
    122217main_preup() { 
    123         config $RT_PREUP_PRINTING_OFF || mstart 
    124  
    125         if ! config $RT_PREUP_IFUP_CHECK_OFF && is_up 
    126         then 
    127                 if ! config $RT_PREUP_PRINTING_OFF 
    128                 then 
    129                         mup 
    130                         mstate 1 
    131                         minfo "Interface already up" 
    132                 fi 
    133                 exit 1 
    134         fi 
    135  
    136         if_preup 2>&- 
    137         retval=$? 
    138  
    139         [ x"$retval" != x"0" -a x"$retval" != x"127" ] && { 
    140                 fail_preup 2>&- || exit 1 
    141         } 
    142  
    143         config $RT_PREUP_PRINTING_OFF && return 
     218        # print start message 
     219        mstart 
     220 
     221        # break if device is physical and not exist 
     222        phys_exist || exit 
     223 
     224        # check iface state and print state message 
     225        # break if iface is already up 
     226        prereq_preup || exit 
     227         
     228        # execute "pre busybox up" function 
     229        # sourced from appropriate iftype script 
     230        if_preup || fail_preup || exit 
     231 
     232        # print "going up" message 
    144233        mup 
     234 
     235        # execute plugins 
     236        main_exec_hookscripts plugins '*' preup 
     237 
     238        # execute method preup function if present 
     239        main_exec_hookscripts methods $METHOD preup 
     240 
     241        # override busybox ifupdown.c method if function present 
     242        main_bb_methods_override up 
     243 
     244        # bypass execution of further busybox ifupdown.c code 
     245        config $RT_BB_NOEXEC || return 0 
     246        echo RT_BB_NOEXEC=1 >>$ENVFILE 
     247        builtin exit 1 
    145248} 
    146249 
    147250main_up() { 
    148         [ x"$METHOD" = x"manual" ] && ip link set up dev $IFACE 
    149  
    150         if ! config $RT_UP_IFUP_CHECK_OFF 
    151         then 
    152                 is_up 
    153                 retval=$? 
    154                 config $RT_UP_PRINTING_OFF || mstate $retval 
    155                 [ x"$retval" != x"0" ] && exit 1 
    156         fi 
    157  
    158         if_up 2>&- 
    159         retval=$? 
    160  
    161         [ x"$retval" != x"0" -a x"$retval" != x"127" ] && { 
    162                 fail_up 2>&- || exit 1 
    163         } 
    164  
    165         if [ -d /tmp/ifupdown/pcode/${IFACE} ] 
    166         then 
    167                 for dir in /tmp/ifupdown/pcode/${IFACE}/* 
    168                 do 
    169                         [ -f ${dir}/postup ] || continue 
    170                         . ${dir}/postup 
    171                 done 
    172         fi 
     251        # execute method postup function if present 
     252        main_exec_hookscripts methods $METHOD postup 
     253 
     254        # execute plugins 
     255        main_exec_hookscripts plugins '*' up 
     256 
     257        # check iface state and print state message 
     258        # break if iface isn't up 
     259        prereq_up || exit 
     260 
     261        # execute "post busybox up" function 
     262        # sourced from appropriate iftype script 
     263        if_up || fail_up || exit 
     264 
     265        # execute postcode if present 
     266        main_exec_pcode postup 
    173267} 
    174268 
    175269main_down() { 
    176         config $RT_DOWN_PRINTING_OFF || mstop 
    177  
    178         if [ -d /tmp/ifupdown/pcode/${IFACE} ] 
    179         then 
    180                 for dir in /tmp/ifupdown/pcode/${IFACE}/* 
    181                 do 
    182                         [ -f ${dir}/predown ] || continue 
    183                         . ${dir}/predown 
    184                 done 
    185         fi 
    186  
    187         if_down 2>&- 
    188         retval=$? 
    189  
    190         [ x"$retval" != x"0" -a x"$retval" != x"127" ] && { 
    191                 fail_down 2>&- || exit 1 
    192         } 
    193  
    194         config $RT_DOWN_PRINTING_OFF  && return 
     270        # print stop message 
     271        mstop 
     272 
     273        # break if device is physical and not exist 
     274        phys_exist || exit 
     275 
     276        # nothing predefined 
     277        prereq_down || exit 
     278 
     279        # execute postcode if present 
     280        main_exec_pcode predown 
     281 
     282        # execute "pre busybox down" function 
     283        # sourced from appropriate iftype script 
     284        if_down || fail_down || exit 
     285 
     286        # print "going down" message 
    195287        mdown 
     288 
     289        # execute plugins 
     290        main_exec_hookscripts plugins '*' down 
     291 
     292        # execute method predown function if present 
     293        main_exec_hookscripts methods $METHOD predown 
     294 
     295        # override busybox ifupdown.c method if userspace function present 
     296        main_bb_methods_override down 
     297 
     298        # bypass execution of further busybox ifupdown.c code 
     299        config $RT_BB_NOEXEC || return 0 
     300        echo RT_BB_NOEXEC=1 >>$ENVFILE 
     301        builtin exit 1 
    196302} 
    197303 
    198304main_postdown() { 
    199         [ x"$METHOD" = x"manual" ] && { 
    200                 ip addr flush dev $IFACE 
    201                 ip link set down dev $IFACE 
    202         } 
    203  
    204         if ! config $RT_POSTDOWN_IFDOWN_CHECK_OFF 
    205         then 
    206                 if [ $IFACE_STATE = "down" ] 
    207                 then 
    208                         if ! config $RT_POSTDOWN_PRINTING_OFF 
    209                         then 
    210                                 mdown 
    211                                 mstate 1 
    212                                 minfo "Interface already down" 
    213                         fi 
    214                 else 
    215                         is_up && retval=1 || retval=0 
    216                         config $RT_POSTDOWN_PRINTING_OFF || mstate $retval 
    217                         [ "$retval" != "0" ] && exit 1 
    218                 fi 
    219         fi 
    220  
    221         if_postdown 2>&- 
    222         retval=$? 
    223  
    224         [ x"$retval" != x"0" -a  x"$retval" != x"127" ] && { 
    225                 fail_postdown 2>&- || exit 1 
    226         } 
     305        # execute method postdown function if present 
     306        main_exec_hookscripts methods $METHOD postdown 
     307 
     308        # execute plugins 
     309        main_exec_hookscripts plugins '*' postdown 
     310 
     311        # check iface state and print state message 
     312        # break if iface isn't down 
     313        prereq_postdown || exit 
     314 
     315        # execute "post busybox down" function 
     316        # sourced from appropriate iftype script 
     317        if_postdown || fail_postdown || exit 
    227318 
    228319        # pcode cleanup 
    229320        rm -rf /tmp/ifupdown/pcode/*/$IFACE 2>&- 1>&- 
    230 } 
    231  
    232 main_exec_dirhooks() { 
    233         for hook in ${LIBDIR}/${1}/${2} 
    234         do 
    235                 [ -f $hook ] || continue 
    236                 . $hook 
    237                 eval $3 2>&- 
    238                 retval=$? 
    239                 [ x"$retval" != x"0" -a x"$retval" != x"127" ] && exit 1 
    240                 return 
    241         done 
    242 } 
    243  
    244 main_exec_plugins() { 
    245         for plugin in ${LIBDIR}/plugins/*; do 
    246                 [ -f $plugin ] || continue 
    247                 . $plugin 
    248                 eval "${plugin##*/}_${1}" 2>&- 
    249                 retval=$? 
    250                 [ x"$retval" != x"0" -a x"$retval" != x"127" ] && exit 1 
    251         done 
    252 } 
    253  
    254 main_exec_inlinehooks() { 
    255         case $SUBMODE in 
    256                 if-pre-up) 
    257                         [ -n "$IF_PRE_UP" ] && eval $IF_PRE_UP 
    258                 ;; 
    259                 if-up) 
    260                         [ -n "$IF_UP" ] && eval $IF_UP 
    261                 ;; 
    262                 if-down) 
    263                         [ -n "$IF_DOWN" ] && eval $IF_DOWN 
    264                 ;; 
    265                 if-post-down) 
    266                         [ -n "$IF_POST_DOWN" ] && eval $IF_POST_DOWN 
    267                 ;; 
    268         esac 
    269321} 
    270322 
     
    280332config $FWIFUPDOWN_DEBUG && set -x 
    281333 
    282 RT_PREUP_PRINTING_OFF=0 
    283 RT_UP_PRINTING_OFF=0 
    284 RT_DOWN_PRINTING_OFF=0 
    285 RT_POSTDOWN_PRINTING_OFF=0 
    286 RT_PREUP_IFUP_CHECK_OFF=0 
    287 RT_UP_IFUP_CHECK_OFF=0 
    288 RT_POSTDOWN_IFDOWN_CHECK_OFF=0 
    289334RT_BB_NOEXEC=0 
    290335RT_ERR=0 
     
    293338IFACE_TYPE="none" 
    294339 
    295 alias exit="__exit" 
    296 alias ifup="__ifupdown ifup" 
    297 alias ifdown="__ifupdown ifdown" 
    298 [ -z "$KSH_VERSION" ] || alias which='whence -p' 
    299  
    300 if ! [ -f /etc/network/mfunctions.sh ] 
    301 then 
     340alias exit="main_exit" 
     341alias ifup="main_ifupdown ifup" 
     342alias ifdown="main_ifupdown ifdown" 
     343 
     344if [[ ! -f /etc/network/mfunctions.sh ]]; then 
    302345        logger -t ifupdown "/etc/network/mfunctions.sh not found" 
    303346        exit 1 
     
    307350main_env_update 
    308351 
    309 config $RT_ERR && built_in exit 1 
    310  
    311 if [ x"$IFACE_TYPE" != x"iface" ] 
    312 then 
    313         if [ -f "${LIBDIR}/iftypes/${IFACE_TYPE}" ] 
    314         then 
     352config $RT_ERR && builtin exit 1 
     353 
     354if [[ $IFACE_TYPE != iface ]]; then 
     355        if [[ -f ${LIBDIR}/iftypes/$IFACE_TYPE ]]; then 
    315356                . ${LIBDIR}/iftypes/$IFACE_TYPE 
    316357        else 
     
    320361 
    321362case $SUBMODE in 
    322         if-pre-up) 
    323                 main_preup 
    324                 main_exec_dirhooks methods $METHOD method_preup 
    325                 main_exec_plugins preup 
    326  
    327                 # bypass execution of further busybox ifupdown.c code 
    328                 config $RT_BB_NOEXEC && built_in exit 1 
     363if-pre-up) 
     364        main_preup 
    329365        ;; 
    330         if-up) 
    331                 main_exec_plugins up 
    332                 main_exec_dirhooks methods $METHOD method_up 
    333                 main_up 
     366if-up) 
     367        main_up 
    334368        ;; 
    335         if-down) 
    336                 main_down 
    337                 main_exec_dirhooks methods $METHOD method_down 
    338                 main_exec_plugins down 
    339  
    340                 # bypass execution of further busybox ifupdown.c code 
    341                 config $RT_BB_NOEXEC && built_in exit 1 
     369if-down) 
     370        main_down 
    342371        ;; 
    343         if-post-down) 
    344                 main_exec_plugins postdown 
    345                 main_exec_dirhooks methods $METHOD method_postdown 
    346                 main_postdown 
     372if-post-down) 
     373        main_postdown 
    347374        ;; 
    348375esac 
  • trunk/freewrt/package/fwifupdown/files/mfunctions.sh

    r3099 r3409  
    8080 
    8181mlogger() { 
    82         config $FWIFUPDOWN_SYSLOG_OFF || [ -z "$logmsg" ] && return 
     82        config $FWIFUPDOWN_SYSLOG_OFF || [[ -z $logmsg ]] && return 
    8383        logger -t network "$*" 
    8484} 
     
    8686mstart() { 
    8787        mprint -d "Starting $IFACE_TYPE $IFACE" 
    88         MDENT=$(expr ${MDENT:-0} + 1
     88        MDENT=$((${MDENT:-0} + 1)
    8989        main_pos_update 
    9090} 
     
    9292mstop() { 
    9393        mprint -d "Stopping $IFACE_TYPE $IFACE" 
    94         MDENT=$(expr ${MDENT:-0} + 1
     94        MDENT=$((${MDENT:-0} + 1)
    9595        main_pos_update 
    9696} 
  • trunk/freewrt/package/fwifupdown/lib/alias

    r2959 r3409  
    88# 
    99 
    10 RT_PREUP_IFUP_CHECK_OFF=1 
    11 RT_UP_IFUP_CHECK_OFF=1 
    12 RT_UP_PRINTING_OFF=1 
     10IFACE_LOGICAL=1 
    1311 
    1412iface_type() { 
    15         [ "$(echo $IFACE | sed 's/[^:]*//g')" = ":"
     13        [[ $(echo $IFACE | sed 's/[^:]*//g') = : ]
    1614} 
    1715 
    1816alias_exists() { 
    19         [ "$(ip a 2>&- | grep $IFACE | sed "s/.*[^${IFACE}]//")" = "$IFACE"
     17        [[ $(ip a 2>&- | grep $IFACE | sed "s/.*[^${IFACE}]//") = $IFACE ]
    2018} 
    2119 
    22 get_primary() { 
     20alias_get_primary() { 
    2321        echo $IFACE | sed 's/:.*$//' 
    2422} 
    2523 
    26 if_preup() { 
    27         if [ x"$METHOD" != x"static" ] 
    28         then 
     24alias_is_up() { 
     25        alias_exists && is_up $(alias_get_primary) 
     26
     27 
     28prereq_preup() { 
     29        if [[ $METHOD != static ]]; then 
    2930                mup 
    3031                mstate 1 
    31                 merr "Methods other than static makes no sense for alias ifaces" 
    32                 # bypass execution of further busybox ifupdown.c code 
    33                 built_in exit 1 
     32                merr "Unsupported method $METHOD" 
     33                return 1 
    3434        fi 
    3535 
    36         if alias_exists 
    37         then 
    38                 mstate 1 
    39                 merr "Alias already up" 
    40                 return 1 
    41         fi 
    42         is_up $(get_primary) || ifup $(get_primary) 
    43         return $? 
     36        alias_is_up || return 0 
     37        mup 
     38        mstate 1 
     39        minfo "Interface already up" 
     40        return 1 
    4441} 
    4542 
    46 if_up() { 
    47         alias_exists && is_up $(get_primary) 
    48         mstate $? 
     43if_preup() { 
     44        local baseif=$(alias_get_primary) 
     45        is_up $baseif || ifup $baseif 
     46
     47 
     48prereq_up() { 
     49        alias_is_up 
     50        mstate $? || return 
     51
     52 
     53prereq_down() { 
     54        alias_exists && return 
     55        mdown 
     56        mstate 1 
     57        merr "No such device" 
     58        return 1 
    4959} 
    5060 
    5161if_down() { 
    52         if ! alias_exists 
    53         then 
    54                 mdown 
    55                 mstate 1 
    56                 merr "Alias already down" 
    57                 return 1 
    58         fi 
     62        alias_is_up || alias_ifstate=down 
     63        # running busybox ifdown <alias interface name> causes primary 
     64        # interface shutdown 
     65        # overwrite main method to override busybox ifupdown.c code 
     66        main_bb_methods_override() { 
     67                eval $IF_DOWN 
     68                ip link set down $IFACE 1>&- || { mstate 1; exit;} 
     69                eval $IF_POST_DOWN 
     70                main_postdown 
     71                RT_BB_NOEXEC=1 
     72        } 
     73
    5974 
    60         ### busybox ifdown workaround ### 
    61         # running busybox ifdown <alias interface name> causes primary interface shutdown 
    62  
    63         mdown 
    64         ip link set down $IFACE >/dev/null 2>&1 
    65         mstate $? 
    66  
    67         # break here because all things are done and bypass execution of further busybox ifupdown.c code 
    68         built_in exit 1 
     75prereq_postdown() { 
     76        alias_exists 
     77        mstate $((!$?)) || exit 
     78        [[ $alias_ifstate = down ]] && minfo "Interface already down" 
     79        return 0 
    6980} 
    7081 
  • trunk/freewrt/package/fwifupdown/lib/bridge

    r3198 r3409  
    88# 
    99 
    10  
    11 RT_PREUP_IFUP_CHECK_OFF=1 
     10IFACE_LOGICAL=1 
    1211 
    1312iface_type() { 
    14         if [ "$MODE" = "start" ] 
    15         then 
    16                 [ -n "$IF_BRIDGE_IFACES" ] 
    17         else 
    18                 [ "$(brctl show 2>&- | sed -n -e "/^${IFACE}/ { s/[[:space:]].*//gp }")" = "$IFACE" ] 
     13        if [[ $MODE = start ]]; then 
     14                [[ -n $IF_BRIDGE_IFACES ]] 
     15                return 
    1916        fi 
     17        bridge_exists 
    2018} 
    2119 
    2220bridge_ifaces() { 
    23         brctl show 2>&- | sed -n -e "/^${IFACE}[[:space:]]/,/^\S/{ /^\(${IFACE}[[:space:]]\|[[:space:]]\)/s/^.*[[:space:]]//p }" 
     21        brctl show 2>&- | \ 
     22                sed -n -e "/^${IFACE}[[:space:]]/,/^\S/{ /^\(${IFACE}[[:space:]]\|[[:space:]]\)/s/^.*[[:space:]]//p }" 
    2423} 
    2524 
    2625bridge_exists() { 
    27         [ "$(brctl show 2>&- | sed -n -e "/^${IFACE}/ { s/[[:space:]].*//gp }")" = "$IFACE"
     26        [[ $IFACE = $(brctl show 2>&- | sed -n -e "/^${IFACE}/ { s/[[:space:]].*//gp }") ]
    2827} 
    2928 
     
    4140        for IF in $ifacelist; do 
    4241                madd $IF 
    43                 if ! err=$(brctl addif $IFACE $IF 2>&1 1>&-) 
    44                 then 
    45                         mstate 1 
    46                         merr $err 
    47                         continue 
    48                 fi 
    49                 mstate 0 
     42                err=$(brctl addif $IFACE $IF 2>&1 1>&-) 
     43                mstate $? && continue 
     44                merr $err 
    5045        done 
    5146} 
     
    5348bridge_delif() { 
    5449        local err retval=0 
    55         for IF in $(bridge_ifaces) 
    56         do 
     50        for IF in $(bridge_ifaces); do 
    5751                mremove $IF 
    58                 if ! err=$(brctl delif $IFACE $IF 2>&1 1>&-) 
    59                 then 
    60                         mstate 1 
    61                         merr $err 
    62                         retval=1 
    63                 else 
    64                         mstate 0 
    65  
    66                         # remove bridge ends without assigned ip 
    67                         if ! ip a | grep inet | grep -q $IF 
    68                         then 
    69                                 ifdown $IF 
    70                         fi 
    71                 fi 
     52                err=$(brctl delif $IFACE $IF 2>&1 1>&-) 
     53                mstate $? || { merr $err; continue;} 
     54                # remove bridge ends without assigned ip 
     55                ip a | grep inet | grep -q $IF && continue 
     56                ifdown $IF 
    7257        done 
    73         return $retval 
    7458} 
    7559 
     
    7761        local err 
    7862        mcreate 
    79         if ! err=$(brctl addbr $IFACE 2>&1 1>&-) 
    80         then 
    81                 mstate 1 
    82                 merr $err 
    83                 return 1 
    84         fi 
    85         mstate 0 
     63        err=$(brctl addbr $IFACE 2>&1 1>&-) 
     64        mstate $? && return 
     65        merr $err 
     66        return 1 
    8667} 
    8768 
     
    8970        local err 
    9071        mdestroy 
    91         if ! err=$(brctl delbr $IFACE 2>&1 1>&-) 
    92         then 
     72        err=$(brctl delbr $IFACE 2>&1 1>&-) 
     73        mstate $? && return 
     74        merr $err 
     75        return 1 
     76
     77 
     78prereq_preup() { 
     79        if ! [[ -x $(whence -p brctl) ]]; then 
     80                mcreate 
    9381                mstate 1 
    94                 merr $err 
     82                merr "brctl not found" 
    9583                return 1 
    9684        fi 
    97         mstate 0 
     85 
     86        iface_exists || return 0 
     87 
     88        mcreate 
     89        mstate 1 
     90        if bridge_exists; then 
     91                merr "Interface already created" 
     92                return 1 
     93        fi 
     94        merr "Interface of this name already created" 
     95        return 1 
     96
     97 
     98prereq_down() { 
     99        bridge_exists && return 
     100        mdestroy 
     101        mstate 1 
     102        merr "No such device" 
     103        return 1 
    98104} 
    99105 
    100106if_preup() { 
    101         if ! [ -x "$(which brctl)" ] 
    102         then 
    103                 mcreate 
    104                 mstate 1 
    105                 merr "brctl executable not found" 
    106                 return 1 
    107         fi 
    108  
    109         if iface_exists 
    110         then 
    111                 mcreate 
    112                 mstate 1 
    113                 if ! bridge_exists 
    114                 then 
    115                         merr "Interface of this name already exists, cannot create bridge ${IFACE}" 
    116                         return 1 
    117                 fi 
    118                 merr "Bridge already created" 
    119                 return 1 
    120         fi 
    121  
    122         bridge_create || return 1 
     107        bridge_create || return 
    123108        bridge_depup 
    124109        bridge_addif 
     
    131116} 
    132117 
    133 if_down() { 
    134         if ! bridge_exists 
    135         then 
    136                 mdestroy 
    137                 mstate 1 
    138                 merr "Bridge doesn't exist" 
    139                 return 1 
    140         fi 
    141 } 
    142  
    143118if_postdown() { 
    144119        bridge_delif 
  • trunk/freewrt/package/fwifupdown/lib/lladdr

    r2958 r3409  
    77 
    88lladdr_preup() { 
    9         [ -z $IF_LLADDR ] && return 0 
     9        [[ -z $IF_LLADDR ]] && return 0 
    1010        case $IF_LLADDR in 
    1111        [0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]) ;; 
     
    1515                ;; 
    1616        esac 
    17         test -n "$IFACE" || return 0 
     17        [[ -n $IFACE ]] || return 0 
    1818        ip link set addr $IF_LLADDR dev "$IFACE" 
    1919} 
  • trunk/freewrt/package/fwifupdown/lib/tuntap

    r2959 r3409  
    88# 
    99 
     10IFACE_LOGICAL=1 
     11 
    1012iface_type() { 
    11         # HACK: use iface name only, no idea how to get the list of existing tuntap ifaces 
    12         # from system 
    1313        check_iface_name || \ 
    14         [ -n "$IF_TUNTAP" -o -n "$IF_TUNTAP_USER"
     14               [[ -n $IF_TUNTAP || -n $IF_TUNTAP_USER ]
    1515} 
    1616 
    1717check_iface_name() { 
    18         echo $IFACE | grep -q "^tun\|^tap[0-9][1-9]*$" 
     18        echo $IFACE | grep -q "^tun\|^tap[0-9][1-9]*$" && return 
     19        err="Unsupported device name, use tun* or tap*" 
     20        return 1 
    1921} 
    2022 
    2123check_kernel_support() { 
    22         [ -e /dev/net/tun ] && return 
     24        [[ -e /dev/net/tun ]] && return 
    2325        insmod tun >/dev/null 2>&1 ; sleep 1 
    24         [ -e /dev/net/tun ] && return 
    25         err="Your kernel lacks tuntap support" 
     26        [[ -e /dev/net/tun ]] && return 
     27        err="No tuntap kernel support" 
    2628        return 1 
    2729} 
    2830 
    2931check_openvpn_support() { 
    30         [ -x "$(which openvpn)" ] && return 
    31         err="openvpn executable not found" 
     32        [[ -x $(whence -p openvpn) ]] && return 
     33        err="openvpn not found" 
    3234        return 1 
    3335} 
    3436 
    3537check_tunctl_support() { 
    36         [ -x "$(which tunctl)" ] && return 
    37         err="tunctl executable not found" 
     38        [[ -x $(whence -p tunctl) ]] && return 
     39        err="tunctl not found" 
    3840        return 1 
    3941} 
     
    5860 
    5961tunctl_destroy() { 
    60         tunctl -d "${IFACE}" >/dev/null 2>&1 && return 
     62        tunctl -d $IFACE >/dev/null 2>&1 && return 
    6163        err="Destroying tuntap $IFACE failed" 
    6264        return 1 
     
    7274 
    7375set_methods() { 
    74         if [ x"$IF_TUNTAP" = x"openvpn" ] 
    75         then 
     76        if [[ $IF_TUNTAP = openvpn ]]; then 
    7677                check_openvpn_support || return 1 
    7778                fncreate="openvpn_create" 
     
    8687 
    8788if_preup() { 
    88         check_iface_name || { 
    89                 mcreate 
    90                 mstate 1 
    91                 merr "Tuntap name $IFACE is not supported, use tun* or tap* instead" 
    92                 return 1 
    93         } 
    94  
    95         if ! check_kernel_support 
    96         then 
     89        for fn in check_iface_name check_kernel_support set_methods; do 
     90                eval $fn && continue 
    9791                mcreate 
    9892                mstate 1 
    9993                merr $err 
    100         fi 
    101  
    102         if ! set_methods 
    103         then 
    104                 mcreate 
    105                 mstate 1 
    106                 merr $err 
    107         fi 
    108  
    109         if iface_exists 
    110         then 
    111                 mdestroy 
    112                 tuntap_destroy 
    113                 mstate $? || { 
    114                         merr $err 
    115                         return 1 
    116                 } 
    117         fi 
    118  
     94                return 1 
     95        done 
    11996        mcreate 
    12097        tuntap_create 
    121         mstate $? || { 
    122                 merr $err 
    123                 return 1 
    124         } 
     98        mstate $? && return 
     99        merr $err 
     100        return 1 
    125101} 
    126102 
    127103if_down() { 
    128         check_iface_name || { 
    129                 mdestroy 
    130                 mstate 1 
    131                 merr "Tuntap name $IFACE is not supported, use tun* or tap* instead" 
    132                 return 1 
    133         } 
    134  
    135         if ! set_methods 
    136         then 
     104        for fn in check_iface_name set_methods; do 
     105                eval $fn && continue 
    137106                mdestroy 
    138107                mstate 1 
    139108                merr $err 
    140109                return 1 
    141         fi 
     110        done 
    142111} 
    143112 
    144113if_postdown() { 
    145         if ! set_methods 
    146         then 
     114        if ! set_methods; then 
    147115                mdestroy 
    148116                mstate 1 
     
    153121        mdestroy 
    154122        tuntap_destroy 
    155         mstate $? || { 
    156                 merr $err 
    157                 return 1 
    158         } 
     123        mstate $? && return 
     124        merr $err 
     125        return 1 
    159126} 
    160127 
  • trunk/freewrt/package/fwifupdown/lib/vlan

    r3204 r3409  
    88# 
    99 
     10IFACE_LOGICAL=1 
     11 
    1012iface_type() { 
    1113        echo $IFACE | grep -q ':' && return 1 
    12         if [ "$MODE" = "start" ] 
    13         then 
     14        if [[ $MODE = start ]]; then 
    1415                case "$IFACE" in 
    1516                vlan0*) 
     
    5354        local backend backend_valid ports 
    5455 
    55         for vl in $(echo /proc/switch/eth0/vlan/* | sed 's/\/proc\/switch\/eth0\/vlan\/1[[:space:]]//') 
    56         do 
    57                 for ports_busy in $(cat ${vl}/ports) 
    58                 do 
     56        for vl in $(echo /proc/switch/eth0/vlan/* | sed 's/\/proc\/switch\/eth0\/vlan\/1[[:space:]]//'); do 
     57                for ports_busy in $(cat ${vl}/ports); do 
    5958                        ports=$(echo $ports_busy | grep [0-9]$) 
    60                         if echo $IF_SWITCH_PORTS | grep -q ${ports:-a} 
    61                         then 
     59                        if echo $IF_SWITCH_PORTS | grep -q ${ports:-a}; then 
    6260                                err="Configured switch port(s) already in use" 
    6361                                return 1 
    6462                        fi 
    65                         if backend=$(echo $ports_busy | grep [0-9]..*$) 
    66                         then 
    67                                 if ! echo $IF_SWITCH_PORTS|grep -q $(echo $backend|sed 's/[^0-9]//g') 
    68                                 then 
     63                        if backend=$(echo $ports_busy | grep [0-9]..*$); then 
     64                                if ! echo $IF_SWITCH_PORTS|grep -q $(echo $backend|sed 's/[^0-9]//g'); then 
    6965                                        err="No or wrong switch backend port configured" 
    7066                                        return 1 
     
    10096        check_name_type || return 
    10197 
    102         if ! [ -x "$(which vconfig)" ] 
    103         then 
     98        if [[ ! -x "$(whence -p vconfig)" ]]; then 
    10499                mstate 1 
    105100                merr "vconfig executable not found" 
    106101        fi 
    107102 
    108         if ! [ -d /proc/switch/$IF_VLAN_RAW_DEVICE ] || ! iface_exists $IF_VLAN_RAW_DEVICE 
    109         then 
     103        if [[ ! -d /proc/switch/$IF_VLAN_RAW_DEVICE ]] || ! iface_exists $IF_VLAN_RAW_DEVICE; then 
    110104                mstate 1 
    111105                merr "Raw device $IF_VLAN_RAW_DEVICE does not exist" 
     
    113107        fi 
    114108 
    115         if [ -z "$IF_SWITCH_PORTS" ] 
    116         then 
     109        if [[ -z $IF_SWITCH_PORTS ]]; then 
    117110                mstate 1 
    118111                merr "No switch ports configured" 
     
    121114 
    122115        # return if wrong portconfig 
    123         if ! check_port_config 
    124         then 
     116        if ! check_port_config; then 
    125117                mstate 1 
    126118                merr $err 
     
    129121 
    130122        # configure switch 
    131         if [ "$(cat /proc/switch/${IF_VLAN_RAW_DEVICE}/enable)" != "1" ] 
    132         then 
    133                 if ! echo 1 > /proc/switch/${IF_VLAN_RAW_DEVICE}/enable 2>&- 
    134                 then 
     123        if [[ $(cat /proc/switch/${IF_VLAN_RAW_DEVICE}/enable) != 1 ]]; then 
     124                if ! echo 1 > /proc/switch/${IF_VLAN_RAW_DEVICE}/enable 2>&-; then 
    135125                        mstate 1 
    136126                        merr "Enabeling switch $IF_VLAN_RAW_DEVICE failed" 
     
    139129        fi 
    140130 
    141         if [ "$(cat /proc/switch/${IF_VLAN_RAW_DEVICE}/enable_vlan)" != "1" ] 
    142         then 
    143                 if ! echo 1 > /proc/switch/${IF_VLAN_RAW_DEVICE}/enable_vlan 2>&- 
    144                 then 
     131        if [[ $(cat /proc/switch/${IF_VLAN_RAW_DEVICE}/enable_vlan) != 1 ]]; then 
     132                if ! echo 1 > /proc/switch/${IF_VLAN_RAW_DEVICE}/enable_vlan 2>&-; then 
    145133                        mstate 1 
    146134                        merr "Enabeling vlan on switch $IF_VLAN_RAW_DEVICE failed" 
     
    149137        fi 
    150138 
    151         if ! echo "$IF_SWITCH_PORTS" > /proc/switch/$IF_VLAN_RAW_DEVICE/vlan/$VLANID/ports 2>&- 
    152         then 
     139        if ! echo "$IF_SWITCH_PORTS" > /proc/switch/$IF_VLAN_RAW_DEVICE/vlan/$VLANID/ports 2>&-; then 
    153140                mstate 1 
    154141                merr "Configuring ports for switch $IF_VLAN_RAW_DEVICE id $VLANID failed" 
     
    157144 
    158145        # set name type 
    159         if ! vconfig set_name_type "$VLAN_NAME_TYPE" >/dev/null 2>&1 
    160         then 
     146        if ! vconfig set_name_type "$VLAN_NAME_TYPE" >/dev/null 2>&1; then 
    161147                mstate 1 
    162148                merr "Setting vconfig name type to $VLAN_NAME_TYPE failed" 
     
    165151 
    166152        # bringing up raw device if down 
    167         if ! ip link show |grep "${IF_VLAN_RAW_DEVICE}:" |grep -q UP 
    168         then 
    169                 if ! ip link set up dev $IF_VLAN_RAW_DEVICE >/dev/null 2>&1 
    170                 then 
     153        if ! ip link show |grep "${IF_VLAN_RAW_DEVICE}:" |grep -q UP; then 
     154                if ! ip link set up dev $IF_VLAN_RAW_DEVICE >/dev/null 2>&1; then 
    171155                        mstate 1 
    172156                        merr "Bringing up raw device $IF_VLAN_RAW_DEVICE failed" 
     
    176160 
    177161        # adding virtual interface 
    178         if ! iface_exists 
    179         then 
    180                 if ! vconfig add $IF_VLAN_RAW_DEVICE $VLANID >/dev/null 2>&1 
    181                 then 
     162        if ! iface_exists; then 
     163                if ! vconfig add $IF_VLAN_RAW_DEVICE $VLANID >/dev/null 2>&1; then 
    182164                        mstate 1 
    183165                        merr "Adding device ${IF_VLAN_RAW_DEVICE}.${VLANID} failed" 
     
    196178        mdestroy 
    197179 
    198         if ! [ -d /proc/switch/$IF_VLAN_RAW_DEVICE ] || ! iface_exists $IF_VLAN_RAW_DEVICE 
    199         then 
     180        if ! [[ -d /proc/switch/$IF_VLAN_RAW_DEVICE ]] || ! iface_exists $IF_VLAN_RAW_DEVICE; then 
    200181                mstate 1 
    201182                merr "Raw device $IF_VLAN_RAW_DEVICE does not exist" 
     
    204185 
    205186        # remove vlan 
    206         if ! vconfig rem $IFACE >/dev/null 2>&1 
    207         then 
     187        if ! vconfig rem $IFACE >/dev/null 2>&1; then 
    208188                mstate 1 
    209189                merr "Removing vlan $IFACE failed" 
     
    212192 
    213193        # remove switch ports 
    214         if ! echo > /proc/switch/$IF_VLAN_RAW_DEVICE/vlan/$VLANID/ports 
    215         then 
     194        if ! echo > /proc/switch/$IF_VLAN_RAW_DEVICE/vlan/$VLANID/ports; then 
    216195                mstate 1 
    217196                merr "Resetting switch ports for $IFACE failed"