Bashscript: Check ob Wireless Verbindung oder über Kabel

Dieses Bashscript schaut zunächst ob eine Verbindung über Kabel möglich
ist, wenn nicht oder wenn die Verbindung nicht über ein
SWIS-Konto-Gateway läuft, soll Wireless getestet werden.
Das Problem ist, dass es eher lang dauert (manchmal bis zu einer Minute)
bis eine Verbindung gefunden wird, falls kein Kabel angeschlossen ist.
Manchmal erhält der DHCP-Client auch keine IP u.s.w. im ersten Anlauf
und dann muss das Script nochmals gestartet werden. Vielleicht hat
jemand Verbesserungsvorschläge oder entdeckt einen "Denkfehler".

#!/bin/sh

### WLAN/LAN Configuration Settings ###
SSID=MYNET
PASSWD=cavallo123
WLAN_DEV=eth1
LAN_DEV=eth0
IP_SERVER=192.168.1.1 #this is the standard installation IP of the
SWIS-WAP.
            #it will be taken if route can't give back a default gateway
IP_EXPL=192.168.1.123

CMDNAME="-e # start_lan.sh\t\t" #for stdout info

set_networkif () {
    echo $CMDNAME " [set_networkif]"
    echo "# --- SWIS-Config: Settings made by /etc/swis/start_lan.sh
---" > /etc/network/interfaces
    echo "auto lo" >> /etc/network/interfaces
    echo "iface lo inet loopback" >> /etc/network/interfaces
    echo "auto $LAN_DEV" >> /etc/network/interfaces
    echo "iface $LAN_DEV inet dhcp" >> /etc/network/interfaces
    echo "auto $WLAN_DEV" >> /etc/network/interfaces
    echo "iface $WLAN_DEV inet dhcp" >> /etc/network/interfaces
    echo "# --- SWIS-Config: Finished... ---" >> /etc/network/interfaces
}

check_SWIS () {
    rm -rf /tmp/swis-easy-info
    wget -t1 --timeout=1 --connect-timeout=1 http://1.2.3.4/infofile -O
/tmp/swis-easy-info >/dev/null 2>&1
    chmod 777 /tmp/swis-easy-info
    if [ -s /tmp/swis-easy-info ]; then
        echo $CMDNAME " [check_SWIS]\t<OK>"
        return 0
    else
        echo $CMDNAME " [check_SWIS]\t<FAILED>"
        return 1
    fi
}

check_cardsettings () {
    if [ `cardctl status | grep -c "PC Card"` -ge 1 ]; then
        if [ `iwconfig | grep -c "Link Quality"` -ge 1 ]; then
            return 0
        fi
    fi
    return 1
}

wlan_settings () {
    #check if card settings alright
    check_cardsettings
    if [ $? -ne 0 ]; then
        #first do a clear eject, if user ejected card manualy
        cardctl eject
        cardctl insert
        sleep 2 #wait for device to start up
    fi
    iwconfig $WLAN_DEV essid $SSID
    iwconfig $WLAN_DEV key s:$PASSWD
}

* Peter Moser (FutureBrain Network Solutions) (peter.moser(a)futurebrain.it) wrote:
Nur wei schnelle tips..

set_networkif () {
   echo $CMDNAME " [set_networkif]"
   echo "# --- SWIS-Config: Settings made by /etc/swis/start_lan.sh
---" > /etc/network/interfaces
   echo "auto lo" >> /etc/network/interfaces
   echo "iface lo inet loopback" >> /etc/network/interfaces
   echo "auto $LAN_DEV" >> /etc/network/interfaces
   echo "iface $LAN_DEV inet dhcp" >> /etc/network/interfaces
   echo "auto $WLAN_DEV" >> /etc/network/interfaces
   echo "iface $WLAN_DEV inet dhcp" >> /etc/network/interfaces
   echo "# --- SWIS-Config: Finished... ---" >> /etc/network/interfaces
}

Das koennte sauberer sein:
set_networkif () {
cat<<EOF > /etc/network/interface
# --- SWIS-Config: Settings made by /etc/swis/start_lan.sh ---
auto lo
iface lo inet loopback
auto $LAN_DEV
iface $LAN_DEV inet dhcp
auto $WLAN_DEV
iface $WLAN_DEV inet dhcp
# --- SWIS-Config: Finished... ---
EOF
}

   rm -rf /tmp/swis-easy-info

Nie statische /tmp Eintraege benutzen
mktemp(1) dafuer sollte man benutzen

mfg,
Michele

hab aus versehen die alte version des scripts geschickt. bei der alten
sind die zeilen check_SWIS mit dhclient... vertauscht. was natürlich
nicht funktionieren kann, da er ja noch keine verbindung hat, die er
braucht um die info datei vom wsg abzufragen.

ajo, noch etwas das setzen mit der fixen ip funktioniert nur bei einem
client. gibt es da vielleicht eine bewährte lösung wo der gateway fix
gesetzt wird und die ips weiterlaufen von 192.168.1.1 bis 192.168.1.xy.
wobei natürlich geschaut werden sollte ob eine ip bereits in verwendung ist?