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