mirror of
https://gitlab.com/shorewall/code.git
synced 2025-08-12 01:07:50 +02:00
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:
@ -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'
|
||||
#
|
||||
|
Reference in New Issue
Block a user