Fix addition of IP addresses

git-svn-id: https://shorewall.svn.sourceforge.net/svnroot/shorewall/trunk@609 fbd18981-670d-0410-9b5c-8dc0c1a9a2bb
This commit is contained in:
teastep 2003-06-23 00:42:28 +00:00
parent 9199759921
commit 0b075e78b6

View File

@ -2846,7 +2846,7 @@ get_routed_subnets() # $1 = interface name
done
}
#
# Convert an IP address to an integer
# Convert an IP address in quad format to an integer
#
decodeaddr() {
local x
@ -2864,7 +2864,7 @@ decodeaddr() {
IFS=$ifs
}
#
# convert an integer to an IP address
# convert an integer to quad format
#
encodeaddr() {
addr=$1
@ -2901,6 +2901,24 @@ ip_netmask() {
echo $(( $(( 0xffffffff << $((32 - $1)) )) & 0xffffffff ))
}
#
# Network address from CIDR
#
networkaddress() {
local decodedaddr=`decodeaddr ${1%/*}`
local netmask=`ip_netmask ${1#*/}`
echo `encodeaddr $((decodedaddr & netmask))`
}
#
# Calculate broadcast address from CIDR
#
broadcastaddress() {
local decodedaddr=`decodeaddr ${1%/*}`
local netmask=`ip_netmask ${1#*/}`
echo `encodeaddr $(( $(($decodedaddr & $netmask)) | $(( $netmask ^ 0xffffffff )) ))`
}
#
# Test for subnet membership
#
in_subnet() # $1 = IP address, $2 = CIDR network
@ -3223,28 +3241,30 @@ verify_os_version() {
#
add_ip_aliases()
{
local addresses external interface inet cidr brd bcast rest
local addresses external interface inet cidr rest val
do_one()
details()
{
#
# Folks feel uneasy if they don't see all of the same
# decoration on these IP addresses that they see when their
# distro's net config tool adds them. In an attempt to reduce
# the anxiety level, we have the following code which sets
# the VLSM and BRD from the primary address in the same subnet
# the VLSM and BRD from an existing address in the same subnet
#
# Get all of the lines that contain inet addresses with broadcast
#
val=
ip addr show $interface 2> /dev/null | grep 'inet.*brd ' | while read inet cidr brd bcast rest ; do
ip addr show $interface 2> /dev/null | grep 'inet' | while read inet cidr rest ; do
if in_subnet $external $cidr; then
val="/${cidr#*/} brd $bcast"
echo "/${cidr#*/} brd `broadcastaddress $cidr`"
break
fi
done
}
do_one()
{
val=`details`
run_ip addr add ${external}${val} dev $interface $label
echo "$external $interface" >> ${STATEDIR}/nat
[ -n "$label" ] && label="with $label"