3 # netconf 0.1 - Configure network
11 LOCALRC
=/usr
/etc
/rc.
local
12 INETCONF
=/etc
/inet.conf
15 HOSTNAME
=/etc
/hostname.
file
18 DEVICES
=/tmp
/devices.$$
26 cd="no" # running from cd?
46 # Provide some sane defaults
47 hostname_default
=`uname -n`
48 test -z "$hostname_default" && hostname_default
="Minix"
50 netmask_default
="255.255.255.0"
58 netconf [-q] [-p <prefix>] [-e <num>] [-a]
59 netconf [-H <name> -i <ip> -n <mask> -g <gw> -d <prim dns> [-s <sec dns>]]
62 -q Limit generated output
63 -p Path prefix for configuration files (e.g., during install -p mnt is used as files are mounted on /mnt).
65 -a Use DHCP (-H, -i, -n, -g, -d, and -s flags are discarded)
72 -h Shows this help file
73 -c Shows a list of ethernet cards supported
75 By default netconf starts in Interactive mode. By providing parameters on the
76 command line, some questions can be omitted.
89 cat $LSPCI |
grep > /dev
/null
"^$1" && card_avail
=1
92 if [ $card_avail -gt 0 ]
95 eth_default
=$card_number
99 printf "%2d. %s %s\n" "$card_number" "$card_mark" "$card_name"
106 # Run lspci once to a temp file for use in 'card' function
107 lspci
>$LSPCI ||
exit
109 card
0 "No Ethernet card (no networking)"
110 card
1 "3Com 501 or 3Com 509 based card"
111 card
2 "Realtek 8029 based card (also emulated by Qemu)" "10EC:8029"
112 card
3 "NE2000, 3com 503 or WD based card (also emulated by Bochs)"
114 for pcicard
in $pci_list
115 do var
=\
$pci_descr$pcicard; descr
="`eval echo $var`"
116 var
=\
$pci_pcilist$pcicard; pcilist
="`eval echo $var`"
117 card
$n "$descr" $pcilist
121 card
$first_after_pci "Different Ethernet card (no networking)"
123 # Remove temporary lspci output
129 echo -e "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b ! $1"
137 # Collect configs from network devices
138 for dir
in $SYSTEM_CONF_DIRS
139 do for f
in $dir/$SYSTEM_CONF_SUBDIR/*
141 then printconfig
$f |
grep 'type net.*pci device'
146 do pcilist
="`echo $devline | sed 's/.*pci device //' | sed 's/,.*//'`"
147 descr
="`echo $devline | sed 's/.*,descr //' | sed 's/,.*//'`"
148 label
="`echo $devline | sed 's/.*service //' | sed 's/,.*//'`"
149 pci_list
="$pci_list $n"
150 eval "pci_pcilist$n=\"$pcilist\""
151 eval "pci_descr$n=\"$descr\""
152 eval "pci_label$n=\"$label\""
156 first_after_pci
=`expr $first_pcicard + $n`
165 # Ask user about networking
166 echo "MINIX 3 currently supports the following Ethernet cards. PCI cards detected"
167 echo "by MINIX are marked with *. Please choose: "
172 while [ "$step1" != ok
]; do
173 echo -n "Ethernet card? [$eth_default] "; read eth
174 test -z $eth && eth
=$eth_default
177 test -n "$driver" && step1
="ok"
183 # If this is a known pci device, we only have to set
185 if [ $1 -ge $first_pcicard -a $1 -lt $first_after_pci ]
186 then pcicard
="`expr $1 - $first_pcicard`"
187 var
=\
$pci_label$pcicard; driver
="`eval echo $var`"
191 # Other possibilities.
194 1) driver
=dpeth
; driverargs
="#dpeth_arg='DPETH0=port:irq:memory'";
195 test "$v" = 1 && echo ""
196 test "$v" = 1 && echo "Note: After installing, edit $LOCALRC to the right configuration."
198 2) driver
=dp8390
; driverargs
="dp8390_arg='DPETH0=pci'"; ;;
199 3) driver
=dp8390
; driverargs
="dp8390_arg='DPETH0=240:9'";
200 test "$v" = 1 && echo ""
201 test "$v" = 1 && echo "Note: After installing, edit $LOCALRC to the right configuration."
202 test "$v" = 1 && echo " chose option 4, the defaults for emulation by Bochs have been set."
204 $first_after_pci) driver
="psip0"; ;;
205 *) warn
"choose a number"
212 echo "Configure network using DHCP or manually?"
214 echo "1. Automatically using DHCP"
218 while [ "$step2" != ok
]
220 echo -n "Configure method? [1] "; read config
221 test -z $config && config
=1
224 1) step2
="ok"; dhcp
="yes" ; ;;
225 2) step2
="ok"; manual
="do"; ;;
226 *) warn
"choose a number"
230 # Use manual parameters?
231 if [ -n "$manual" ]; then
232 # Query user for settings
234 if [ -z $hostname_prev ]; then
235 hostname_prev
=$hostname_default
237 echo -n "Hostname [$hostname_prev]: "
239 if [ ! -z $hostname ]; then
240 hostname_prev
=$hostname
242 hostname
=$hostname_prev
246 if [ -z $ip_prev ]; then
249 echo -n "IP address [$ip_prev]: "
251 if [ ! -z $ip ]; then
258 if [ -z $netmask_prev ]; then
259 netmask_prev
=$netmask_default
261 echo -n "Netmask [$netmask_prev]: "
263 if [ ! -z $netmask ]; then
264 netmask_prev
=$netmask
266 netmask
=$netmask_prev
269 # Gateway (no gateway is fine for local networking)
274 echo -n "Primary DNS Server [$dns1_prev]: "
276 test -z "$dns1" && test -n "$dns1_prev" && dns1
=$dns1_prev
277 if [ ! -z "$dns1" ]; then
280 echo -n "Secondary DNS Server [$dns2_prev]: "
282 if [ ! -z $dns2 ]; then
286 # If no primary DNS, then also no secondary DNS
292 # Find pci cards we know about
296 while getopts ":qe:p:aH:i:n:g:d:s:hc" arg
; do
300 test "$ethernet" -ge 0 -a "$ethernet" -le 7 2>/dev
/null || usage
303 p
) prefix
=$OPTARG; ;;
305 H
) hostname
=$OPTARG; manual_opts
=`expr $manual_opts '+' 1`;;
306 i
) ip
=$OPTARG; manual_opts
=`expr $manual_opts '+' 1`;;
307 n
) netmask
=$OPTARG; manual_opts
=`expr $manual_opts '+' 1`;;
308 g
) gateway
=$OPTARG; manual_opts
=`expr $manual_opts '+' 1`;;
312 c
) echo -e "The following cards are supported by Minix:\n";
315 \?) echo "Unknown option -$OPTARG"; usage
;;
316 :) echo "Missing required argument for -$OPTARG"; usage
;;
321 # Verify parameter count
322 if [ "$dhcp" != "yes" ] ; then
323 if [ $manual_opts -gt 0 ] ; then
324 test $manual_opts -eq 4 -a -n "$dns1" || usage
329 if [ -n "$prefix" ] ; then
330 LOCALRC
=$prefix$LOCALRC
331 INETCONF
=$prefix$INETCONF
334 HOSTNAME
=$prefix$HOSTNAME
335 if [ ! -f $INETCONF ]; then
336 echo -e "It seems the supplied prefix (\`$prefix') is invalid."
341 if [ `whoami` != root
] ; then
342 test "$v" = 1 && echo "Please run netconf as root."
346 # Are we running from CD?
347 if [ -f "$USRKBFILE" ] ; then
348 cd="yes" # We are running from CD
351 # Do we know what ethernet card to use?
352 test -z "$ethernet" && do_step1
354 # If no parameters are supplied and we're not using DHCP, query for settings
355 test $manual_opts -eq 0 -a "$dhcp" = "no" && do_step2
358 # Do not make backups if we're running from CD
359 test "$cd" != "yes" && test -f $INETCONF && mv $INETCONF "$INETCONF~" &&
360 test "$v" = 1 && echo "Backed up $INETCONF to $INETCONF~"
361 test "$cd" != "yes" && test -f $LOCALRC && mv $LOCALRC "$LOCALRC~" &&
362 test "$v" = 1 && echo "Backed up $LOCALRC to $LOCALRC~"
364 if [ "$driver" = "psip0" ]; then
365 echo "psip0 { default; } ;" > $INETCONF
367 echo "eth0 $driver 0 { default; } ;" > $INETCONF
369 echo "$driverargs" > $LOCALRC
373 # Backup config file if it exists and we're not running from CD
374 test "$cd" != "yes" && test -f $RCNET && mv $RCNET "$RCNET~" &&
375 test "$v" = 1 && echo "Backed up $RCNET to $RCNET~"
376 test "$cd" != "yes" && test -f $HOSTS && mv $HOSTS "$HOSTS~" &&
377 test "$v" = 1 && echo "Backed up $HOSTS to $HOSTS~"
379 # Store manual config
380 echo "ifconfig -I /dev/ip0 -n $netmask -h $ip" > $RCNET
381 test ! -z $gateway && echo "add_route -g $gateway" >> $RCNET
382 echo "daemonize nonamed -L" >> $RCNET
383 test ! -z $dns1 && echo -e "$ip\t%nameserver\t#$hostname" > $HOSTS
384 test ! -z $dns1 && echo -e "$dns1\t%nameserver\t#DNS 1" >> $HOSTS
385 test ! -z $dns2 && echo -e "$dns2\t%nameserver\t#DNS 2" >> $HOSTS
386 echo -e "\n$ip\t$hostname" >> $HOSTS
387 echo $hostname > $HOSTNAME
389 test "$cd" != "yes" && test -f "$RCNET" && mv "$RCNET" "$RCNET~" &&
390 test "$v" = 1 && echo "Moved $RCNET to $RCNET~ to use default settings"
391 test "$cd" != "yes" && test -f $HOSTS && mv $HOSTS "$HOSTS~" &&
392 test "$v" = 1 && echo "Backed up $HOSTS to $HOSTS~"
393 test -f "$HOSTS~" && grep -v "%nameserver" "$HOSTS~" > $HOSTS
396 test "$cd" != "yes" && test "$v" = 1 && echo "
397 You might have to reboot for the changes to take effect."