}
}
-# If the given IP is hosted then print 2 items: maskbits and iface
+# If the given IP is hosted then print 2 items: maskbits and iface
ip_maskbits_iface ()
{
_addr="$1"
ip addr show to "${_addr}/${_bits}" 2>/dev/null | \
awk -v family="${_family}" \
- 'NR == 1 { iface = gensub(":$", "", 1, $2) } \
- $1 ~ /inet/ { print gensub(".*/", "", 1, $2), iface, family }'
+ 'NR == 1 { iface = $2; sub(":$", "", iface) } \
+ $1 ~ /inet/ { mask = $2; sub(".*/", "", mask); \
+ print mask, iface, family }'
}
drop_ip ()
# server-IP client-IP
# but only for the server-IPs that are hosted on this node.
sed_expr=$(ctdb ip | tail -n +2 |
- awk -v pnn=$pnn 'pnn == $2 { printf "s/^key.*=.*statd-state@\\(%s\\)@\\([^\"]*\\).*/\\1 \\2/p\n", gensub(/\./, "\\\\.", "g", $1) }')
+ awk -v pnn=$pnn 'pnn == $2 { \
+ ip = $1; gsub(/\./, "\\\\.", ip); \
+ printf "s/^key.*=.*statd-state@\\(%s\\)@\\([^\"]*\\).*/\\1 \\2/p\n", ip }')
statd_state=$(ctdb catdb ctdb.tdb | sed -n "$sed_expr" | sort)
[ -n "$statd_state" ] || exit 0
echo "Getting IP information from interfaces..."
try_command_on_node all "ip addr show"
ip_addr_info=$(echo "$out" | \
- awk '$1 == "inet" { print gensub(/\/.*/, "", "", $2)}')
+ awk '$1 == "inet" { ip = $2; sub(/\/.*/, "", ip); print ip }')
prefix=""
for b in $(seq 0 255) ; do
ip addr show to "${_addr}/${_bits}" 2>/dev/null | \
awk -v family="${_family}" \
- 'NR == 1 { iface = gensub(":$", "", 1, $2) } \
- $1 ~ /inet/ { print gensub(".*/", "", 1, $2), iface, family }'
+ 'NR == 1 { iface = $2; sub(":$", "", iface) } \
+ $1 ~ /inet/ { mask = $2; sub(".*/", "", mask); \
+ print mask, iface, family }'
}
drop_ip ()