polardbxengine/storage/ndb/test/crund/scripts/pdelay_mac.sh

77 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2.0,
# as published by the Free Software Foundation.
#
# This program is also distributed with certain software (including
# but not limited to OpenSSL) that is licensed under separate terms,
# as designated in a particular file or component or in included license
# documentation. The authors of MySQL hereby grant you an additional
# permission to link the program and your derivative works with the
# separately licensed software that they have included with MySQL.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License, version 2.0, for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
# simulate network latency on Mac OS X, see man ipfw(8)
#set -x
if [ $# -lt 1 ] ; then
echo "usage: `basename $0` <delay-ms> [<port> ...]"
echo " delay < 0 deletes the delay rule set"
echo " = 0 disables the delay rule set"
echo " > 0 enables the delay rule set"
echo " port... adds the ports to the delay rule set"
exit 1
fi
delay=$1
shift
ports=$*
#echo "simulate a delay of ($delay + $delay) ms on ports $ports"
echo "simulate a delay of $delay ms on destination ports $ports"
pipe=4711 # 1..64k
rset=21 # 0..30
if [ $delay -lt 0 ] ; then
echo "removing rules (as admin)..."
sudo ipfw delete set $rset
sudo ipfw pipe delete $pipe > /dev/null 2>&1
elif [ $delay -eq 0 ] ; then
echo "disabling rules (as admin)..."
sudo ipfw set disable $rset
else
echo "adding rules (as admin)..."
# not strictly necessary but better change atomically
sudo ipfw set disable $rset
sudo ipfw pipe $pipe config delay $delay
sudo ipfw set enable $rset
# rules not visible if set disabled
for p in $ports ; do
sudo ipfw list $p > /dev/null
if [ $? -ne 0 ] ; then
# not strictly necessary but better change atomically
sudo ipfw set disable $rset
# sudo ipfw add $p set $rset pipe $pipe src-port $p > /dev/null 2>&1
sudo ipfw add $p set $rset pipe $pipe dst-port $p > /dev/null 2>&1
sudo ipfw set enable $rset
fi
done
fi
echo "current rules:"
sudo ipfw list | grep $pipe
#sudo ipfw show
echo "done."
#set +x