broadcast_pmtu.sh 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. #
  4. # Ensures broadcast route MTU is respected
  5. CLIENT_NS=$(mktemp -u client-XXXXXXXX)
  6. CLIENT_IP4="192.168.0.1/24"
  7. CLIENT_BROADCAST_ADDRESS="192.168.0.255"
  8. SERVER_NS=$(mktemp -u server-XXXXXXXX)
  9. SERVER_IP4="192.168.0.2/24"
  10. setup() {
  11. ip netns add "${CLIENT_NS}"
  12. ip netns add "${SERVER_NS}"
  13. ip -net "${SERVER_NS}" link add link1 type veth peer name link0 netns "${CLIENT_NS}"
  14. ip -net "${CLIENT_NS}" link set link0 up
  15. ip -net "${CLIENT_NS}" link set link0 mtu 9000
  16. ip -net "${CLIENT_NS}" addr add "${CLIENT_IP4}" dev link0
  17. ip -net "${SERVER_NS}" link set link1 up
  18. ip -net "${SERVER_NS}" link set link1 mtu 1500
  19. ip -net "${SERVER_NS}" addr add "${SERVER_IP4}" dev link1
  20. read -r -a CLIENT_BROADCAST_ENTRY <<< "$(ip -net "${CLIENT_NS}" route show table local type broadcast)"
  21. ip -net "${CLIENT_NS}" route del "${CLIENT_BROADCAST_ENTRY[@]}"
  22. ip -net "${CLIENT_NS}" route add "${CLIENT_BROADCAST_ENTRY[@]}" mtu 1500
  23. ip net exec "${SERVER_NS}" sysctl -wq net.ipv4.icmp_echo_ignore_broadcasts=0
  24. }
  25. cleanup() {
  26. ip -net "${SERVER_NS}" link del link1
  27. ip netns del "${CLIENT_NS}"
  28. ip netns del "${SERVER_NS}"
  29. }
  30. trap cleanup EXIT
  31. setup &&
  32. echo "Testing for broadcast route MTU" &&
  33. ip net exec "${CLIENT_NS}" ping -f -M want -q -c 1 -s 8000 -w 1 -b "${CLIENT_BROADCAST_ADDRESS}" > /dev/null 2>&1
  34. exit $?