617c272a5571882af4c717640440993f946ce5c7
[grml-network.git] / sbin / grml-network
1 #!/bin/bash
2 # Filename:      grml-network
3 # Purpose:       simple frontend to varous connection tools
4 # Authors:       (c) Klaus Knopper Mar 2004, (c) Michael Prokop <mika@grml.org>
5 # Bug-Reports:   see http://grml.org/bugs/
6 # License:       This file is licensed under the GPL v2.
7 ################################################################################
8
9 PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin"
10 export PATH
11
12 if [ $UID != 0 ] ; then
13    echo Error: become root before starting $0 >& 2
14    exit 100
15 fi
16
17 # XDIALOG_HIGH_DIALOG_COMPAT=1
18 # export XDIALOG_HIGH_DIALOG_COMPAT
19
20 CHECK=""
21 [ "$1" = "check" ] && CHECK="yes"
22
23 TMP=$(mktemp)
24
25 bailout(){
26   rm -f "$TMP"
27   exit $1
28 }
29
30 DIALOG="dialog"
31 # [ -n "$DISPLAY" ] && [ -x /usr/bin/Xdialog ] && DIALOG="Xdialog"
32
33 trap bailout 1 2 3 15
34
35 # LANGUAGE etc.
36 [ -r /etc/default/locale ] && . /etc/default/locale
37
38 gauge(){
39   rm -f "$TMP.done"
40   status=0
41   while [ ! -e "$TMP.done" ]; do
42     echo "$status"
43     status="`expr \( 100 - $status \) / 4 + $status`"
44     sleep 1
45   done | $DIALOG --title "$0" --gauge "$1" 8 75 0
46 }
47
48 # Stop status bar
49 killgauge(){
50   touch "$TMP.done" ; wait ; rm -f "$TMP.done"
51 }
52
53 # Provider specific setup - menu
54 provider () {
55   MENUINTERNET=$($DIALOG --stdout --clear --title "$PN" --menu \
56   "This script is a submenu of grml-network to set up an internet connection" 14 65 7 \
57   "TUG"      "Connect via vpnc to TU Graz" \
58   "VCGraz"   "Connect via pptp to VC-Graz" \
59   "Inode"    "Connect via pptp to Inode" \
60   "Students" "Connect via pptp to Inode-Students" \
61   "Exit" "Exit this program")
62
63   retval=$?
64   case $retval in
65       (0)
66         if [ $MENUINTERNET == TUG ] ; then
67                 exec grml-vpnc-tugraz
68         fi
69         if [ $MENUINTERNET == VCGraz ] ; then
70                 exec grml-pptp-vcgraz
71         fi
72         if [ $MENUINTERNET == Inode ] ; then
73                 exec grml-pptp-inode
74         fi
75         if [ $MENUINTERNET == Students ] ; then
76                 exec grml-pptp-xdsl-students
77         fi ;;
78       (1)   echo "Cancel pressed." ;;
79       (255) echo "ESC pressed."    ;;
80   esac
81 }
82
83 main(){
84   if [ -z "$NOCHECK" -a -x /usr/bin/nmap ] ; then
85   gauge "Checking network status..." &
86     STATUS=""
87     GW="`echo $(route -n | awk '/^0\.0\.0\.0/{print $2}')`"
88     GWDEV="`echo $(route -n | awk '/^0\.0\.0\.0/{print $NF}')`"
89     NMAP="$(nmap -sP --host_timeout 4000 --max_rtt_timeout 4000 $GW 2>/dev/null)"
90
91     if [ "$?" = 0 ]; then
92       echo "$NMAP" | grep -q "down" >/dev/null 2>&1 || STATUS="online"
93     fi
94
95     killgauge
96
97     if [ -n "$STATUS" ]; then
98        [ -n "$CHECK" ] && exit 0 # exit if we are already connected
99        STATUS="Online ($GWDEV)"
100     else
101        STATUS="Offline"
102     fi
103   else
104     STATUS="Unknown"
105   fi
106
107 # Language-dependent Messages
108 case "$LANGUAGE" in
109   de*|at*|ch*)
110     TITLE1="Netzwerk-Setup"
111     STATUS="Status: $STATUS"
112     MESSAGE1="Bitte auswaehlen:"
113     MODEMSETUP="/dev/modem-Schnittstelle (neu) konfigurieren"
114     NETCARD="Netzwerkkarten (LAN/WLAN) Konfiguration"
115     WIRELESS="Wireless Zugang"
116     GPRS="Einwahl per Handy/GPRS"
117     DSL="Einwahl per DSL-Modem"
118     ISDN="Einwahl per ISDN"
119     MODEM="Einwahl per Analogmodem"
120     PROVIDER="Provider spezifische Einstellungen"
121     EXIT="Beenden"
122     ;;
123   *)
124     TITLE1="Network Setup"
125     STATUS="Current state: $STATUS"
126     MESSAGE1="Please select:"
127     MODEMSETUP="(re)configure /dev/modem device"
128     NETCARD="Configure network card (LAN/WLAN)"
129     WIRELESS="Wireless access"
130     GPRS="Dial via cellphone/GPRS"
131     DSL="Dial via DSL-adapter"
132     ISDN="Dial via ISDN"
133     MODEM="Dial via analog modem"
134     PROVIDER="Provider specific setup"
135     EXIT="Quit"
136    ;;
137 esac
138
139 # Shortcut description selected
140 TYPES=(netcardconfig "$NETCARD" \
141 provider "$PROVIDER" \
142 modemlink "$MODEMSETUP" \
143 gprsconnect "$GPRS" \
144 pppoeconf "$DSL" \
145 isdnconfig "$ISDN" \
146 wvdial "$MODEM")
147
148 type wvdial      >/dev/null 2>&1 || { unset TYPES[13]; unset TYPES[12]; }
149 type isdnconfig  >/dev/null 2>&1 || { unset TYPES[11]; unset TYPES[10];  }
150 type pppoeconf   >/dev/null 2>&1 || { unset TYPES[9];  unset TYPES[8];  }
151 type gprsconnect >/dev/null 2>&1 || { unset TYPES[7];  unset TYPES[6];  }
152 type modemlink   >/dev/null 2>&1 || { unset TYPES[5];  unset TYPES[4];  }
153
154 rm -f "$TMP"
155
156 $DIALOG --clear --cancel-label "$EXIT" --title "$TITLE1" --menu "$STATUS
157
158 $MESSAGE1" 18 75 10 "${TYPES[@]}" 2>"$TMP" || bailout 1
159
160 read TYPE <"$TMP"
161 TYPE="${TYPE#\"}"; TYPE="${TYPE%\"}"
162 rm -f "$TMP"
163
164 case "$TYPE" in
165   wvdial) [ -e /etc/wvdial.conf ] || wvdialconf /etc/wvdial.conf ;;
166 esac
167
168 eval $TYPE
169 return "$?"
170 }
171
172 if [ -z "$NOCHECK" ] ; then
173   while true; do
174     main
175   done
176 else
177   main
178 fi
179
180 ## END OF FILE #################################################################