xref: /minix3/minix/commands/netconf/netconf.sh (revision 9a8b4f560189c2f719b77b732258a99e3dc28b09)
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