netconfig revision 218799
1#!/bin/sh
2#-
3# Copyright (c) 2011 Nathan Whitehorn
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10#    notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12#    notice, this list of conditions and the following disclaimer in the
13#    documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
17# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25# SUCH DAMAGE.
26#
27# $FreeBSD: head/usr.sbin/bsdinstall/scripts/netconfig 218799 2011-02-18 14:54:34Z nwhitehorn $
28
29INTERFACES=""
30DIALOG_TAGS=""
31
32: ${DIALOG_OK=0}
33: ${DIALOG_CANCEL=1}
34: ${DIALOG_HELP=2}
35: ${DIALOG_EXTRA=3}
36: ${DIALOG_ITEM_HELP=4}
37: ${DIALOG_ESC=255}
38
39echo -n > $BSDINSTALL_TMPETC/rc.conf.net
40
41for IF in `ifconfig -l`; do
42	test "$IF" = "lo0" && continue
43	(ifconfig -g wlan | egrep -wq $IF) && continue
44	INTERFACES="$INTERFACES $IF"
45	DESC=`sysctl -n dev.$(echo $IF | sed -E 's/([[:alpha:]]*)([[:digit:]]*)/\1.\2/g').%desc`
46	DIALOG_TAGS="$DIALOG_TAGS $IF \"$DESC\""
47done
48
49exec 3>&1
50INTERFACE=`echo $DIALOG_TAGS | xargs dialog --backtitle 'FreeBSD Installer' --title 'Network Configuration' --menu 'Please select a network interface to configure:' 0 0 0 2>&1 1>&3`
51if [ $? -eq $DIALOG_CANCEL ]; then exit 1; fi
52exec 3>&-
53
54# Do a dirty check to see if this a wireless interface -- there should be a
55# better way
56IFCONFIG_PREFIX=""
57if ifconfig $INTERFACE | grep -q 'media: IEEE 802.11 Wireless'; then
58	NEXT_WLAN_IFACE=wlan0	# XXX
59	echo wlans_$INTERFACE=\"$NEXT_WLAN_IFACE\" >> $BSDINSTALL_TMPETC/rc.conf.net
60	IFCONFIG_PREFIX="WPA "
61	if [ ! -z $BSDINSTALL_CONFIGCURRENT ]; then
62		ifconfig $NEXT_WLAN_IFACE create wlandev $INTERFACE
63		ifconfig $NEXT_WLAN_IFACE up
64	fi
65	bsdinstall wlanconfig $NEXT_WLAN_IFACE || exec $0
66	INTERFACE="$NEXT_WLAN_IFACE"
67fi
68
69dialog --backtitle 'FreeBSD Installer' --title 'Network Configuration' --yesno 'Would you like to use DHCP to configure this interface?' 0 0
70if [ $? -eq $DIALOG_OK ]; then
71	echo ifconfig_$INTERFACE=\"${IFCONFIG_PREFIX}DHCP\" >> $BSDINSTALL_TMPETC/rc.conf.net
72
73	if [ ! -z $BSDINSTALL_CONFIGCURRENT ]; then
74		dialog --backtitle 'FreeBSD Installer' --infobox "Acquiring DHCP lease..." 0 0
75		dhclient $INTERFACE 2>> $BSDINSTALL_LOG
76		if [ $? -ne 0 ]; then
77			dialog --backtitle 'FreeBSD Installer' --msgbox "DHCP lease acquisition failed." 0 0
78			exec $0
79		fi
80	fi
81	exit 0
82fi
83
84IP_ADDRESS=`ifconfig $INTERFACE inet | awk '/inet/ {printf("%s\n", $2); }'`
85NETMASK=`ifconfig $INTERFACE inet | awk '/inet/ {printf("%s\n", $4); }'`
86ROUTER=`netstat -rn -f inet | awk '/default/ {printf("%s\n", $2);}'`
87
88exec 3>&1
89IF_CONFIG=$(dialog --backtitle 'FreeBSD Installer' --title 'Network Configuration' --form 'Static Network Interface Configuration' 0 0 0 \
90	'IP Address' 1 0 "$IP_ADDRESS" 1 20 16 0 \
91	'Subnet Mask' 2 0 "$NETMASK" 2 20 16 0 \
92	'Default Router' 3 0 "$ROUTER" 3 20 16 0 \
93	\
94	'Nameserver' 5 0 "" 5 20 16 0 \
95	'Search Domain' 6 0 "" 6 20 20 0 \
962>&1 1>&3)
97if [ $? -eq $DIALOG_CANCEL ]; then exec $0; fi
98exec 3>&-
99
100echo $INTERFACE $IF_CONFIG | 
101    awk -v prefix="$IFCONFIG_PREFIX" '{
102	printf("ifconfig_%s=\"%s%s netmask %s\"\n", $1, prefix, $2, $3);
103	printf("defaultrouter=\"%s\"\n", $4);
104    }' >> $BSDINSTALL_TMPETC/rc.conf.net
105
106if [ ! -z $BSDINSTALL_CONFIGCURRENT ]; then
107	. $BSDINSTALL_TMPETC/rc.conf.net
108	ifconfig $INTERFACE `eval echo \\\$ifconfig_$INTERFACE`
109	route delete default
110	route add default $defaultrouter
111fi
112
113
114echo $IF_CONFIG | 
115    awk '{
116	if ($4 != "")
117		printf("nameserver %s\n", $4);
118	if ($5 != "")
119		printf("search %s\n", $5);
120    }' > $BSDINSTALL_TMPETC/resolv.conf
121
122