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