1if [ ! "$_NETWORKING_NETMASK_SUBR" ]; then _NETWORKING_NETMASK_SUBR=1 2#
|
3# Copyright (c) 2006-2012 Devin Teske
|
3# Copyright (c) 2006-2013 Devin Teske |
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
--- 7 unchanged lines hidden (view full) ---
19# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20# DAMAGES (INLUDING, 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/bsdconfig/networking/share/netmask.subr 244675 2012-12-25 10:47:45Z dteske $
|
27# $FreeBSD: head/usr.sbin/bsdconfig/networking/share/netmask.subr 247280 2013-02-25 19:55:32Z dteske $ |
28# 29############################################################ INCLUDES 30 31BSDCFG_SHARE="/usr/share/bsdconfig" 32. $BSDCFG_SHARE/common.subr || exit 1 33f_dprintf "%s: loading includes..." networking/netmask.subr 34f_include $BSDCFG_SHARE/dialog.subr 35f_include $BSDCFG_SHARE/strings.subr 36f_include $BSDCFG_SHARE/networking/common.subr 37 38BSDCFG_LIBE="/usr/libexec/bsdconfig" APP_DIR="120.networking" 39f_include_lang $BSDCFG_LIBE/$APP_DIR/include/messages.subr 40 41############################################################ FUNCTIONS 42
|
43# f_ifconfig_netmask $interface
44#
45# Returns the IPv4 subnet mask associated with $interface.
46#
47f_ifconfig_netmask()
48{
49 local interface="$1" octets
50 octets=$( ifconfig "$interface" 2> /dev/null | awk \
51 '
52 BEGIN { found = 0 }
53 ( $1 == "inet" ) \
54 {
55 printf "%s %s %s %s\n",
56 substr($4,3,2),
57 substr($4,5,2),
58 substr($4,7,2),
59 substr($4,9,2)
60 found = 1
61 exit
62 }
63 END { exit ! found }
64 ' ) || return $FAILURE
65
66 local octet netmask=
67 for octet in $octets; do
68 netmask="$netmask${netmask:+.}$( printf "%u" "0x$octet" )"
69 done
70 echo $netmask
71}
72
73# f_validate_netmask $netmask
74#
75# Returns zero if the given argument (a subnet mask) is of the proper format.
76#
77# The return status for invalid IP address is one of:
78# 1 One or more individual fields within the subnet mask (separated
79# by dots) contains one or more invalid characters.
80# 2 One or more individual fields within the subnet mask are null
81# and/or missing.
82# 3 One or more individual fields within the subnet mask exceeds
83# the maximum of 255 (a full 8-bit register).
84# 4 The subnet mask has either too few or too many fields.
85# 5 One or more individual fields within the subnet mask is an
86# invalid integer (only 0,128,192,224,240,248,252,254,255 are
87# valid integers).
88#
89f_validate_netmask()
90{
91 local mask="$1"
92
93 ( # Operate within a sub-shell to protect the parent environment
94
95 # Track number of fields for error checking
96 nfields=0
97
98 IFS="." # Split on `dot'
99 for field in $mask; do
100
101 # Return error if the field is null
102 [ "$field" ] || exit 2
103
104 # Return error if not a whole positive integer
105 f_isinteger "$field" || exit 1
106
107 # Return error if the field exceeds 255
108 [ $field -gt 255 ] && exit 3
109
110 # Return error if the field is an invalid integer
111 case "$field" in
112 0|128|192|224|240|248|252|254|255) :;;
113 *) exit 5;;
114 esac
115
116 nfields=$(( $nfields + 1 ))
117
118 done
119
120 [ $nfields -eq 4 ] || exit 4
121 )
122}
123
|
43# f_dialog_maskerror $error $netmask 44# 45# Display a msgbox with the appropriate error message for an error returned by 46# the f_validate_netmask function. 47# 48f_dialog_maskerror() 49{ 50 local error="$1" netmask="$2"
--- 86 unchanged lines hidden --- |