summaryrefslogtreecommitdiff
path: root/ctdb
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2022-08-17 11:41:33 +1000
committerAmitay Isaacs <amitay@samba.org>2022-09-16 03:36:32 +0000
commit67e0ca5e01439b9efe4611c5fcfd0bf2ac69423b (patch)
tree17fdcf0389502b5d55c81ca4c423a6966391d80b /ctdb
parent517f09eb6f325af0d69b14d5b6b0e6b84616c6ce (diff)
downloadsamba-67e0ca5e01439b9efe4611c5fcfd0bf2ac69423b.tar.gz
ctdb-tests: Reformat script with "shfmt -w -p -i 0 -fn"
As per current Samba convention. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'ctdb')
-rwxr-xr-xctdb/tests/UNIT/eventscripts/stubs/ip1172
1 files changed, 648 insertions, 524 deletions
diff --git a/ctdb/tests/UNIT/eventscripts/stubs/ip b/ctdb/tests/UNIT/eventscripts/stubs/ip
index 630d0e8b433..e4ea2289d67 100755
--- a/ctdb/tests/UNIT/eventscripts/stubs/ip
+++ b/ctdb/tests/UNIT/eventscripts/stubs/ip
@@ -5,132 +5,142 @@ mkdir -p "$FAKE_IP_STATE"
promote_secondaries=true
-not_implemented ()
+not_implemented()
{
- echo "ip stub command: \"$1\" not implemented"
- exit 127
+ echo "ip stub command: \"$1\" not implemented"
+ exit 127
}
######################################################################
-ip_link ()
+ip_link()
{
- case "$1" in
+ case "$1" in
set)
- shift
- # iface="$1"
- case "$2" in
- up) ip_link_set_up "$1" ;;
+ shift
+ # iface="$1"
+ case "$2" in
+ up) ip_link_set_up "$1" ;;
down) ip_link_down_up "$1" ;;
- *) not_implemented "\"$2\" in \"$orig_args\"" ;;
- esac
- ;;
- show) shift ; ip_link_show "$@" ;;
- add*) shift ; ip_link_add "$@" ;;
- del*) shift ; ip_link_delete "$@" ;;
+ *) not_implemented "\"$2\" in \"$orig_args\"" ;;
+ esac
+ ;;
+ show)
+ shift
+ ip_link_show "$@"
+ ;;
+ add*)
+ shift
+ ip_link_add "$@"
+ ;;
+ del*)
+ shift
+ ip_link_delete "$@"
+ ;;
*) not_implemented "$*" ;;
- esac
+ esac
}
-ip_link_add ()
+ip_link_add()
{
- _link=""
- _name=""
- _type=""
+ _link=""
+ _name=""
+ _type=""
+
+ while [ -n "$1" ]; do
+ case "$1" in
+ link)
+ _link="$2"
+ shift 2
+ ;;
+ name)
+ _name="$2"
+ shift 2
+ ;;
+ type)
+ if [ "$2" != "vlan" ]; then
+ not_implemented "link type $1"
+ fi
+ _type="$2"
+ shift 2
+ ;;
+ id) shift 2 ;;
+ *) not_implemented "$1" ;;
+ esac
+ done
- while [ -n "$1" ] ; do
- case "$1" in
- link)
- _link="$2"
- shift 2
- ;;
- name)
- _name="$2"
- shift 2
- ;;
- type)
- if [ "$2" != "vlan" ] ; then
- not_implemented "link type $1"
+ case "$_type" in
+ vlan)
+ if [ -z "$_name" -o -z "$_link" ]; then
+ not_implemented "ip link add with null name or link"
fi
- _type="$2"
- shift 2
+
+ mkdir -p "${FAKE_IP_STATE}/interfaces-vlan"
+ echo "$_link" >"${FAKE_IP_STATE}/interfaces-vlan/${_name}"
+ ip_link_set_down "$_name"
;;
- id) shift 2 ;;
- *) not_implemented "$1" ;;
esac
- done
-
- case "$_type" in
- vlan)
- if [ -z "$_name" -o -z "$_link" ] ; then
- not_implemented "ip link add with null name or link"
- fi
-
- mkdir -p "${FAKE_IP_STATE}/interfaces-vlan"
- echo "$_link" >"${FAKE_IP_STATE}/interfaces-vlan/${_name}"
- ip_link_set_down "$_name"
- ;;
- esac
}
-ip_link_delete ()
+ip_link_delete()
{
- mkdir -p "${FAKE_IP_STATE}/interfaces-deleted"
- touch "${FAKE_IP_STATE}/interfaces-deleted/$1"
- rm -f "${FAKE_IP_STATE}/interfaces-vlan/$1"
+ mkdir -p "${FAKE_IP_STATE}/interfaces-deleted"
+ touch "${FAKE_IP_STATE}/interfaces-deleted/$1"
+ rm -f "${FAKE_IP_STATE}/interfaces-vlan/$1"
}
-ip_link_set_up ()
+ip_link_set_up()
{
- rm -f "${FAKE_IP_STATE}/interfaces-down/$1"
- rm -f "${FAKE_IP_STATE}/interfaces-deleted/$1"
+ rm -f "${FAKE_IP_STATE}/interfaces-down/$1"
+ rm -f "${FAKE_IP_STATE}/interfaces-deleted/$1"
}
-ip_link_set_down ()
+ip_link_set_down()
{
- rm -f "${FAKE_IP_STATE}/interfaces-deleted/$1"
- mkdir -p "${FAKE_IP_STATE}/interfaces-down"
- touch "${FAKE_IP_STATE}/interfaces-down/$1"
+ rm -f "${FAKE_IP_STATE}/interfaces-deleted/$1"
+ mkdir -p "${FAKE_IP_STATE}/interfaces-down"
+ touch "${FAKE_IP_STATE}/interfaces-down/$1"
}
-ip_link_show ()
+ip_link_show()
{
- dev="$1"
- if [ "$dev" = "dev" -a -n "$2" ] ; then
- dev="$2"
- fi
-
- if [ -e "${FAKE_IP_STATE}/interfaces-deleted/$dev" ] ; then
- echo "Device \"${dev}\" does not exist." >&2
- exit 255
- fi
-
- if [ -r "${FAKE_IP_STATE}/interfaces-vlan/${dev}" ] ; then
- read _link <"${FAKE_IP_STATE}/interfaces-vlan/${dev}"
- dev="${dev}@${_link}"
- fi
-
- _state="UP"
- _flags=",UP,LOWER_UP"
- if [ -e "${FAKE_IP_STATE}/interfaces-down/$dev" ] ; then
- _state="DOWN"
- _flags=""
- fi
- case "$dev" in
- lo)
- _mac="00:00:00:00:00:00"
- _brd="00:00:00:00:00:00"
- _type="loopback"
- _opts="<LOOPBACK${_flags}> mtu 65536 qdisc noqueue state UNKNOWN"
- ;;
- *)
- _mac=$(echo $dev | cksum | sed -r -e 's@(..)(..)(..).*@fe:fe:fe:\1:\2:\3@')
- _brd="ff:ff:ff:ff:ff:ff"
- _type="ether"
- _opts="<BROADCAST,MULTICAST${_flags}> mtu 1500 qdisc pfifo_fast state ${_state} qlen 1000"
- esac
- echo "${n:-42}: ${dev}: ${_opts}"
- echo " link/${_type} ${_mac} brd ${_brd}"
+ dev="$1"
+ if [ "$dev" = "dev" -a -n "$2" ]; then
+ dev="$2"
+ fi
+
+ if [ -e "${FAKE_IP_STATE}/interfaces-deleted/$dev" ]; then
+ echo "Device \"${dev}\" does not exist." >&2
+ exit 255
+ fi
+
+ if [ -r "${FAKE_IP_STATE}/interfaces-vlan/${dev}" ]; then
+ read _link <"${FAKE_IP_STATE}/interfaces-vlan/${dev}"
+ dev="${dev}@${_link}"
+ fi
+
+ _state="UP"
+ _flags=",UP,LOWER_UP"
+ if [ -e "${FAKE_IP_STATE}/interfaces-down/$dev" ]; then
+ _state="DOWN"
+ _flags=""
+ fi
+ case "$dev" in
+ lo)
+ _mac="00:00:00:00:00:00"
+ _brd="00:00:00:00:00:00"
+ _type="loopback"
+ _opts="<LOOPBACK${_flags}> mtu 65536 qdisc noqueue state UNKNOWN"
+ ;;
+ *)
+ _mac=$(echo $dev | cksum | sed -r -e 's@(..)(..)(..).*@fe:fe:fe:\1:\2:\3@')
+ _brd="ff:ff:ff:ff:ff:ff"
+ _type="ether"
+ _opts="<BROADCAST,MULTICAST${_flags}> mtu 1500 qdisc pfifo_fast state ${_state} qlen 1000"
+ ;;
+ esac
+ echo "${n:-42}: ${dev}: ${_opts}"
+ echo " link/${_type} ${_mac} brd ${_brd}"
}
# This is incomplete because it doesn't actually look up table ids in
@@ -139,270 +149,315 @@ ip_link_show ()
# to fake a bad table id.
[ -n "$IP_ROUTE_BAD_TABLE_ID" ] || IP_ROUTE_BAD_TABLE_ID=false
-ip_check_table ()
+ip_check_table()
{
- _cmd="$1"
-
- if [ "$_cmd" = "route" -a -z "$_table" ] ;then
- _table="main"
- fi
-
- [ -n "$_table" ] || not_implemented "ip rule/route without \"table\""
-
- # Only allow tables names from 13.per_ip_routing and "main". This
- # is a cheap way of avoiding implementing the default/local
- # tables.
- case "$_table" in
- ctdb.*|main)
- if $IP_ROUTE_BAD_TABLE_ID ; then
- # Ouch. Simulate inconsistent errors from ip. :-(
- case "$_cmd" in
- route)
- echo "Error: argument "${_table}" is wrong: table id value is invalid" >&2
-
- ;;
- *)
- echo "Error: argument "${_table}" is wrong: invalid table ID" >&2
- esac
- exit 255
- fi
- ;;
+ _cmd="$1"
+
+ if [ "$_cmd" = "route" -a -z "$_table" ]; then
+ _table="main"
+ fi
+
+ [ -n "$_table" ] || not_implemented "ip rule/route without \"table\""
+
+ # Only allow tables names from 13.per_ip_routing and "main". This
+ # is a cheap way of avoiding implementing the default/local
+ # tables.
+ case "$_table" in
+ ctdb.* | main)
+ if $IP_ROUTE_BAD_TABLE_ID; then
+ # Ouch. Simulate inconsistent errors from ip. :-(
+ case "$_cmd" in
+ route)
+ echo "Error: argument "${_table}" is wrong: table id value is invalid" >&2
+
+ ;;
+ *)
+ echo "Error: argument "${_table}" is wrong: invalid table ID" >&2
+ ;;
+ esac
+ exit 255
+ fi
+ ;;
*) not_implemented "table=${_table} ${orig_args}" ;;
- esac
+ esac
}
######################################################################
-ip_addr ()
-{
- case "$1" in
- show|list|"") shift ; ip_addr_show "$@" ;;
- add*) shift ; ip_addr_add "$@" ;;
- del*) shift ; ip_addr_del "$@" ;;
- *) not_implemented "\"$1\" in \"$orig_args\"" ;;
- esac
-}
-
-ip_addr_show ()
+ip_addr()
{
- dev=""
- primary=true
- secondary=true
- _to=""
- while [ -n "$1" ] ; do
case "$1" in
- dev)
- dev="$2" ; shift 2
- ;;
- # Do stupid things and stupid things will happen!
- primary)
- primary=true ; secondary=false ; shift
+ show | list | "")
+ shift
+ ip_addr_show "$@"
;;
- secondary)
- secondary=true ; primary=false ; shift
+ add*)
+ shift
+ ip_addr_add "$@"
;;
- to)
- _to="$2" ; shift 2
+ del*)
+ shift
+ ip_addr_del "$@"
;;
- *)
- # Assume an interface name
- dev="$1" ; shift 1
- esac
- done
- devices="$dev"
- if [ -z "$devices" ] ; then
- # No device specified? Get all the primaries...
- devices=$(ls "${FAKE_IP_STATE}/addresses/"*-primary 2>/dev/null | \
- sed -e 's@.*/@@' -e 's@-.*-primary$@@' | sort -u)
- fi
- calc_brd ()
- {
- case "${local#*/}" in
- 24) brd="${local%.*}.255" ;;
- 32) brd="" ;;
- *) not_implemented "list ... fake bits other than 24/32: ${local#*/}"
+ *) not_implemented "\"$1\" in \"$orig_args\"" ;;
esac
- }
- show_iface()
- {
- ip_link_show "$dev"
-
- nets=$(ls "${FAKE_IP_STATE}/addresses/${dev}"-*-primary 2>/dev/null | \
- sed -e 's@.*/@@' -e "s@${dev}-\(.*\)-primary\$@\1@")
-
- for net in $nets ; do
- pf="${FAKE_IP_STATE}/addresses/${dev}-${net}-primary"
- sf="${FAKE_IP_STATE}/addresses/${dev}-${net}-secondary"
- if $primary && [ -r "$pf" ] ; then
- read local scope <"$pf"
- if [ -z "$_to" -o "${_to%/*}" = "${local%/*}" ] ; then
- calc_brd
- echo " inet ${local} ${brd:+brd ${brd} }scope ${scope} ${dev}"
- fi
- fi
- if $secondary && [ -r "$sf" ] ; then
- while read local scope ; do
- if [ -z "$_to" -o "${_to%/*}" = "${local%/*}" ] ; then
- calc_brd
- echo " inet ${local} ${brd:+brd }${brd} scope ${scope} secondary ${dev}"
- fi
- done <"$sf"
- fi
- if [ -z "$_to" ] ; then
- echo " valid_lft forever preferred_lft forever"
- fi
+}
+
+ip_addr_show()
+{
+ dev=""
+ primary=true
+ secondary=true
+ _to=""
+ while [ -n "$1" ]; do
+ case "$1" in
+ dev)
+ dev="$2"
+ shift 2
+ ;;
+ # Do stupid things and stupid things will happen!
+ primary)
+ primary=true
+ secondary=false
+ shift
+ ;;
+ secondary)
+ secondary=true
+ primary=false
+ shift
+ ;;
+ to)
+ _to="$2"
+ shift 2
+ ;;
+ *)
+ # Assume an interface name
+ dev="$1"
+ shift 1
+ ;;
+ esac
done
- }
- n=1
- for dev in $devices ; do
- if [ -z "$_to" ] || \
- grep -F "${_to%/*}/" "${FAKE_IP_STATE}/addresses/${dev}-"* >/dev/null ; then
- show_iface
+ devices="$dev"
+ if [ -z "$devices" ]; then
+ # No device specified? Get all the primaries...
+ devices=$(ls "${FAKE_IP_STATE}/addresses/"*-primary 2>/dev/null |
+ sed -e 's@.*/@@' -e 's@-.*-primary$@@' | sort -u)
fi
- n=$(($n + 1))
- done
+ calc_brd()
+ {
+ case "${local#*/}" in
+ 24) brd="${local%.*}.255" ;;
+ 32) brd="" ;;
+ *) not_implemented "list ... fake bits other than 24/32: ${local#*/}" ;;
+ esac
+ }
+ show_iface()
+ {
+ ip_link_show "$dev"
+
+ nets=$(ls "${FAKE_IP_STATE}/addresses/${dev}"-*-primary 2>/dev/null |
+ sed -e 's@.*/@@' -e "s@${dev}-\(.*\)-primary\$@\1@")
+
+ for net in $nets; do
+ pf="${FAKE_IP_STATE}/addresses/${dev}-${net}-primary"
+ sf="${FAKE_IP_STATE}/addresses/${dev}-${net}-secondary"
+ if $primary && [ -r "$pf" ]; then
+ read local scope <"$pf"
+ if [ -z "$_to" -o "${_to%/*}" = "${local%/*}" ]; then
+ calc_brd
+ echo " inet ${local} ${brd:+brd ${brd} }scope ${scope} ${dev}"
+ fi
+ fi
+ if $secondary && [ -r "$sf" ]; then
+ while read local scope; do
+ if [ -z "$_to" -o "${_to%/*}" = "${local%/*}" ]; then
+ calc_brd
+ echo " inet ${local} ${brd:+brd }${brd} scope ${scope} secondary ${dev}"
+ fi
+ done <"$sf"
+ fi
+ if [ -z "$_to" ]; then
+ echo " valid_lft forever preferred_lft forever"
+ fi
+ done
+ }
+ n=1
+ for dev in $devices; do
+ if [ -z "$_to" ] ||
+ grep -F "${_to%/*}/" "${FAKE_IP_STATE}/addresses/${dev}-"* >/dev/null; then
+ show_iface
+ fi
+ n=$(($n + 1))
+ done
}
# Copied from 13.per_ip_routing for now... so this is lazy testing :-(
-ipv4_host_addr_to_net ()
+ipv4_host_addr_to_net()
{
- _host="$1"
- _maskbits="$2"
-
- # Convert the host address to an unsigned long by splitting out
- # the octets and doing the math.
- _host_ul=0
- for _o in $(export IFS="." ; echo $_host) ; do
- _host_ul=$(( ($_host_ul << 8) + $_o)) # work around Emacs color bug
- done
-
- # Calculate the mask and apply it.
- _mask_ul=$(( 0xffffffff << (32 - $_maskbits) ))
- _net_ul=$(( $_host_ul & $_mask_ul ))
-
- # Now convert to a network address one byte at a time.
- _net=""
- for _o in $(seq 1 4) ; do
- _net="$(($_net_ul & 255))${_net:+.}${_net}"
- _net_ul=$(($_net_ul >> 8))
- done
-
- echo "${_net}/${_maskbits}"
+ _host="$1"
+ _maskbits="$2"
+
+ # Convert the host address to an unsigned long by splitting out
+ # the octets and doing the math.
+ _host_ul=0
+ for _o in $(
+ export IFS="."
+ echo $_host
+ ); do
+ _host_ul=$((($_host_ul << 8) + $_o)) # work around Emacs color bug
+ done
+
+ # Calculate the mask and apply it.
+ _mask_ul=$((0xffffffff << (32 - $_maskbits)))
+ _net_ul=$(($_host_ul & $_mask_ul))
+
+ # Now convert to a network address one byte at a time.
+ _net=""
+ for _o in $(seq 1 4); do
+ _net="$(($_net_ul & 255))${_net:+.}${_net}"
+ _net_ul=$(($_net_ul >> 8))
+ done
+
+ echo "${_net}/${_maskbits}"
}
-ip_addr_add ()
+ip_addr_add()
{
- local=""
- dev=""
- brd=""
- scope="global"
- while [ -n "$1" ] ; do
- case "$1" in
- *.*.*.*/*)
- local="$1" ; shift
- ;;
- local)
- local="$2" ; shift 2
- ;;
- broadcast|brd)
- # For now assume this is always '+'.
- if [ "$2" != "+" ] ; then
- not_implemented "addr add ... brd $2 ..."
- fi
- shift 2
- ;;
- dev)
- dev="$2" ; shift 2
- ;;
- scope)
- scope="$2" ; shift 2
- ;;
- *)
- not_implemented "$@"
- esac
- done
- if [ -z "$dev" ] ; then
- not_implemented "addr add (without dev)"
- fi
- mkdir -p "${FAKE_IP_STATE}/addresses"
- net_str=$(ipv4_host_addr_to_net $(IFS="/" ; echo $local))
- net_str=$(echo "$net_str" | sed -e 's@/@_@')
- pf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-primary"
- sf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-secondary"
- # We could lock here... but we should be the only ones playing
- # around here with these stubs.
- if [ ! -f "$pf" ] ; then
- echo "$local $scope" >"$pf"
- elif grep -Fq "$local" "$pf" ; then
- echo "RTNETLINK answers: File exists" >&2
- exit 254
- elif [ -f "$sf" ] && grep -Fq "$local" "$sf" ; then
- echo "RTNETLINK answers: File exists" >&2
- exit 254
- else
- echo "$local $scope" >>"$sf"
- fi
+ local=""
+ dev=""
+ brd=""
+ scope="global"
+ while [ -n "$1" ]; do
+ case "$1" in
+ *.*.*.*/*)
+ local="$1"
+ shift
+ ;;
+ local)
+ local="$2"
+ shift 2
+ ;;
+ broadcast | brd)
+ # For now assume this is always '+'.
+ if [ "$2" != "+" ]; then
+ not_implemented "addr add ... brd $2 ..."
+ fi
+ shift 2
+ ;;
+ dev)
+ dev="$2"
+ shift 2
+ ;;
+ scope)
+ scope="$2"
+ shift 2
+ ;;
+ *)
+ not_implemented "$@"
+ ;;
+ esac
+ done
+ if [ -z "$dev" ]; then
+ not_implemented "addr add (without dev)"
+ fi
+ mkdir -p "${FAKE_IP_STATE}/addresses"
+ net_str=$(ipv4_host_addr_to_net $(
+ IFS="/"
+ echo $local
+ ))
+ net_str=$(echo "$net_str" | sed -e 's@/@_@')
+ pf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-primary"
+ sf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-secondary"
+ # We could lock here... but we should be the only ones playing
+ # around here with these stubs.
+ if [ ! -f "$pf" ]; then
+ echo "$local $scope" >"$pf"
+ elif grep -Fq "$local" "$pf"; then
+ echo "RTNETLINK answers: File exists" >&2
+ exit 254
+ elif [ -f "$sf" ] && grep -Fq "$local" "$sf"; then
+ echo "RTNETLINK answers: File exists" >&2
+ exit 254
+ else
+ echo "$local $scope" >>"$sf"
+ fi
}
-ip_addr_del ()
+ip_addr_del()
{
- local=""
- dev=""
- while [ -n "$1" ] ; do
- case "$1" in
- *.*.*.*/*)
- local="$1" ; shift
- ;;
- local)
- local="$2" ; shift 2
- ;;
- dev)
- dev="$2" ; shift 2
- ;;
- *)
- not_implemented "addr del ... $1 ..."
- esac
- done
- if [ -z "$dev" ] ; then
- not_implemented "addr del (without dev)"
- fi
- mkdir -p "${FAKE_IP_STATE}/addresses"
- net_str=$(ipv4_host_addr_to_net $(IFS="/" ; echo $local))
- net_str=$(echo "$net_str" | sed -e 's@/@_@')
- pf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-primary"
- sf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-secondary"
- # We could lock here... but we should be the only ones playing
- # around here with these stubs.
- if [ ! -f "$pf" ] ; then
- echo "RTNETLINK answers: Cannot assign requested address" >&2
- exit 254
- elif grep -Fq "$local" "$pf" ; then
- if $promote_secondaries && [ -s "$sf" ] ; then
- head -n 1 "$sf" >"$pf"
- sed -i -e '1d' "$sf"
+ local=""
+ dev=""
+ while [ -n "$1" ]; do
+ case "$1" in
+ *.*.*.*/*)
+ local="$1"
+ shift
+ ;;
+ local)
+ local="$2"
+ shift 2
+ ;;
+ dev)
+ dev="$2"
+ shift 2
+ ;;
+ *)
+ not_implemented "addr del ... $1 ..."
+ ;;
+ esac
+ done
+ if [ -z "$dev" ]; then
+ not_implemented "addr del (without dev)"
+ fi
+ mkdir -p "${FAKE_IP_STATE}/addresses"
+ net_str=$(ipv4_host_addr_to_net $(
+ IFS="/"
+ echo $local
+ ))
+ net_str=$(echo "$net_str" | sed -e 's@/@_@')
+ pf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-primary"
+ sf="${FAKE_IP_STATE}/addresses/${dev}-${net_str}-secondary"
+ # We could lock here... but we should be the only ones playing
+ # around here with these stubs.
+ if [ ! -f "$pf" ]; then
+ echo "RTNETLINK answers: Cannot assign requested address" >&2
+ exit 254
+ elif grep -Fq "$local" "$pf"; then
+ if $promote_secondaries && [ -s "$sf" ]; then
+ head -n 1 "$sf" >"$pf"
+ sed -i -e '1d' "$sf"
+ else
+ # Remove primaries AND SECONDARIES.
+ rm -f "$pf" "$sf"
+ fi
+ elif [ -f "$sf" ] && grep -Fq "$local" "$sf"; then
+ grep -Fv "$local" "$sf" >"${sf}.new"
+ mv "${sf}.new" "$sf"
else
- # Remove primaries AND SECONDARIES.
- rm -f "$pf" "$sf"
+ echo "RTNETLINK answers: Cannot assign requested address" >&2
+ exit 254
fi
- elif [ -f "$sf" ] && grep -Fq "$local" "$sf" ; then
- grep -Fv "$local" "$sf" >"${sf}.new"
- mv "${sf}.new" "$sf"
- else
- echo "RTNETLINK answers: Cannot assign requested address" >&2
- exit 254
- fi
}
######################################################################
-ip_rule ()
+ip_rule()
{
- case "$1" in
- show|list|"") shift ; ip_rule_show "$@" ;;
- add) shift ; ip_rule_add "$@" ;;
- del*) shift ; ip_rule_del "$@" ;;
+ case "$1" in
+ show | list | "")
+ shift
+ ip_rule_show "$@"
+ ;;
+ add)
+ shift
+ ip_rule_add "$@"
+ ;;
+ del*)
+ shift
+ ip_rule_del "$@"
+ ;;
*) not_implemented "$1 in \"$orig_args\"" ;;
- esac
+ esac
}
@@ -410,129 +465,150 @@ ip_rule ()
# the real version, rules can be repeated. Deleting just deletes the
# 1st match.
-ip_rule_show ()
+ip_rule_show()
{
- ip_rule_show_1 ()
- {
- _pre="$1"
- _table="$2"
- _selectors="$3"
- # potentially more options
+ ip_rule_show_1()
+ {
+ _pre="$1"
+ _table="$2"
+ _selectors="$3"
+ # potentially more options
- printf "%d:\t%s lookup %s \n" $_pre "$_selectors" "$_table"
- }
+ printf "%d:\t%s lookup %s \n" $_pre "$_selectors" "$_table"
+ }
- ip_rule_show_some ()
- {
- _min="$1"
- _max="$2"
+ ip_rule_show_some()
+ {
+ _min="$1"
+ _max="$2"
- [ -f "${FAKE_IP_STATE}/rules" ] || return
+ [ -f "${FAKE_IP_STATE}/rules" ] || return
- while read _pre _table _selectors ; do
- # Only print those in range
- [ $_min -le $_pre -a $_pre -le $_max ] || continue
+ while read _pre _table _selectors; do
+ # Only print those in range
+ [ $_min -le $_pre -a $_pre -le $_max ] || continue
- ip_rule_show_1 $_pre "$_table" "$_selectors"
- done <"${FAKE_IP_STATE}/rules"
- }
+ ip_rule_show_1 $_pre "$_table" "$_selectors"
+ done <"${FAKE_IP_STATE}/rules"
+ }
- ip_rule_show_1 0 "local" "from all"
+ ip_rule_show_1 0 "local" "from all"
- ip_rule_show_some 1 32765
+ ip_rule_show_some 1 32765
- ip_rule_show_1 32766 "main" "from all"
- ip_rule_show_1 32767 "default" "from all"
+ ip_rule_show_1 32766 "main" "from all"
+ ip_rule_show_1 32767 "default" "from all"
- ip_rule_show_some 32768 2147483648
+ ip_rule_show_some 32768 2147483648
}
-ip_rule_common ()
+ip_rule_common()
{
- _from=""
- _pre=""
- _table=""
- while [ -n "$1" ] ; do
- case "$1" in
- from) _from="$2" ; shift 2 ;;
- pref) _pre="$2" ; shift 2 ;;
- table) _table="$2" ; shift 2 ;;
- *) not_implemented "$1 in \"$orig_args\"" ;;
- esac
- done
+ _from=""
+ _pre=""
+ _table=""
+ while [ -n "$1" ]; do
+ case "$1" in
+ from)
+ _from="$2"
+ shift 2
+ ;;
+ pref)
+ _pre="$2"
+ shift 2
+ ;;
+ table)
+ _table="$2"
+ shift 2
+ ;;
+ *) not_implemented "$1 in \"$orig_args\"" ;;
+ esac
+ done
- [ -n "$_pre" ] || not_implemented "ip rule without \"pref\""
- ip_check_table "rule"
- # Relax this if more selectors added later...
- [ -n "$_from" ] || not_implemented "ip rule without \"from\""
+ [ -n "$_pre" ] || not_implemented "ip rule without \"pref\""
+ ip_check_table "rule"
+ # Relax this if more selectors added later...
+ [ -n "$_from" ] || not_implemented "ip rule without \"from\""
}
-ip_rule_add ()
+ip_rule_add()
{
- ip_rule_common "$@"
-
- _f="${FAKE_IP_STATE}/rules"
- touch "$_f"
- (
- flock 0
- # Filter order must be consistent with the comparison in ip_rule_del()
- echo "$_pre $_table${_from:+ from }$_from" >>"$_f"
- ) <"$_f"
+ ip_rule_common "$@"
+
+ _f="${FAKE_IP_STATE}/rules"
+ touch "$_f"
+ (
+ flock 0
+ # Filter order must be consistent with the comparison in ip_rule_del()
+ echo "$_pre $_table${_from:+ from }$_from" >>"$_f"
+ ) <"$_f"
}
-ip_rule_del ()
+ip_rule_del()
{
- ip_rule_common "$@"
-
- _f="${FAKE_IP_STATE}/rules"
- touch "$_f"
- (
- flock 0
- _tmp="${_f}.new"
- : >"$_tmp"
- _found=false
- while read _p _t _s ; do
- if ! $_found && \
- [ "$_p" = "$_pre" -a "$_t" = "$_table" -a \
- "$_s" = "${_from:+from }$_from" ] ; then
- # Found. Skip this one but not future ones.
- _found=true
- else
- echo "$_p $_t $_s" >>"$_tmp"
- fi
- done
- if cmp -s "$_tmp" "$_f" ; then
- # No changes, must not have found what we wanted to delete
- echo "RTNETLINK answers: No such file or directory" >&2
- rm -f "$_tmp"
- exit 2
- else
- mv "$_tmp" "$_f"
- fi
- ) <"$_f" || exit $?
+ ip_rule_common "$@"
+
+ _f="${FAKE_IP_STATE}/rules"
+ touch "$_f"
+ (
+ flock 0
+ _tmp="${_f}.new"
+ : >"$_tmp"
+ _found=false
+ while read _p _t _s; do
+ if ! $_found &&
+ [ "$_p" = "$_pre" -a "$_t" = "$_table" -a \
+ "$_s" = "${_from:+from }$_from" ]; then
+ # Found. Skip this one but not future ones.
+ _found=true
+ else
+ echo "$_p $_t $_s" >>"$_tmp"
+ fi
+ done
+ if cmp -s "$_tmp" "$_f"; then
+ # No changes, must not have found what we wanted to delete
+ echo "RTNETLINK answers: No such file or directory" >&2
+ rm -f "$_tmp"
+ exit 2
+ else
+ mv "$_tmp" "$_f"
+ fi
+ ) <"$_f" || exit $?
}
######################################################################
-ip_route ()
+ip_route()
{
- case "$1" in
- show|list) shift ; ip_route_show "$@" ;;
- flush) shift ; ip_route_flush "$@" ;;
- add) shift ; ip_route_add "$@" ;;
- del*) shift ; ip_route_del "$@" ;;
+ case "$1" in
+ show | list)
+ shift
+ ip_route_show "$@"
+ ;;
+ flush)
+ shift
+ ip_route_flush "$@"
+ ;;
+ add)
+ shift
+ ip_route_add "$@"
+ ;;
+ del*)
+ shift
+ ip_route_del "$@"
+ ;;
*) not_implemented "$1 in \"ip route\"" ;;
- esac
+ esac
}
-ip_route_common ()
+ip_route_common()
{
- if [ "$1" = table ] ; then
- _table="$2"
- shift 2
- fi
+ if [ "$1" = table ]; then
+ _table="$2"
+ shift 2
+ fi
- ip_check_table "route"
+ ip_check_table "route"
}
# Routes are in a file per table in the directory
@@ -540,128 +616,164 @@ ip_route_common ()
# that is passed and don't do any lookup. This could be "improved" if
# necessary.
-ip_route_show ()
+ip_route_show()
{
- ip_route_common "$@"
+ ip_route_common "$@"
- # Missing file is just an empty table
- sort "$FAKE_IP_STATE/routes/${_table}" 2>/dev/null || true
+ # Missing file is just an empty table
+ sort "$FAKE_IP_STATE/routes/${_table}" 2>/dev/null || true
}
-ip_route_flush ()
+ip_route_flush()
{
- ip_route_common "$@"
+ ip_route_common "$@"
- rm -f "$FAKE_IP_STATE/routes/${_table}"
+ rm -f "$FAKE_IP_STATE/routes/${_table}"
}
-ip_route_add ()
+ip_route_add()
{
- _prefix=""
- _dev=""
- _gw=""
- _table=""
- _metric=""
-
- while [ -n "$1" ] ; do
- case "$1" in
- *.*.*.*/*|*.*.*.*) _prefix="$1" ; shift 1 ;;
- local) _prefix="$2" ; shift 2 ;;
- dev) _dev="$2" ; shift 2 ;;
- via) _gw="$2" ; shift 2 ;;
- table) _table="$2" ; shift 2 ;;
- metric) _metric="$2" ; shift 2 ;;
- *) not_implemented "$1 in \"$orig_args\"" ;;
- esac
- done
+ _prefix=""
+ _dev=""
+ _gw=""
+ _table=""
+ _metric=""
+
+ while [ -n "$1" ]; do
+ case "$1" in
+ *.*.*.*/* | *.*.*.*)
+ _prefix="$1"
+ shift 1
+ ;;
+ local)
+ _prefix="$2"
+ shift 2
+ ;;
+ dev)
+ _dev="$2"
+ shift 2
+ ;;
+ via)
+ _gw="$2"
+ shift 2
+ ;;
+ table)
+ _table="$2"
+ shift 2
+ ;;
+ metric)
+ _metric="$2"
+ shift 2
+ ;;
+ *) not_implemented "$1 in \"$orig_args\"" ;;
+ esac
+ done
- ip_check_table "route"
- [ -n "$_prefix" ] || not_implemented "ip route without inet prefix in \"$orig_args\""
- # This can't be easily deduced, so print some garbage.
- [ -n "$_dev" ] || _dev="ethXXX"
+ ip_check_table "route"
+ [ -n "$_prefix" ] || not_implemented "ip route without inet prefix in \"$orig_args\""
+ # This can't be easily deduced, so print some garbage.
+ [ -n "$_dev" ] || _dev="ethXXX"
- # Alias or add missing bits
- case "$_prefix" in
+ # Alias or add missing bits
+ case "$_prefix" in
0.0.0.0/0) _prefix="default" ;;
*/*) : ;;
*) _prefix="${_prefix}/32" ;;
- esac
-
- _f="$FAKE_IP_STATE/routes/${_table}"
- mkdir -p "$FAKE_IP_STATE/routes"
- touch "$_f"
-
- # Check for duplicate
- _prefix_regexp=$(echo "^${_prefix}" | sed -e 's@\.@\\.@g')
- if [ -n "$_metric" ] ; then
- _prefix_regexp="${_prefix_regexp} .*metric ${_metric} "
- fi
- if grep -q "$_prefix_regexp" "$_f" ; then
- echo "RTNETLINK answers: File exists" >&2
- exit 1
- fi
-
- (
- flock 0
-
- _out="${_prefix} "
- [ -z "$_gw" ] || _out="${_out}via ${_gw} "
- [ -z "$_dev" ] || _out="${_out}dev ${_dev} "
- [ -n "$_gw" ] || _out="${_out} scope link "
- [ -z "$_metric" ] || _out="${_out} metric ${_metric} "
- echo "$_out" >>"$_f"
- ) <"$_f"
+ esac
+
+ _f="$FAKE_IP_STATE/routes/${_table}"
+ mkdir -p "$FAKE_IP_STATE/routes"
+ touch "$_f"
+
+ # Check for duplicate
+ _prefix_regexp=$(echo "^${_prefix}" | sed -e 's@\.@\\.@g')
+ if [ -n "$_metric" ]; then
+ _prefix_regexp="${_prefix_regexp} .*metric ${_metric} "
+ fi
+ if grep -q "$_prefix_regexp" "$_f"; then
+ echo "RTNETLINK answers: File exists" >&2
+ exit 1
+ fi
+
+ (
+ flock 0
+
+ _out="${_prefix} "
+ [ -z "$_gw" ] || _out="${_out}via ${_gw} "
+ [ -z "$_dev" ] || _out="${_out}dev ${_dev} "
+ [ -n "$_gw" ] || _out="${_out} scope link "
+ [ -z "$_metric" ] || _out="${_out} metric ${_metric} "
+ echo "$_out" >>"$_f"
+ ) <"$_f"
}
-ip_route_del ()
+ip_route_del()
{
- _prefix=""
- _dev=""
- _gw=""
- _table=""
- _metric=""
-
- while [ -n "$1" ] ; do
- case "$1" in
- *.*.*.*/*|*.*.*.*) _prefix="$1" ; shift 1 ;;
- local) _prefix="$2" ; shift 2 ;;
- dev) _dev="$2" ; shift 2 ;;
- via) _gw="$2" ; shift 2 ;;
- table) _table="$2" ; shift 2 ;;
- metric) _metric="$2" ; shift 2 ;;
- *) not_implemented "$1 in \"$orig_args\"" ;;
- esac
- done
+ _prefix=""
+ _dev=""
+ _gw=""
+ _table=""
+ _metric=""
+
+ while [ -n "$1" ]; do
+ case "$1" in
+ *.*.*.*/* | *.*.*.*)
+ _prefix="$1"
+ shift 1
+ ;;
+ local)
+ _prefix="$2"
+ shift 2
+ ;;
+ dev)
+ _dev="$2"
+ shift 2
+ ;;
+ via)
+ _gw="$2"
+ shift 2
+ ;;
+ table)
+ _table="$2"
+ shift 2
+ ;;
+ metric)
+ _metric="$2"
+ shift 2
+ ;;
+ *) not_implemented "$1 in \"$orig_args\"" ;;
+ esac
+ done
- ip_check_table "route"
- [ -n "$_prefix" ] || not_implemented "ip route without inet prefix in \"$orig_args\""
- # This can't be easily deduced, so print some garbage.
- [ -n "$_dev" ] || _dev="ethXXX"
+ ip_check_table "route"
+ [ -n "$_prefix" ] || not_implemented "ip route without inet prefix in \"$orig_args\""
+ # This can't be easily deduced, so print some garbage.
+ [ -n "$_dev" ] || _dev="ethXXX"
- # Alias or add missing bits
- case "$_prefix" in
+ # Alias or add missing bits
+ case "$_prefix" in
0.0.0.0/0) _prefix="default" ;;
*/*) : ;;
*) _prefix="${_prefix}/32" ;;
- esac
+ esac
- _f="$FAKE_IP_STATE/routes/${_table}"
- mkdir -p "$FAKE_IP_STATE/routes"
- touch "$_f"
+ _f="$FAKE_IP_STATE/routes/${_table}"
+ mkdir -p "$FAKE_IP_STATE/routes"
+ touch "$_f"
- (
- flock 0
+ (
+ flock 0
- # Escape some dots
- [ -z "$_gw" ] || _gw=$(echo "$_gw" | sed -e 's@\.@\\.@g')
- _prefix=$(echo "$_prefix" | sed -e 's@\.@\\.@g' -e 's@/@\\/@')
+ # Escape some dots
+ [ -z "$_gw" ] || _gw=$(echo "$_gw" | sed -e 's@\.@\\.@g')
+ _prefix=$(echo "$_prefix" | sed -e 's@\.@\\.@g' -e 's@/@\\/@')
- _re="^${_prefix}\>.*"
- [ -z "$_gw" ] || _re="${_re}\<via ${_gw}\>.*"
- [ -z "$_dev" ] || _re="${_re}\<dev ${_dev}\>.*"
- [ -z "$_metric" ] || _re="${_re}.*\<metric ${_metric}\>.*"
- sed -i -e "/${_re}/d" "$_f"
- ) <"$_f"
+ _re="^${_prefix}\>.*"
+ [ -z "$_gw" ] || _re="${_re}\<via ${_gw}\>.*"
+ [ -z "$_dev" ] || _re="${_re}\<dev ${_dev}\>.*"
+ [ -z "$_metric" ] || _re="${_re}.*\<metric ${_metric}\>.*"
+ sed -i -e "/${_re}/d" "$_f"
+ ) <"$_f"
}
######################################################################
@@ -669,11 +781,23 @@ ip_route_del ()
orig_args="$*"
case "$1" in
- link) shift ; ip_link "$@" ;;
- addr*) shift ; ip_addr "$@" ;;
- rule) shift ; ip_rule "$@" ;;
- route) shift ; ip_route "$@" ;;
- *) not_implemented "$1" ;;
+link)
+ shift
+ ip_link "$@"
+ ;;
+addr*)
+ shift
+ ip_addr "$@"
+ ;;
+rule)
+ shift
+ ip_rule "$@"
+ ;;
+route)
+ shift
+ ip_route "$@"
+ ;;
+*) not_implemented "$1" ;;
esac
exit 0