devices revision 251926
1203954Srdivacky#!/bin/sh
2203954Srdivacky#-
3203954Srdivacky# Copyright (c) 2006-2013 Devin Teske
4203954Srdivacky# All Rights Reserved.
5203954Srdivacky#
6203954Srdivacky# Redistribution and use in source and binary forms, with or without
7203954Srdivacky# modification, are permitted provided that the following conditions
8203954Srdivacky# are met:
9203954Srdivacky# 1. Redistributions of source code must retain the above copyright
10203954Srdivacky#    notice, this list of conditions and the following disclaimer.
11203954Srdivacky# 2. Redistributions in binary form must reproduce the above copyright
12203954Srdivacky#    notice, this list of conditions and the following disclaimer in the
13221345Sdim#    documentation and/or other materials provided with the distribution.
14249423Sdim#
15249423Sdim# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
16221345Sdim# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, THE
17203954Srdivacky# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
18203954Srdivacky# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
19203954Srdivacky# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
20203954Srdivacky# DAMAGES (INLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
21203954Srdivacky# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
22203954Srdivacky# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23212904Sdim# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
24212904Sdim# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
25203954Srdivacky# SUCH DAMAGE.
26203954Srdivacky#
27212904Sdim# $FreeBSD: head/usr.sbin/bsdconfig/networking/devices 251926 2013-06-18 09:41:34Z dteske $
28203954Srdivacky#
29212904Sdim############################################################ INCLUDES
30212904Sdim
31203954SrdivackyBSDCFG_SHARE="/usr/share/bsdconfig"
32203954Srdivacky. $BSDCFG_SHARE/common.subr || exit 1
33203954Srdivackyf_dprintf "%s: loading includes..." "$0"
34203954Srdivackyf_include $BSDCFG_SHARE/dialog.subr
35203954Srdivackyf_include $BSDCFG_SHARE/mustberoot.subr
36203954Srdivackyf_include $BSDCFG_SHARE/sysrc.subr
37203954Srdivackyf_include $BSDCFG_SHARE/media/tcpip.subr
38203954Srdivackyf_include $BSDCFG_SHARE/networking/device.subr
39203954Srdivackyf_include $BSDCFG_SHARE/networking/ipaddr.subr
40203954Srdivackyf_include $BSDCFG_SHARE/networking/media.subr
41203954Srdivackyf_include $BSDCFG_SHARE/networking/netmask.subr
42203954Srdivacky
43203954SrdivackyBSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="120.networking"
44203954Srdivackyf_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr
45203954Srdivacky
46203954Srdivackyipgm=$( f_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" )
47203954Srdivacky[ $? -eq $SUCCESS -a "$ipgm" ] && pgm="$ipgm"
48203954Srdivacky
49203954Srdivacky############################################################ MAIN
50203954Srdivacky
51203954Srdivacky# Incorporate rc-file if it exists
52203954Srdivacky[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc"
53203954Srdivacky
54203954Srdivacky#
55203954Srdivacky# Process command-line options
56203954Srdivacky#
57203954Srdivackywhile getopts h$GETOPTS_STDARGS flag; do
58203954Srdivacky	case "$flag" in
59203954Srdivacky	h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm";;
60203954Srdivacky	esac
61203954Srdivackydone
62203954Srdivackyshift $(( $OPTIND - 1 ))
63203954Srdivacky
64203954Srdivacky#
65203954Srdivacky# Initialize
66203954Srdivacky#
67203954Srdivackyf_dialog_title "$msg_networking_devices"
68203954Srdivackyf_dialog_backtitle "${ipgm:+bsdconfig }$pgm"
69203954Srdivackyf_mustberoot_init
70203954Srdivacky
71203954Srdivacky#
72203954Srdivacky# Launch application main menu
73203954Srdivacky#
74203954Srdivackydefaultitem=
75203954Srdivackywhile :; do
76203954Srdivacky	f_dialog_menu_netdev "$defaultitem" || break
77203954Srdivacky	f_dialog_menutag_fetch interface
78203954Srdivacky	defaultitem="$interface"
79203954Srdivacky
80203954Srdivacky	#
81203954Srdivacky	# dialog_menu_netdev adds an asterisk (*) to the right of the
82203954Srdivacky	# device name if the interface is active. Remove the asterisk
83203954Srdivacky	# from the device name if present.
84203954Srdivacky	#
85203954Srdivacky	case "$interface" in
86203954Srdivacky	*\*) interface="${interface%?}";;
87203954Srdivacky	esac
88203954Srdivacky
89203954Srdivacky	#
90203954Srdivacky	# Obtain initial interface settings to be configured. These will be
91203954Srdivacky	# passed to the f_dialog_menu_netdev_edit function-call below which
92203954Srdivacky	# will block until the user has either cancelled or finished editing
93203954Srdivacky	# the values.
94203954Srdivacky	#
95203954Srdivacky	# First, attempt to read stored configuration from rc.conf(5) and
96203954Srdivacky	# fallback to reading the active configuration if not configured in
97203954Srdivacky	# the rc.conf(5) file(s).
98203954Srdivacky	#
99203954Srdivacky	dhcp=
100203954Srdivacky	_ipaddr=
101218893Sdim	_netmask=
102203954Srdivacky	_ifconfig=$( f_sysrc_get ifconfig_$interface )
103203954Srdivacky	if [ "$_ifconfig" ]; then
104203954Srdivacky		# If DHCP, get IP address/netmask later from ifconfig(8)
105203954Srdivacky		glob="[Dd][Hh][Cc][Pp]"
106203954Srdivacky		case "$_ifconfig" in
107203954Srdivacky		$glob) dhcp=1;;
108203954Srdivacky		[Ss][Yy][Nn][Cc]$glob) dhcp=1;;
109203954Srdivacky		[Nn][Oo][Ss][Yy][Nn][Cc]$glob) dhcp=1;;
110218893Sdim		*)
111203954Srdivacky			#
112203954Srdivacky			# Get IP address/netmask from rc.conf(5) configuration
113203954Srdivacky			#
114203954Srdivacky			dhcp=
115218893Sdim			eval "$( exec 2> /dev/null
116203954Srdivacky			         set -- $_ifconfig
117218893Sdim			         while [ $# -gt 0 ]; do
118203954Srdivacky			         	case "$1" in
119203954Srdivacky			         	inet)
120203954Srdivacky			         		shift 1
121218893Sdim			         		echo "_ipaddr='$1'"
122203954Srdivacky			         		;;
123218893Sdim			         	netmask)
124203954Srdivacky			         		shift 1
125203954Srdivacky			         		echo "_netmask='$1'"
126203954Srdivacky			         		;;
127203954Srdivacky			         	esac
128203954Srdivacky			         	shift 1
129203954Srdivacky			         done
130203954Srdivacky			       )"
131203954Srdivacky			;;
132218893Sdim		esac
133210299Sed	fi
134203954Srdivacky
135210299Sed	#
136218893Sdim	# Fill in IP address/netmask from active settings if no
137203954Srdivacky	# configuration could be extrapolated from rc.conf(5)
138203954Srdivacky	#
139203954Srdivacky	[ "$_ipaddr"  ] || _ipaddr=$( f_ifconfig_inet $interface )
140218893Sdim	[ "$_netmask" ] || _netmask=$( f_ifconfig_netmask $interface )
141203954Srdivacky
142203954Srdivacky	# Get the extra options (this always comes from rc.conf(5))
143203954Srdivacky	_options=$( f_ifconfig_options $interface )
144218893Sdim
145218893Sdim	# Block on user-configuration of the probed settings
146203954Srdivacky	f_dialog_menu_netdev_edit \
147203954Srdivacky		"$interface" "$_ipaddr" "$_netmask" "$_options" $dhcp
148203954Srdivacky
149203954Srdivacky	# Return to root menu if above returns success
150203954Srdivacky	[ $? -eq $SUCCESS ] && break
151203954Srdivackydone
152218893Sdim
153203954Srdivackyexit $SUCCESS
154203954Srdivacky
155203954Srdivacky################################################################################
156203954Srdivacky# END
157203954Srdivacky################################################################################
158203954Srdivacky