ip6_gre_headroom.sh 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/bin/bash
  2. # SPDX-License-Identifier: GPL-2.0
  3. #
  4. # Test that enough headroom is reserved for the first packet passing through an
  5. # IPv6 GRE-like netdevice.
  6. setup_prepare()
  7. {
  8. ip link add h1 type veth peer name swp1
  9. ip link add h3 type veth peer name swp3
  10. ip link set dev h1 up
  11. ip address add 192.0.2.1/28 dev h1
  12. ip link add dev vh3 type vrf table 20
  13. ip link set dev h3 master vh3
  14. ip link set dev vh3 up
  15. ip link set dev h3 up
  16. ip link set dev swp3 up
  17. ip address add dev swp3 2001:db8:2::1/64
  18. ip address add dev swp3 2001:db8:2::3/64
  19. ip link set dev swp1 up
  20. tc qdisc add dev swp1 clsact
  21. ip link add name er6 type ip6erspan \
  22. local 2001:db8:2::1 remote 2001:db8:2::2 oseq okey 123
  23. ip link set dev er6 up
  24. ip link add name gt6 type ip6gretap \
  25. local 2001:db8:2::3 remote 2001:db8:2::4
  26. ip link set dev gt6 up
  27. sleep 1
  28. }
  29. cleanup()
  30. {
  31. ip link del dev gt6
  32. ip link del dev er6
  33. ip link del dev swp1
  34. ip link del dev swp3
  35. ip link del dev vh3
  36. }
  37. test_headroom()
  38. {
  39. local type=$1; shift
  40. local tundev=$1; shift
  41. tc filter add dev swp1 ingress pref 1000 matchall skip_hw \
  42. action mirred egress mirror dev $tundev
  43. ping -I h1 192.0.2.2 -c 1 -w 2 &> /dev/null
  44. tc filter del dev swp1 ingress pref 1000
  45. # If it doesn't panic, it passes.
  46. printf "TEST: %-60s [PASS]\n" "$type headroom"
  47. }
  48. trap cleanup EXIT
  49. setup_prepare
  50. test_headroom ip6gretap gt6
  51. test_headroom ip6erspan er6