mirror of https://framagit.org/bortzmeyer/echoping
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
58 lines
1.5 KiB
Bash
58 lines
1.5 KiB
Bash
#!/bin/sh
|
|
|
|
# Dangerous. Use only if you know what you do.
|
|
|
|
# Linux-only
|
|
|
|
# Configure the Linux traffic control to lose packets, in order to test
|
|
# echoping.
|
|
|
|
# http://linux-net.osdl.org/index.php/Netem
|
|
|
|
DEVICE="tap0"
|
|
PROTOCOL="udp"
|
|
DEST_PORTS="7 53"
|
|
# In percent
|
|
LOSS=20
|
|
# In milli-seconds
|
|
DELAY=40
|
|
CLEAN_FIRST="YES"
|
|
USE_IPTABLES="YES"
|
|
|
|
# Do not touch afterwards
|
|
INTERESTING="4"
|
|
PLAIN="0"
|
|
|
|
if [ ! -z "$CLEAN_FIRST" ]; then
|
|
tc qdisc del dev ${DEVICE} root
|
|
iptables -t mangle -F INPUT
|
|
iptables -t mangle -F OUTPUT
|
|
fi
|
|
|
|
tc qdisc add dev ${DEVICE} root handle 1: prio
|
|
|
|
tc qdisc add dev ${DEVICE} parent 1:2 handle ${INTERESTING}: \
|
|
netem delay ${DELAY}ms loss ${LOSS}%
|
|
|
|
#tc qdisc add dev ${DEVICE} parent ${INTERESTING}:1 \
|
|
# tbf rate 20kbit buffer 1600 limit 3000
|
|
|
|
if [ -z "$USE_IPTABLES" ] || [ "$USE_IPTABLES" = "NO" ]; then
|
|
for port in ${DEST_PORTS}; do
|
|
# Note: $PROTOCOL is ignored...
|
|
tc filter add dev ${DEVICE} protocol ip parent 1:0 prio 2 u32 \
|
|
match ip dport ${port} 0xffff flowid 10:5
|
|
done
|
|
else
|
|
tc filter add dev ${DEVICE} protocol ip parent 1:0 prio 2 \
|
|
handle ${INTERESTING} fw flowid 10:5
|
|
# Not perfect: it seems all ports are affected :-(
|
|
for port in ${DEST_PORTS}; do
|
|
# Ingress
|
|
iptables -t mangle -A INPUT -i ${DEVICE} -p ${PROTOCOL} --sport ${port} \
|
|
-j MARK --set-mark ${INTERESTING}
|
|
# Egress
|
|
iptables -t mangle -A OUTPUT -o ${DEVICE} -p ${PROTOCOL} --dport ${port} \
|
|
-j MARK --set-mark ${INTERESTING}
|
|
done
|
|
fi |