1433d6423SLionel Sambuc#!/bin/sh 2433d6423SLionel Sambuc# 3*9a8b4f56SDavid van Moolenbroek# netconf 0.2 - Configure network 4433d6423SLionel Sambuc# 5433d6423SLionel Sambuc# Changes: 6*9a8b4f56SDavid van Moolenbroek# v0.2: rewrite for NetBSD network infrastructure 7*9a8b4f56SDavid van Moolenbroek# - the primary choice is now for an interface, not a network card; 8*9a8b4f56SDavid van Moolenbroek# - manual driver configuration is now an exception; 9*9a8b4f56SDavid van Moolenbroek# - the menu transition system is slightly more solid; 10*9a8b4f56SDavid van Moolenbroek# - all non-interactive functionality has been removed. 11433d6423SLionel Sambuc# 12433d6423SLionel Sambuc 13433d6423SLionel Sambuc# Get system config 14433d6423SLionel Sambuc. /etc/rc.conf 15433d6423SLionel Sambuc 16433d6423SLionel SambucLOCALRC=/usr/etc/rc.local 17*9a8b4f56SDavid van MoolenbroekIFCONF=/etc/ifconfig. 18*9a8b4f56SDavid van MoolenbroekRESOLVCONF=/etc/resolv.conf 19433d6423SLionel SambucHOSTNAME=/etc/hostname.file 20433d6423SLionel SambucUSRKBFILE=/.usrkb 21433d6423SLionel Sambuc 22433d6423SLionel Sambucprefix="" 23433d6423SLionel Sambuccd="no" # running from cd? 24*9a8b4f56SDavid van Moolenbroekchanged="no" # have any ifconfig.if(5) files been changed? 25433d6423SLionel Sambuc 26433d6423SLionel Sambucusage() 27433d6423SLionel Sambuc{ 28433d6423SLionel Sambuc cat >&2 <<'EOF' 29433d6423SLionel SambucUsage: 30433d6423SLionel Sambuc 31*9a8b4f56SDavid van Moolenbroek netconf [-lh] [-p <prefix>] 32433d6423SLionel Sambuc 33433d6423SLionel Sambuc flags: 34*9a8b4f56SDavid van Moolenbroek -l Print a list of configurable interfaces 35*9a8b4f56SDavid van Moolenbroek -h Print this help file 36*9a8b4f56SDavid van Moolenbroek -p Set a path prefix for all configuration files (e.g., /mnt) 37433d6423SLionel SambucEOF 38433d6423SLionel Sambuc exit 1 39433d6423SLionel Sambuc} 40433d6423SLionel Sambuc 41*9a8b4f56SDavid van Moolenbroekbackup_file() 42433d6423SLionel Sambuc{ 43*9a8b4f56SDavid van Moolenbroek # Do not make backups if we're running from CD. 44*9a8b4f56SDavid van Moolenbroek if [ "$cd" != "yes" -a -f "$1" ]; then 45*9a8b4f56SDavid van Moolenbroek mv "$1" "$1~" || exit 1 46*9a8b4f56SDavid van Moolenbroek echo 47*9a8b4f56SDavid van Moolenbroek echo "Backed up $1 to $1~" 48*9a8b4f56SDavid van Moolenbroek fi 49*9a8b4f56SDavid van Moolenbroek} 50*9a8b4f56SDavid van Moolenbroek 51*9a8b4f56SDavid van Moolenbroekselect_number() 52*9a8b4f56SDavid van Moolenbroek{ 53*9a8b4f56SDavid van Moolenbroek while true; do 54*9a8b4f56SDavid van Moolenbroek echo -n "$4 [$3] " 55*9a8b4f56SDavid van Moolenbroek read input 56*9a8b4f56SDavid van Moolenbroek case "$input" in 57*9a8b4f56SDavid van Moolenbroek '') 58*9a8b4f56SDavid van Moolenbroek return $3 59*9a8b4f56SDavid van Moolenbroek ;; 60*9a8b4f56SDavid van Moolenbroek *[!0-9]*) 61*9a8b4f56SDavid van Moolenbroek ;; 62*9a8b4f56SDavid van Moolenbroek *) 63*9a8b4f56SDavid van Moolenbroek [ $input -ge $1 -a $input -le $2 ] && return $input 64*9a8b4f56SDavid van Moolenbroek ;; 65*9a8b4f56SDavid van Moolenbroek esac 66433d6423SLionel Sambuc done 67*9a8b4f56SDavid van Moolenbroek} 68*9a8b4f56SDavid van Moolenbroek 69*9a8b4f56SDavid van Moolenbroekinterfaces() 70*9a8b4f56SDavid van Moolenbroek{ 71*9a8b4f56SDavid van Moolenbroek # Get a list of interfaces that are not virtual (i.e., cloners). There 72*9a8b4f56SDavid van Moolenbroek # is always one virtual interface type ("lo", loopback). 73*9a8b4f56SDavid van Moolenbroek cloners_regex='^('`ifconfig -C | sed 's/ /[0-9]|/g'`'[0-9])' 74*9a8b4f56SDavid van Moolenbroek iflist=`ifconfig -l | tr ' ' '\n' | grep -vE "$cloners_regex"` 75*9a8b4f56SDavid van Moolenbroek 76*9a8b4f56SDavid van Moolenbroek ifcount=0 77*9a8b4f56SDavid van Moolenbroek ifunconf=0 # the first interface with no configuration file, or 0 78*9a8b4f56SDavid van Moolenbroek if [ -z "$iflist" ]; then 79*9a8b4f56SDavid van Moolenbroek echo " No network hardware interfaces detected!" 80433d6423SLionel Sambuc else 81*9a8b4f56SDavid van Moolenbroek for if in $iflist; do 82*9a8b4f56SDavid van Moolenbroek ifcount=$(($ifcount + 1)) 83*9a8b4f56SDavid van Moolenbroek if [ -r $IFCONF$if ]; then 84*9a8b4f56SDavid van Moolenbroek info="($1)" 85*9a8b4f56SDavid van Moolenbroek else 86*9a8b4f56SDavid van Moolenbroek [ $ifunconf -eq 0 ] && ifunconf=$ifcount 87*9a8b4f56SDavid van Moolenbroek info="" 88433d6423SLionel Sambuc fi 89*9a8b4f56SDavid van Moolenbroek printf "%2d. %-8s %s\n" $ifcount "$if" "$info" 90433d6423SLionel Sambuc done 91433d6423SLionel Sambuc fi 92433d6423SLionel Sambuc} 93433d6423SLionel Sambuc 94433d6423SLionel Sambucdo_step1() 95433d6423SLionel Sambuc{ 96*9a8b4f56SDavid van Moolenbroek echo " 97*9a8b4f56SDavid van MoolenbroekThe following network interfaces are available for configuration. These are 98*9a8b4f56SDavid van Moolenbroekinterfaces corresponding to network drivers that are currently running. If no 99*9a8b4f56SDavid van Moolenbroekinterface is listed for your network card here, then either MINIX 3 does not 100*9a8b4f56SDavid van Moolenbroeksupport your card, or, if it is not a plug-and-play device, it may require 101*9a8b4f56SDavid van Moolenbroekmanual configuration first. 102433d6423SLionel Sambuc 103*9a8b4f56SDavid van MoolenbroekPlease choose the interface you would like to configure, or another option. 104*9a8b4f56SDavid van Moolenbroek" 105*9a8b4f56SDavid van Moolenbroek interfaces "already configured" 106*9a8b4f56SDavid van Moolenbroek echo 107*9a8b4f56SDavid van Moolenbroek manual_choice=$(($ifcount + 1)) 108*9a8b4f56SDavid van Moolenbroek quit_choice=$(($ifcount + 2)) 109*9a8b4f56SDavid van Moolenbroek printf "%2d. Manually configure an ethernet driver\n" $manual_choice 110*9a8b4f56SDavid van Moolenbroek printf "%2d. Quit\n\n" $quit_choice 111433d6423SLionel Sambuc 112*9a8b4f56SDavid van Moolenbroek default_choice=$ifunconf 113*9a8b4f56SDavid van Moolenbroek [ $default_choice -eq 0 ] && default_choice=$quit_choice 114433d6423SLionel Sambuc 115*9a8b4f56SDavid van Moolenbroek select_number 1 $quit_choice $default_choice "Interface choice?" 116*9a8b4f56SDavid van Moolenbroek choice=$? 117*9a8b4f56SDavid van Moolenbroek 118*9a8b4f56SDavid van Moolenbroek case $choice in 119*9a8b4f56SDavid van Moolenbroek $manual_choice) 120*9a8b4f56SDavid van Moolenbroek step=do_stepM 121*9a8b4f56SDavid van Moolenbroek ;; 122*9a8b4f56SDavid van Moolenbroek $quit_choice) 123*9a8b4f56SDavid van Moolenbroek ;; 124*9a8b4f56SDavid van Moolenbroek *) 125*9a8b4f56SDavid van Moolenbroek ifchoice="$(echo $iflist | cut -d' ' -f$choice)" 126*9a8b4f56SDavid van Moolenbroek step=do_step2 127*9a8b4f56SDavid van Moolenbroek esac 128433d6423SLionel Sambuc} 129433d6423SLionel Sambuc 130*9a8b4f56SDavid van Moolenbroekdo_stepM() 131433d6423SLionel Sambuc{ 132*9a8b4f56SDavid van Moolenbroek # TODO: it would be nice if this list changed on a per-platform basis.. 133*9a8b4f56SDavid van Moolenbroek echo " 134*9a8b4f56SDavid van MoolenbroekMINIX 3 has drivers for a limited number of older cards that require manual 135*9a8b4f56SDavid van Moolenbroekconfiguration. They are shown below. Please choose one of the listed options. 136433d6423SLionel Sambuc 137*9a8b4f56SDavid van Moolenbroek 1. 3Com 501 or 3Com 509 based ISA card (i386) 138*9a8b4f56SDavid van Moolenbroek 2. NE2000, 3Com 503, or WD based ISA card (i386) (emulated by Bochs, Qemu) 139*9a8b4f56SDavid van Moolenbroek 140*9a8b4f56SDavid van Moolenbroek 3. Go back to interface selection 141*9a8b4f56SDavid van Moolenbroek 4. Quit 142*9a8b4f56SDavid van Moolenbroek" 143*9a8b4f56SDavid van Moolenbroek 144*9a8b4f56SDavid van Moolenbroek select_number 1 4 4 "Card choice?" 145*9a8b4f56SDavid van Moolenbroek 146*9a8b4f56SDavid van Moolenbroek case $? in 147*9a8b4f56SDavid van Moolenbroek 1) 148*9a8b4f56SDavid van Moolenbroek driver=dpeth 149*9a8b4f56SDavid van Moolenbroek driverargs="#dpeth_args='DPETH0=port:irq:memory'" 150*9a8b4f56SDavid van Moolenbroek echo " 151*9a8b4f56SDavid van MoolenbroekNote: After installing, edit $LOCALRC to the right configuration." 152433d6423SLionel Sambuc ;; 153*9a8b4f56SDavid van Moolenbroek 2) 154*9a8b4f56SDavid van Moolenbroek driver=dp8390 155*9a8b4f56SDavid van Moolenbroek driverargs="dp8390_args='DPETH0=300:9'" 156*9a8b4f56SDavid van Moolenbroek echo " 157*9a8b4f56SDavid van MoolenbroekNote: After installing, edit $LOCALRC to the right configuration. 158*9a8b4f56SDavid van MoolenbroekYou may then also have to edit /etc/system.conf.d/dp8390 to match. 159*9a8b4f56SDavid van MoolenbroekFor now, the defaults for emulation by Bochs/Qemu have been set." 160433d6423SLionel Sambuc ;; 161*9a8b4f56SDavid van Moolenbroek 3) 162*9a8b4f56SDavid van Moolenbroek step=do_step1 163*9a8b4f56SDavid van Moolenbroek return 164*9a8b4f56SDavid van Moolenbroek ;; 165*9a8b4f56SDavid van Moolenbroek 4) 166*9a8b4f56SDavid van Moolenbroek return 167*9a8b4f56SDavid van Moolenbroek ;; 168433d6423SLionel Sambuc esac 169*9a8b4f56SDavid van Moolenbroek 170*9a8b4f56SDavid van Moolenbroek backup_file "$LOCALRC" 171*9a8b4f56SDavid van Moolenbroek echo "# Generated by netconf(8). Edit as necessary." > $LOCALRC 172*9a8b4f56SDavid van Moolenbroek echo "netdriver='"$driver"'" >> $LOCALRC 173*9a8b4f56SDavid van Moolenbroek echo "$driverargs" >> $LOCALRC 174*9a8b4f56SDavid van Moolenbroek 175*9a8b4f56SDavid van Moolenbroek # $LOCALRC typically expands to /mnt/usr/etc/rc.local, so leave room.. 176*9a8b4f56SDavid van Moolenbroek echo " 177*9a8b4f56SDavid van MoolenbroekA template to start the driver has been written to $LOCALRC . As 178*9a8b4f56SDavid van Moolenbroeknoted above, you may have to edit it. Once you are done editing, reboot the 179*9a8b4f56SDavid van Moolenbroeksystem, after which the driver will be started. Once the driver is running, 180*9a8b4f56SDavid van Moolenbroekyou can run 'netconf' to configure the corresponding network interface." 181433d6423SLionel Sambuc} 182433d6423SLionel Sambuc 183433d6423SLionel Sambucdo_step2() 184433d6423SLionel Sambuc{ 185*9a8b4f56SDavid van Moolenbroek iffile="$IFCONF$ifchoice" 186433d6423SLionel Sambuc 187*9a8b4f56SDavid van Moolenbroek echo " 188*9a8b4f56SDavid van MoolenbroekConfigure interface $ifchoice using DHCP or manually? 189433d6423SLionel Sambuc 190*9a8b4f56SDavid van MoolenbroekFor now, the choice here is primarily about IPv4. With DHCP it is possible to 191*9a8b4f56SDavid van Moolenbroekenable IPv6 as well. Even if the local network has no IPv6 facilities, enabling 192*9a8b4f56SDavid van MoolenbroekIPv6 should do no harm. For IPv6-only mode or any other configuration that is 193*9a8b4f56SDavid van Moolenbroeknot supported here, you will have to edit $iffile yourself. 194433d6423SLionel Sambuc 195*9a8b4f56SDavid van Moolenbroek 1. Automatically using DHCP (IPv4 + IPv6) 196*9a8b4f56SDavid van Moolenbroek 2. Automatically using DHCP (IPv4 only) 197*9a8b4f56SDavid van Moolenbroek 3. Manually (IPv4 only)" 198*9a8b4f56SDavid van Moolenbroek 199*9a8b4f56SDavid van Moolenbroek if [ -r "$iffile" ]; then 200*9a8b4f56SDavid van Moolenbroek echo " 4. Remove current configuration" 201*9a8b4f56SDavid van Moolenbroek remove_choice=4 202*9a8b4f56SDavid van Moolenbroek goback_choice=5 203*9a8b4f56SDavid van Moolenbroek quit_choice=6 204433d6423SLionel Sambuc else 205*9a8b4f56SDavid van Moolenbroek remove_choice=X 206*9a8b4f56SDavid van Moolenbroek goback_choice=4 207*9a8b4f56SDavid van Moolenbroek quit_choice=5 208*9a8b4f56SDavid van Moolenbroek fi 209*9a8b4f56SDavid van Moolenbroek 210*9a8b4f56SDavid van Moolenbroek echo 211*9a8b4f56SDavid van Moolenbroek printf "%2d. Go back to interface selection\n" $goback_choice 212*9a8b4f56SDavid van Moolenbroek printf "%2d. Quit\n\n" $quit_choice 213*9a8b4f56SDavid van Moolenbroek 214*9a8b4f56SDavid van Moolenbroek select_number 1 $quit_choice 1 "Configuration choice?" 215*9a8b4f56SDavid van Moolenbroek 216*9a8b4f56SDavid van Moolenbroek case $? in 217*9a8b4f56SDavid van Moolenbroek 1) 218*9a8b4f56SDavid van Moolenbroek backup_file "$iffile" 219*9a8b4f56SDavid van Moolenbroek echo 'up' > $iffile 220*9a8b4f56SDavid van Moolenbroek echo '!dhcpcd -qM $int' >> $iffile 221*9a8b4f56SDavid van Moolenbroek 222*9a8b4f56SDavid van Moolenbroek echo 223*9a8b4f56SDavid van Moolenbroek echo "Interface $ifchoice configured for DHCP (IPv4 + IPv6)." 224*9a8b4f56SDavid van Moolenbroek step=do_step3 225*9a8b4f56SDavid van Moolenbroek ;; 226*9a8b4f56SDavid van Moolenbroek 2) 227*9a8b4f56SDavid van Moolenbroek backup_file "$iffile" 228*9a8b4f56SDavid van Moolenbroek echo 'up' > $iffile 229*9a8b4f56SDavid van Moolenbroek echo '!dhcpcd -qM -4 $int' >> $iffile 230*9a8b4f56SDavid van Moolenbroek 231*9a8b4f56SDavid van Moolenbroek echo 232*9a8b4f56SDavid van Moolenbroek echo "Interface $ifchoice configured for DHCP (IPv4 only)." 233*9a8b4f56SDavid van Moolenbroek step=do_step3 234*9a8b4f56SDavid van Moolenbroek ;; 235*9a8b4f56SDavid van Moolenbroek 3) 236*9a8b4f56SDavid van Moolenbroek # Query user for settings 237*9a8b4f56SDavid van Moolenbroek # 238*9a8b4f56SDavid van Moolenbroek # Some of these settings (hostname, nameservers) do not apply 239*9a8b4f56SDavid van Moolenbroek # to just the selected interface. Still, they are what one has 240*9a8b4f56SDavid van Moolenbroek # to specify for a complete manual configuration. In order to 241*9a8b4f56SDavid van Moolenbroek # make manual configuration of multiple interfaces less 242*9a8b4f56SDavid van Moolenbroek # frustrating in this regard, offer defaults that match what 243*9a8b4f56SDavid van Moolenbroek # may just have been set already. 244*9a8b4f56SDavid van Moolenbroek 245*9a8b4f56SDavid van Moolenbroek echo 246*9a8b4f56SDavid van Moolenbroek 247*9a8b4f56SDavid van Moolenbroek # Hostname 248*9a8b4f56SDavid van Moolenbroek if [ -r $HOSTNAME ]; then 249*9a8b4f56SDavid van Moolenbroek hostname_default=$(cat $HOSTNAME) 250*9a8b4f56SDavid van Moolenbroek else 251*9a8b4f56SDavid van Moolenbroek hostname_default="minix" 252*9a8b4f56SDavid van Moolenbroek fi 253*9a8b4f56SDavid van Moolenbroek echo -n "Hostname [$hostname_default]: " 254*9a8b4f56SDavid van Moolenbroek read hostname 255*9a8b4f56SDavid van Moolenbroek if [ -z "$hostname" ]; then 256*9a8b4f56SDavid van Moolenbroek hostname="$hostname_default" 257433d6423SLionel Sambuc fi 258433d6423SLionel Sambuc 259433d6423SLionel Sambuc # IP address 260*9a8b4f56SDavid van Moolenbroek ip="" 261*9a8b4f56SDavid van Moolenbroek while [ -z "$ip" ]; do 262*9a8b4f56SDavid van Moolenbroek echo -n "IP address []: " 263433d6423SLionel Sambuc read ip 264*9a8b4f56SDavid van Moolenbroek done 265433d6423SLionel Sambuc 266433d6423SLionel Sambuc # Netmask 267*9a8b4f56SDavid van Moolenbroek echo -n "Netmask (optional) []: " 268433d6423SLionel Sambuc read netmask 269*9a8b4f56SDavid van Moolenbroek [ -n "$netmask" ] && netmask=" netmask $netmask" 270433d6423SLionel Sambuc 271433d6423SLionel Sambuc # Gateway (no gateway is fine for local networking) 272*9a8b4f56SDavid van Moolenbroek echo -n "Gateway (optional) []: " 273433d6423SLionel Sambuc read gateway 274433d6423SLionel Sambuc 275433d6423SLionel Sambuc # DNS Servers 276*9a8b4f56SDavid van Moolenbroek dns1_default="$(grep '^nameserver' $RESOLVCONF 2>/dev/null | \ 277*9a8b4f56SDavid van Moolenbroek sed '1q' | awk '{print $2}')" 278*9a8b4f56SDavid van Moolenbroek dns2_default="$(grep '^nameserver' $RESOLVCONF 2>/dev/null | \ 279*9a8b4f56SDavid van Moolenbroek sed '2q;d' | awk '{print $2}')" 280433d6423SLionel Sambuc 281*9a8b4f56SDavid van Moolenbroek echo -n "Primary DNS Server [$dns1_default]: " 282*9a8b4f56SDavid van Moolenbroek read dns1 283*9a8b4f56SDavid van Moolenbroek [ -z "$dns1" ] && dns1="$dns1_default" 284*9a8b4f56SDavid van Moolenbroek 285*9a8b4f56SDavid van Moolenbroek if [ -n "$dns1" ]; then 286*9a8b4f56SDavid van Moolenbroek echo -n "Secondary DNS Server (optional) [$dns2_default]: " 287433d6423SLionel Sambuc read dns2 288*9a8b4f56SDavid van Moolenbroek [ -z "$dns2" ] && dns2="$dns2_default" 289433d6423SLionel Sambuc else 290433d6423SLionel Sambuc dns2="" 291433d6423SLionel Sambuc fi 292*9a8b4f56SDavid van Moolenbroek 293*9a8b4f56SDavid van Moolenbroek backup_file "$HOSTNAME" 294*9a8b4f56SDavid van Moolenbroek echo "$hostname" > $HOSTNAME 295*9a8b4f56SDavid van Moolenbroek hostname "$hostname" 296*9a8b4f56SDavid van Moolenbroek 297*9a8b4f56SDavid van Moolenbroek backup_file "$iffile" 298*9a8b4f56SDavid van Moolenbroek echo 'up' > $iffile 299*9a8b4f56SDavid van Moolenbroek echo "inet $ip$netmask" >> $iffile 300*9a8b4f56SDavid van Moolenbroek if [ -n "$gateway" ]; then 301*9a8b4f56SDavid van Moolenbroek echo "!route -q add default $gateway" >> $iffile 302433d6423SLionel Sambuc fi 303*9a8b4f56SDavid van Moolenbroek 304*9a8b4f56SDavid van Moolenbroek if [ -n "$dns1" ]; then 305*9a8b4f56SDavid van Moolenbroek backup_file "$RESOLVCONF" 306*9a8b4f56SDavid van Moolenbroek echo "nameserver $dns1" > $RESOLVCONF 307*9a8b4f56SDavid van Moolenbroek if [ -n "$dns2" ]; then 308*9a8b4f56SDavid van Moolenbroek echo "nameserver $dns2" >> $RESOLVCONF 309*9a8b4f56SDavid van Moolenbroek fi 310*9a8b4f56SDavid van Moolenbroek fi 311*9a8b4f56SDavid van Moolenbroek 312*9a8b4f56SDavid van Moolenbroek echo 313*9a8b4f56SDavid van Moolenbroek echo "Interface $ifchoice configured manually." 314*9a8b4f56SDavid van Moolenbroek step=do_step3 315*9a8b4f56SDavid van Moolenbroek ;; 316*9a8b4f56SDavid van Moolenbroek $remove_choice) 317*9a8b4f56SDavid van Moolenbroek backup_file "$iffile" 318*9a8b4f56SDavid van Moolenbroek rm -f "$iffile" 319*9a8b4f56SDavid van Moolenbroek echo 320*9a8b4f56SDavid van Moolenbroek echo "Removed configuration for interface $ifchoice." 321*9a8b4f56SDavid van Moolenbroek step=do_step3 322*9a8b4f56SDavid van Moolenbroek ;; 323*9a8b4f56SDavid van Moolenbroek $goback_choice) 324*9a8b4f56SDavid van Moolenbroek step=do_step1 325*9a8b4f56SDavid van Moolenbroek ;; 326*9a8b4f56SDavid van Moolenbroek esac 327433d6423SLionel Sambuc} 328433d6423SLionel Sambuc 329*9a8b4f56SDavid van Moolenbroekdo_step3() 330*9a8b4f56SDavid van Moolenbroek{ 331*9a8b4f56SDavid van Moolenbroek 332*9a8b4f56SDavid van Moolenbroek # We get here only if one of the ifconfig.if(5) files have changed. 333*9a8b4f56SDavid van Moolenbroek changed="yes" 334*9a8b4f56SDavid van Moolenbroek 335*9a8b4f56SDavid van Moolenbroek echo " 336*9a8b4f56SDavid van MoolenbroekDo you want to configure additional interfaces? 337*9a8b4f56SDavid van Moolenbroek 338*9a8b4f56SDavid van MoolenbroekYou can also invoke the 'netconf' command as root at any later time. 339*9a8b4f56SDavid van Moolenbroek 340*9a8b4f56SDavid van Moolenbroek 1. Go back to interface selection 341*9a8b4f56SDavid van Moolenbroek 2. Quit 342*9a8b4f56SDavid van Moolenbroek" 343*9a8b4f56SDavid van Moolenbroek 344*9a8b4f56SDavid van Moolenbroek # Note that "quit" is deliberately the default choice: most people will 345*9a8b4f56SDavid van Moolenbroek # want to configure at most one interface, and keep pressing Enter in 346*9a8b4f56SDavid van Moolenbroek # order to make it through the setup procedure as easily as possible. 347*9a8b4f56SDavid van Moolenbroek select_number 1 2 2 "Menu choice?" 348*9a8b4f56SDavid van Moolenbroek 349*9a8b4f56SDavid van Moolenbroek [ $? -eq 1 ] && step=do_step1 350*9a8b4f56SDavid van Moolenbroek} 351433d6423SLionel Sambuc 352433d6423SLionel Sambuc# Parse options 353*9a8b4f56SDavid van Moolenbroekwhile getopts "p:hl" arg; do 354433d6423SLionel Sambuc case "$arg" in 355433d6423SLionel Sambuc p) prefix=$OPTARG; ;; 356433d6423SLionel Sambuc h) usage ;; 357*9a8b4f56SDavid van Moolenbroek l) echo "The following network hardware interfaces are detected:" 358*9a8b4f56SDavid van Moolenbroek echo 359*9a8b4f56SDavid van Moolenbroek interfaces "configured" 360*9a8b4f56SDavid van Moolenbroek exit 0 361433d6423SLionel Sambuc ;; 362433d6423SLionel Sambuc \?) echo "Unknown option -$OPTARG"; usage ;; 363433d6423SLionel Sambuc :) echo "Missing required argument for -$OPTARG"; usage ;; 364433d6423SLionel Sambuc *) usage ;; 365433d6423SLionel Sambuc esac 366433d6423SLionel Sambucdone 367433d6423SLionel Sambuc 368433d6423SLionel Sambucif [ -n "$prefix" ] ; then 369*9a8b4f56SDavid van Moolenbroek if [ ! -d $prefix ]; then 370433d6423SLionel Sambuc echo -e "It seems the supplied prefix (\`$prefix') is invalid." 371433d6423SLionel Sambuc exit 1 372433d6423SLionel Sambuc fi 373*9a8b4f56SDavid van Moolenbroek LOCALRC=$prefix$LOCALRC 374*9a8b4f56SDavid van Moolenbroek IFCONF=$prefix$IFCONF 375*9a8b4f56SDavid van Moolenbroek RESOLVCONF=$prefix$RESOLVCONF 376*9a8b4f56SDavid van Moolenbroek HOSTNAME=$prefix$HOSTNAME 377433d6423SLionel Sambucfi 378433d6423SLionel Sambuc 379433d6423SLionel Sambucif [ `whoami` != root ] ; then 380*9a8b4f56SDavid van Moolenbroek echo "Please run netconf as root." 381*9a8b4f56SDavid van Moolenbroek exit 1 382*9a8b4f56SDavid van Moolenbroekfi 383*9a8b4f56SDavid van Moolenbroek 384*9a8b4f56SDavid van Moolenbroekif ! ifconfig -l >/dev/null 2>&1; then 385*9a8b4f56SDavid van Moolenbroek echo "Unable to obtain a list of interfaces. Is the LWIP service running?" 386433d6423SLionel Sambuc exit 1 387433d6423SLionel Sambucfi 388433d6423SLionel Sambuc 389433d6423SLionel Sambuc# Are we running from CD? 390433d6423SLionel Sambucif [ -f "$USRKBFILE" ] ; then 391433d6423SLionel Sambuc cd="yes" # We are running from CD 392433d6423SLionel Sambucfi 393433d6423SLionel Sambuc 394*9a8b4f56SDavid van Moolenbroek# The interactive program. 395*9a8b4f56SDavid van Moolenbroekstep=do_step1 396*9a8b4f56SDavid van Moolenbroekwhile [ $step != exit ]; do 397*9a8b4f56SDavid van Moolenbroek proc=$step 398*9a8b4f56SDavid van Moolenbroek step=exit 399*9a8b4f56SDavid van Moolenbroek $proc 400*9a8b4f56SDavid van Moolenbroekdone 401433d6423SLionel Sambuc 402*9a8b4f56SDavid van Moolenbroek# Skip printing this last bit of information if it will not actually work. The 403*9a8b4f56SDavid van Moolenbroek# fact that it will not work on the CD (i.e. from the setup program) at least 404*9a8b4f56SDavid van Moolenbroek# yet, is also the reason why we do not simply issue the command ourselves 405*9a8b4f56SDavid van Moolenbroek# right now. We might reconsider this later. 406*9a8b4f56SDavid van Moolenbroekif [ "$changed" = "yes" -a -z "$prefix" ]; then 407*9a8b4f56SDavid van Moolenbroek echo 408*9a8b4f56SDavid van Moolenbroek echo "One or more of the interface configuration files have been changed." 409*9a8b4f56SDavid van Moolenbroek echo "You can use the command 'service network restart' to reload them now." 410433d6423SLionel Sambucfi 411433d6423SLionel Sambuc 412*9a8b4f56SDavid van Moolenbroek# Aesthetics. 413*9a8b4f56SDavid van Moolenbroekecho 414433d6423SLionel Sambuc 415433d6423SLionel Sambucexit 0 416