allowBcasts, dropBcasts and nosmurfs

git-svn-id: https://shorewall.svn.sourceforge.net/svnroot/shorewall/trunk@9008 fbd18981-670d-0410-9b5c-8dc0c1a9a2bb
This commit is contained in:
teastep
2008-12-12 21:31:31 +00:00
parent f181cf7884
commit 3e328daf0a
13 changed files with 165 additions and 71 deletions

View File

@ -562,39 +562,43 @@ convert_to_anycast() {
local m
while read address; do
vlsm=${address#*/}
if [ ${vlsm:-128} -ne 128 ]; then
#
# Defines a subnet -- get the anycase address
#
address=$(normalize_address ${address%/*})
case $address in
2*|3*)
vlsm=${address#*/}
if [ ${vlsm:-128} -ne 128 ]; then
#
# Defines a subnet -- get the anycast address
#
address=$(normalize_address ${address%/*})
while [ $vlsm -le 112 ]; do
address=${address%:*}
vlsm=$(($vlsm + 16))
done
while [ $vlsm -le 112 ]; do
address=${address%:*}
vlsm=$(($vlsm + 16))
done
if [ $vlsm -lt 128 ]; then
o=$((0x${address##*:}))
m=0
while [ $vlsm -lt 128 ]; do
m=$((($m >> 1) | 0x8000))
vlsm=$(($vlsm + 1))
done
if [ $vlsm -lt 128 ]; then
o=$((0x${address##*:}))
m=0
while [ $vlsm -lt 128 ]; do
m=$((($m >> 1) | 0x8000))
vlsm=$(($vlsm + 1))
done
o=$(($o & $m))
o=$(($o & $m))
address=${address%:*}:$(printf %04x $o)
fi
address=${address%:*}:$(printf %04x $o)
fi
list_count $(split $address)
list_count $(split $address)
if [ $? -lt 8 ]; then
address=$address::
fi
if [ $? -lt 8 ]; then
address=$address::
fi
echo $address
fi
echo $address
fi
;;
esac
done
}
@ -602,7 +606,7 @@ convert_to_anycast() {
# Generate a list of anycast addresses for a given interface
#
get_interface_bcasts() # $1 = interface
get_interface_acasts() # $1 = interface
{
local addresses
addresses=
@ -610,6 +614,14 @@ get_interface_bcasts() # $1 = interface
find_interface_full_addresses $1 | convert_to_anycast | sort -u
}
#
# Get a list of all configured anycast addresses on the system
#
get_all_acasts()
{
find_interface_full_addresses | convert_to_anycast | sort -u
}
#
# Internal version of 'which'
#