#!/bin/bash # Filename: grml-network # Purpose: simple frontend to varous connection tools # Authors: (c) Klaus Knopper Mar 2004, (c) Michael Prokop # Bug-Reports: see http://grml.org/bugs/ # License: This file is licensed under the GPL v2. ################################################################################ PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin" export PATH if [ $(id -ru) -ne 0 ] ; then echo 1>&2 "Error: please run this script with uid 0 (root)." ; exit 1 fi # XDIALOG_HIGH_DIALOG_COMPAT=1 # export XDIALOG_HIGH_DIALOG_COMPAT CHECK="" [ "$1" = "check" ] && CHECK="yes" TMP=$(mktemp) bailout(){ rm -f "$TMP" exit $1 } DIALOG="dialog" # [ -n "$DISPLAY" ] && [ -x /usr/bin/Xdialog ] && DIALOG="Xdialog" trap bailout 1 2 3 15 # LANGUAGE etc. [ -r /etc/default/locale ] && . /etc/default/locale gauge(){ rm -f "$TMP.done" status=0 while [ ! -e "$TMP.done" ]; do echo "$status" status="`expr \( 100 - $status \) / 4 + $status`" sleep 1 done | $DIALOG --title "$0" --gauge "$1" 8 75 0 } # Stop status bar killgauge(){ touch "$TMP.done" ; wait ; rm -f "$TMP.done" } main(){ if [ -z "$NOCHECK" -a -x /usr/bin/nmap ] ; then gauge "Checking network status..." & STATUS="" GW="`echo $(route -n | awk '/^0\.0\.0\.0/{print $2}')`" GWDEV="`echo $(route -n | awk '/^0\.0\.0\.0/{print $NF}')`" NMAP="$(nmap -sP --host_timeout 4000 --max_rtt_timeout 4000 $GW 2>/dev/null)" if [ "$?" = 0 ]; then echo "$NMAP" | grep -q "down" >/dev/null 2>&1 || STATUS="online" fi killgauge if [ -n "$STATUS" ]; then [ -n "$CHECK" ] && exit 0 # exit if we are already connected STATUS="Online ($GWDEV)" else STATUS="Offline" fi else STATUS="Unknown" fi # Language-dependent Messages case "$LANGUAGE" in de*|at*|ch*) TITLE1="Netzwerk-Setup" STATUS="Status: $STATUS" MESSAGE1="Bitte auswaehlen:" NETCARD="Netzwerkkarten (LAN/WLAN) Konfiguration" DSL="Einwahl per DSL-Modem" ISDN="Einwahl per ISDN" EXIT="Beenden" ;; *) TITLE1="Network Setup" STATUS="Current state: $STATUS" MESSAGE1="Please select:" NETCARD="Configure network card (LAN/WLAN)" DSL="Dial via DSL-adapter" ISDN="Dial via ISDN" EXIT="Quit" ;; esac # Shortcut description selected TYPES=(netcardconfig "$NETCARD" \ pppoeconf "$DSL" \ isdnconfig "$ISDN") type pppoeconf >/dev/null 2>&1 || { unset TYPES[2]; unset TYPES[3]; } type isdnconfig >/dev/null 2>&1 || { unset TYPES[4]; unset TYPES[5]; } rm -f "$TMP" $DIALOG --clear --cancel-label "$EXIT" --title "$TITLE1" --menu "$STATUS $MESSAGE1" 18 75 10 "${TYPES[@]}" 2>"$TMP" || bailout 1 read TYPE <"$TMP" TYPE="${TYPE#\"}"; TYPE="${TYPE%\"}" rm -f "$TMP" eval $TYPE return "$?" } if [ -z "$NOCHECK" ] ; then while true; do main done else main fi ## END OF FILE #################################################################