Annotation of elwix/config/etc/default/rc.d/009.aggr_dev.stop, revision 1.3

1.2       misho       1: #!/bin/sh
                      2: #
                      3: # (C)`13 ELWIX network aggregation device appliance
                      4: #      by Michael Pounov <misho@elwix.org>
                      5: #
                      6: # $Id: 009.aggr_dev.stop,v 1.1.2.1 2013/01/23 12:49:12 misho Exp $
                      7: 
                      8: IFACES=""
                      9: LANPORT=""
                     10: BRIDGE=""
                     11: LAGG=""
                     12: LAGGPORTS=""
                     13: 
                     14: CLEANUP_FILE="/tmp/cleanup.agg"
                     15: 
                     16: select_eth()
                     17: {
                     18:        local RETIF=""
                     19: 
                     20:        IFACES=$(ifconfig -l)
                     21: 
                     22:        for i in $IFACES; do
                     23:                ISETH=$(ifconfig $i | grep "ether")
                     24:                if [ -n "$ISETH" ]; then
                     25:                        RETIF="$RETIF $i"
                     26:                fi
                     27:        done
                     28: 
                     29:        IFACES=$RETIF
                     30: }
                     31: 
                     32: cleanup()
                     33: {
                     34:        echo ">> Emergency destroy clones ..."
                     35:        ifconfig $BRIDGE destroy >/dev/null 2>&1
                     36:        ifconfig $LAGG destroy >/dev/null 2>&1
                     37:        rm -f $CLEANUP_FILE
                     38: }
                     39: 
                     40: up_lan()
                     41: {
                     42:        echo "+ Up lan port $1"
                     43:        if ! `ifconfig $1 description "LAN port" up`; then
                     44:                exit 1
                     45:        else
                     46:                LANPORT=$1
                     47:        fi
                     48: }
                     49: 
                     50: up_others()
                     51: {
                     52:        if [ $# -lt 2 ]; then
                     53:                echo "Error:: Not enough ethernet interfaces for aggregation!"
                     54:                exit 2
                     55:        else
                     56:                shift
                     57:                LAGGPORTS=$*
                     58:        fi
                     59: 
                     60:        for i in $LAGGPORTS; do
                     61:                echo "+ Up aggregation port $i"
                     62:                if ! `ifconfig $i description "Aggregation port" up`; then
                     63:                        exit 2
                     64:                fi
                     65:        done
                     66: }
                     67: 
                     68: bring_clones()
                     69: {
                     70:        rm -f $CLEANUP_FILE
                     71: 
                     72:        BRIDGE=$(ifconfig bridge create up)
                     73:        if [ -z "$BRIDGE" ]; then
                     74:                exit 3
                     75:        else
                     76:                echo "+ Create link-bridge interface $BRIDGE"
                     77:                echo $BRIDGE >>/tmp/cleanup.agg
                     78:        fi
                     79: 
                     80:        LAGG=$(ifconfig lagg create laggproto roundrobin up)
                     81:        if [ -z "$LAGG" ]; then
                     82:                ifconfig $BRIDGE destroy >/dev/null 2>&1
                     83:                rm -f $CLEANUP_FILE
                     84:                exit 3
                     85:        else
                     86:                echo "+ Create link-aggregation interface $LAGG"
                     87:                echo $LAGG >>/tmp/cleanup.agg
                     88:        fi
                     89: }
                     90: 
                     91: join2lagg()
                     92: {
                     93:        echo "+ Join to aggregation interface $LAGG ports $LAGGPORTS"
                     94: 
                     95:        for i in $LAGGPORTS; do
                     96:                if ! `ifconfig $LAGG laggport $i`; then
                     97:                        cleanup
                     98:                        exit 4
                     99:                fi
                    100:        done
                    101: }
                    102: 
                    103: join2bridge()
                    104: {
                    105:        echo "+ Join to bridge interface $BRIDGE ports $LANPORT $LAGG"
                    106: 
                    107:        if ! `ifconfig $BRIDGE addm $LANPORT addm $LAGG`; then
                    108:                cleanup
                    109:                exit 5
                    110:        fi
                    111: }
                    112: 
                    113: # main()
                    114: if [ -n "$1" ]; then
                    115:        echo ">> Cleanup cloned interfaces ..."
                    116: 
                    117:        if [ -r $CLEANUP_FILE ]; then
                    118:                while read line; do
                    119:                        if ! `ifconfig $line >/dev/null 2>&1`; then
                    120:                                break
                    121:                        else
                    122:                                ifconfig $line destroy >/dev/null 2>&1
                    123:                        fi
                    124:                done <$CLEANUP_FILE
                    125: 
                    126:                rm -f $CLEANUP_FILE
                    127:        fi
                    128: else
                    129:        echo ">> Setup aggregation device ..."
                    130:        select_eth
                    131: 
                    132:        up_lan $IFACES
                    133:        up_others $IFACES
                    134: 
                    135:        bring_clones
                    136:        join2lagg
                    137:        join2bridge
                    138: fi
                    139: 
                    140: echo ">> Done."

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>