mirror of
https://gitlab.com/shorewall/code.git
synced 2025-06-25 12:13:29 +02:00
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:
parent
9199759921
commit
0b075e78b6
@ -2846,7 +2846,7 @@ get_routed_subnets() # $1 = interface name
|
|||||||
done
|
done
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
# Convert an IP address to an integer
|
# Convert an IP address in quad format to an integer
|
||||||
#
|
#
|
||||||
decodeaddr() {
|
decodeaddr() {
|
||||||
local x
|
local x
|
||||||
@ -2864,7 +2864,7 @@ decodeaddr() {
|
|||||||
IFS=$ifs
|
IFS=$ifs
|
||||||
}
|
}
|
||||||
#
|
#
|
||||||
# convert an integer to an IP address
|
# convert an integer to quad format
|
||||||
#
|
#
|
||||||
encodeaddr() {
|
encodeaddr() {
|
||||||
addr=$1
|
addr=$1
|
||||||
@ -2901,6 +2901,24 @@ ip_netmask() {
|
|||||||
echo $(( $(( 0xffffffff << $((32 - $1)) )) & 0xffffffff ))
|
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
|
# Test for subnet membership
|
||||||
#
|
#
|
||||||
in_subnet() # $1 = IP address, $2 = CIDR network
|
in_subnet() # $1 = IP address, $2 = CIDR network
|
||||||
@ -3223,28 +3241,30 @@ verify_os_version() {
|
|||||||
#
|
#
|
||||||
add_ip_aliases()
|
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
|
# Folks feel uneasy if they don't see all of the same
|
||||||
# decoration on these IP addresses that they see when their
|
# decoration on these IP addresses that they see when their
|
||||||
# distro's net config tool adds them. In an attempt to reduce
|
# distro's net config tool adds them. In an attempt to reduce
|
||||||
# the anxiety level, we have the following code which sets
|
# 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
|
# Get all of the lines that contain inet addresses with broadcast
|
||||||
#
|
#
|
||||||
val=
|
ip addr show $interface 2> /dev/null | grep 'inet' | while read inet cidr rest ; do
|
||||||
|
|
||||||
ip addr show $interface 2> /dev/null | grep 'inet.*brd ' | while read inet cidr brd bcast rest ; do
|
|
||||||
if in_subnet $external $cidr; then
|
if in_subnet $external $cidr; then
|
||||||
val="/${cidr#*/} brd $bcast"
|
echo "/${cidr#*/} brd `broadcastaddress $cidr`"
|
||||||
break
|
break
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
do_one()
|
||||||
|
{
|
||||||
|
val=`details`
|
||||||
run_ip addr add ${external}${val} dev $interface $label
|
run_ip addr add ${external}${val} dev $interface $label
|
||||||
echo "$external $interface" >> ${STATEDIR}/nat
|
echo "$external $interface" >> ${STATEDIR}/nat
|
||||||
[ -n "$label" ] && label="with $label"
|
[ -n "$label" ] && label="with $label"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user