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

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

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