netem.sh 724 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/env bash
  2. #
  3. # Start/Stop network emulation
  4. #
  5. set -e
  6. [[ $(uname) == Linux ]] || exit 0
  7. cd "$(dirname "$0")"
  8. sudo=
  9. if sudo true; then
  10. sudo="sudo -n"
  11. fi
  12. set -x
  13. iface="$(ifconfig | grep mtu | grep -iv loopback | grep -i running | awk 'BEGIN { FS = ":" } ; {print $1}')"
  14. if [[ "$1" = delete ]]; then
  15. $sudo iptables -F -t mangle
  16. else
  17. $sudo iptables -A POSTROUTING -t mangle -p udp -j MARK --set-mark 1
  18. fi
  19. $sudo tc qdisc "$1" dev "$iface" root handle 1: prio
  20. # shellcheck disable=SC2086 # Do not want to quote $2. It has space separated arguments for netem
  21. $sudo tc qdisc "$1" dev "$iface" parent 1:3 handle 30: netem $2
  22. $sudo tc filter "$1" dev "$iface" parent 1:0 protocol ip prio 3 handle 1 fw flowid 1:3