diff options
author | brooks <brooks@FreeBSD.org> | 2005-11-14 23:34:50 +0000 |
---|---|---|
committer | brooks <brooks@FreeBSD.org> | 2005-11-14 23:34:50 +0000 |
commit | 267072f91c36769a3994a91f21382a9acc77974b (patch) | |
tree | f08460df623c0fe4e9db71dff9c7e9dec4e7944f /etc | |
parent | f30753dc685cc64419b3334ab1b9a49db265f00f (diff) | |
download | FreeBSD-src-267072f91c36769a3994a91f21382a9acc77974b.zip FreeBSD-src-267072f91c36769a3994a91f21382a9acc77974b.tar.gz |
Add a new configuration variable, ipv4_addrs_<ifn>, which adds one or
more IPv4 address from a ranged list in CIRD notation:
ipv4_addrs_ed0="192.168.0.1/24 192.168.1.1-5/28"
In the process move alias processing into new ipv4_up/down functions to
more toward a less IPv4 centric world.
Submitted by: Philipp Wuensche <cryx dash freebsd at h3q dot com>
Diffstat (limited to 'etc')
-rw-r--r-- | etc/defaults/rc.conf | 1 | ||||
-rw-r--r-- | etc/network.subr | 58 | ||||
-rw-r--r-- | etc/rc.d/netif | 4 |
3 files changed, 61 insertions, 2 deletions
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf index 3d543ac..3cce26b 100644 --- a/etc/defaults/rc.conf +++ b/etc/defaults/rc.conf @@ -154,6 +154,7 @@ ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration. #ifconfig_lo0_alias0="inet 127.0.0.254 netmask 0xffffffff" # Sample alias entry. #ifconfig_ed0_ipx="ipx 0x00010010" # Sample IPX address family entry. #ifconfig_fxp0_name="net0" # Change interface name from fxp0 to net0. +#ipv4_addrs_fxp0="192.168.0.1/24 192.168.1.1-5/28" # example IPv4 address entry. # # If you have any sppp(4) interfaces above, you might also want to set # the following parameters. Refer to spppcontrol(8) for their meaning. diff --git a/etc/network.subr b/etc/network.subr index d5a1703..5eccd53 100644 --- a/etc/network.subr +++ b/etc/network.subr @@ -198,6 +198,64 @@ wpaif() return 1 } +# ipv4_up if +# add IPv4 addresses to the interface $if +ipv4_up() +{ + _if=$1 + ifalias_up ${_if} + ipv4_addrs_common ${_if} alias +} + +# ipv4_down if +# remove IPv4 addresses from the interface $if +ipv4_down() +{ + _if=$1 + ifalias_down ${_if} + ipv4_addrs_common ${_if} -alias +} + +# ipv4_addrs_common if action +# Evaluate the ifconfig_if_ipv4 arguments for interface $if +# and use $action to add or remove IPv4 addresses from $if. +ipv4_addrs_common() +{ + _ret=1 + _if=$1 + _action=$2 + + # get ipv4-addresses + eval cidr_addr=\${ipv4_addrs_${_if}} + + for _cidr in ${cidr_addr}; do + _ipaddr=${_cidr%%/*} + _netmask="/"${_cidr##*/} + _range=${_ipaddr##*.} + _ipnet=${_ipaddr%.*} + _iplow=${_range%-*} + _iphigh=${_range#*-} + + # clear netmask when removing aliases + if [ "${_action}" = "-alias" ]; then + _netmask="" + fi + + _ipcount=${_iplow} + while [ "${_ipcount}" -le "${_iphigh}" ]; do + eval "ifconfig ${_if} ${_action} ${_ipnet}.${_ipcount}${_netmask}" + _ipcount=$((${_ipcount}+1)) + _ret=0 + + # only the first ipaddr in a subnet need the real netmask + if [ "${_action}" != "-alias" ]; then + _netmask="/32" + fi + done + done + return $_ret +} + # ifalias_up if # Configure aliases for network interface $if. # It returns 0 if at least one alias was configured or diff --git a/etc/rc.d/netif b/etc/rc.d/netif index b692ee3..e76b967 100644 --- a/etc/rc.d/netif +++ b/etc/rc.d/netif @@ -150,7 +150,7 @@ ifn_start() ifscript_up ${ifn} && cfg=0 ifconfig_up ${ifn} && cfg=0 - ifalias_up ${ifn} && cfg=0 + ipv4_up ${ifn} && cfg=0 ipx_up ${ifn} && cfg=0 return $cfg @@ -165,7 +165,7 @@ ifn_stop() [ -z "$ifn" ] && return 1 ipx_down ${ifn} && cfg=0 - ifalias_down ${ifn} && cfg=0 + ipv4_down ${ifn} && cfg=0 ifconfig_down ${ifn} && cfg=0 ifscript_down ${ifn} && cfg=0 |