1641a6cfbSDevin Teske#!/bin/sh 2641a6cfbSDevin Teske#- 37323adacSDevin Teske# Copyright (c) 2006-2013 Devin Teske 4f8ea072aSDevin Teske# All rights reserved. 5641a6cfbSDevin Teske# 6641a6cfbSDevin Teske# Redistribution and use in source and binary forms, with or without 7641a6cfbSDevin Teske# modification, are permitted provided that the following conditions 8641a6cfbSDevin Teske# are met: 9641a6cfbSDevin Teske# 1. Redistributions of source code must retain the above copyright 10641a6cfbSDevin Teske# notice, this list of conditions and the following disclaimer. 11641a6cfbSDevin Teske# 2. Redistributions in binary form must reproduce the above copyright 12641a6cfbSDevin Teske# notice, this list of conditions and the following disclaimer in the 13641a6cfbSDevin Teske# documentation and/or other materials provided with the distribution. 14641a6cfbSDevin Teske# 15641a6cfbSDevin Teske# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 168e37a7c8SDevin Teske# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17641a6cfbSDevin Teske# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18641a6cfbSDevin Teske# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19641a6cfbSDevin Teske# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 208e37a7c8SDevin Teske# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21641a6cfbSDevin Teske# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22641a6cfbSDevin Teske# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23641a6cfbSDevin Teske# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24641a6cfbSDevin Teske# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25641a6cfbSDevin Teske# SUCH DAMAGE. 26641a6cfbSDevin Teske# 27641a6cfbSDevin Teske# 28641a6cfbSDevin Teske############################################################ INCLUDES 29641a6cfbSDevin Teske 302cc6c69dSDevin Teske# Prevent device.subr (included indirectly) from auto scanning; this will be 312cc6c69dSDevin Teske# performed indirectly later via f_dialog_menu_netdev() -- but only after we've 322cc6c69dSDevin Teske# successfully completed f_mustberoot_init(). 332cc6c69dSDevin Teske# 342cc6c69dSDevin TeskeDEVICE_SELF_SCAN_ALL=NO 352cc6c69dSDevin Teske 36ab2043b8SDevin TeskeBSDCFG_SHARE="/usr/share/bsdconfig" 37ab2043b8SDevin Teske. $BSDCFG_SHARE/common.subr || exit 1 3856961fd7SDevin Teskef_dprintf "%s: loading includes..." "$0" 39ab2043b8SDevin Teskef_include $BSDCFG_SHARE/dialog.subr 40ab2043b8SDevin Teskef_include $BSDCFG_SHARE/mustberoot.subr 41ab2043b8SDevin Teskef_include $BSDCFG_SHARE/sysrc.subr 427323adacSDevin Teskef_include $BSDCFG_SHARE/media/tcpip.subr 43ab2043b8SDevin Teskef_include $BSDCFG_SHARE/networking/device.subr 44ab2043b8SDevin Teskef_include $BSDCFG_SHARE/networking/ipaddr.subr 45ab2043b8SDevin Teskef_include $BSDCFG_SHARE/networking/media.subr 46ab2043b8SDevin Teskef_include $BSDCFG_SHARE/networking/netmask.subr 47641a6cfbSDevin Teske 48ab2043b8SDevin TeskeBSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="120.networking" 49641a6cfbSDevin Teskef_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr 50641a6cfbSDevin Teske 51*d4ae33f0SDevin Teskef_index_menusel_keyword $BSDCFG_LIBE/$APP_DIR/INDEX "$pgm" ipgm && 52*d4ae33f0SDevin Teske pgm="${ipgm:-$pgm}" 53641a6cfbSDevin Teske 54641a6cfbSDevin Teske############################################################ MAIN 55641a6cfbSDevin Teske 56641a6cfbSDevin Teske# Incorporate rc-file if it exists 57641a6cfbSDevin Teske[ -f "$HOME/.bsdconfigrc" ] && f_include "$HOME/.bsdconfigrc" 58641a6cfbSDevin Teske 59641a6cfbSDevin Teske# 60641a6cfbSDevin Teske# Process command-line options 61641a6cfbSDevin Teske# 62c3755aa3SDevin Teskewhile getopts h$GETOPTS_STDARGS flag; do 63641a6cfbSDevin Teske case "$flag" in 64641a6cfbSDevin Teske h|\?) f_usage $BSDCFG_LIBE/$APP_DIR/USAGE "PROGRAM_NAME" "$pgm" ;; 65641a6cfbSDevin Teske esac 66641a6cfbSDevin Teskedone 67641a6cfbSDevin Teskeshift $(( $OPTIND - 1 )) 68641a6cfbSDevin Teske 69641a6cfbSDevin Teske# 70641a6cfbSDevin Teske# Initialize 71641a6cfbSDevin Teske# 72641a6cfbSDevin Teskef_dialog_title "$msg_networking_devices" 73641a6cfbSDevin Teskef_dialog_backtitle "${ipgm:+bsdconfig }$pgm" 74641a6cfbSDevin Teskef_mustberoot_init 75641a6cfbSDevin Teske 76641a6cfbSDevin Teske# 77641a6cfbSDevin Teske# Launch application main menu 78641a6cfbSDevin Teske# 7951c41087SDevin Teskedefaultitem= 80641a6cfbSDevin Teskewhile :; do 81fd962ac6SDevin Teske f_dialog_menu_netdev "$defaultitem" || break 82fd962ac6SDevin Teske f_dialog_menutag_fetch interface 83d3a0f918SDevin Teske defaultitem="$interface" 84641a6cfbSDevin Teske 85641a6cfbSDevin Teske # 86641a6cfbSDevin Teske # dialog_menu_netdev adds an asterisk (*) to the right of the 87641a6cfbSDevin Teske # device name if the interface is active. Remove the asterisk 88641a6cfbSDevin Teske # from the device name if present. 89641a6cfbSDevin Teske # 90641a6cfbSDevin Teske case "$interface" in 91641a6cfbSDevin Teske *\*) interface="${interface%?}" ;; 92641a6cfbSDevin Teske esac 93641a6cfbSDevin Teske 94641a6cfbSDevin Teske # 95641a6cfbSDevin Teske # Obtain initial interface settings to be configured. These will be 96641a6cfbSDevin Teske # passed to the f_dialog_menu_netdev_edit function-call below which 97641a6cfbSDevin Teske # will block until the user has either cancelled or finished editing 98641a6cfbSDevin Teske # the values. 99641a6cfbSDevin Teske # 100641a6cfbSDevin Teske # First, attempt to read stored configuration from rc.conf(5) and 101641a6cfbSDevin Teske # fallback to reading the active configuration if not configured in 102641a6cfbSDevin Teske # the rc.conf(5) file(s). 103641a6cfbSDevin Teske # 104143c3d9fSDevin Teske dhcp= 105641a6cfbSDevin Teske _ipaddr= 106641a6cfbSDevin Teske _netmask= 107641a6cfbSDevin Teske _ifconfig=$( f_sysrc_get ifconfig_$interface ) 108641a6cfbSDevin Teske if [ "$_ifconfig" ]; then 109dee8ed37SDevin Teske # If DHCP, get IP address/netmask later from ifconfig(8) 110641a6cfbSDevin Teske glob="[Dd][Hh][Cc][Pp]" 111641a6cfbSDevin Teske case "$_ifconfig" in 112641a6cfbSDevin Teske $glob) dhcp=1 ;; 113641a6cfbSDevin Teske [Ss][Yy][Nn][Cc]$glob) dhcp=1 ;; 114641a6cfbSDevin Teske [Nn][Oo][Ss][Yy][Nn][Cc]$glob) dhcp=1 ;; 115641a6cfbSDevin Teske *) 116641a6cfbSDevin Teske # 117dee8ed37SDevin Teske # Get IP address/netmask from rc.conf(5) configuration 118641a6cfbSDevin Teske # 119641a6cfbSDevin Teske dhcp= 120ba44a0d5SDevin Teske eval "$( 121ba44a0d5SDevin Teske exec 2> /dev/null 122641a6cfbSDevin Teske set -- $_ifconfig 123641a6cfbSDevin Teske while [ $# -gt 0 ]; do 124641a6cfbSDevin Teske case "$1" in 125641a6cfbSDevin Teske inet) 126641a6cfbSDevin Teske shift 1 127641a6cfbSDevin Teske echo "_ipaddr='$1'" 128641a6cfbSDevin Teske ;; 129641a6cfbSDevin Teske netmask) 130641a6cfbSDevin Teske shift 1 131641a6cfbSDevin Teske echo "_netmask='$1'" 132641a6cfbSDevin Teske ;; 133641a6cfbSDevin Teske esac 134641a6cfbSDevin Teske shift 1 135641a6cfbSDevin Teske done 136641a6cfbSDevin Teske )" 137641a6cfbSDevin Teske ;; 138641a6cfbSDevin Teske esac 139641a6cfbSDevin Teske fi 140641a6cfbSDevin Teske 141641a6cfbSDevin Teske # 142641a6cfbSDevin Teske # Fill in IP address/netmask from active settings if no 143641a6cfbSDevin Teske # configuration could be extrapolated from rc.conf(5) 144641a6cfbSDevin Teske # 145*d4ae33f0SDevin Teske [ "$_ipaddr" ] || f_ifconfig_inet $interface _ipaddr 146*d4ae33f0SDevin Teske [ "$_netmask" ] || f_ifconfig_netmask $interface _netmask 147641a6cfbSDevin Teske 148641a6cfbSDevin Teske # Get the extra options (this always comes from rc.conf(5)) 149641a6cfbSDevin Teske _options=$( f_ifconfig_options $interface ) 150641a6cfbSDevin Teske 151641a6cfbSDevin Teske # Block on user-configuration of the probed settings 152641a6cfbSDevin Teske f_dialog_menu_netdev_edit \ 153143c3d9fSDevin Teske "$interface" "$_ipaddr" "$_netmask" "$_options" $dhcp 154641a6cfbSDevin Teske 155641a6cfbSDevin Teske # Return to root menu if above returns success 156f677a9e2SDevin Teske [ $? -eq $DIALOG_OK ] && break 157641a6cfbSDevin Teskedone 158641a6cfbSDevin Teske 159641a6cfbSDevin Teskeexit $SUCCESS 160641a6cfbSDevin Teske 161641a6cfbSDevin Teske################################################################################ 162641a6cfbSDevin Teske# END 163641a6cfbSDevin Teske################################################################################ 164