17df29960SAmit Cohen# SPDX-License-Identifier: GPL-2.0 27df29960SAmit Cohen#!/bin/bash 37df29960SAmit Cohen 47df29960SAmit Cohen# Handles creation and destruction of IP-in-IP or GRE tunnels over the given 54b3d967bSAmit Cohen# topology. Supports both flat and hierarchical models. 67df29960SAmit Cohen# 77df29960SAmit Cohen# Flat Model: 87df29960SAmit Cohen# Overlay and underlay share the same VRF. 97df29960SAmit Cohen# SW1 uses default VRF so tunnel has no bound dev. 107df29960SAmit Cohen# SW2 uses non-default VRF tunnel has a bound dev. 117df29960SAmit Cohen# +--------------------------------+ 127df29960SAmit Cohen# | H1 | 137df29960SAmit Cohen# | $h1 + | 147df29960SAmit Cohen# | 198.51.100.1/24 | | 157df29960SAmit Cohen# | 2001:db8:1::1/64 | | 167df29960SAmit Cohen# +-------------------------|------+ 177df29960SAmit Cohen# | 187df29960SAmit Cohen# +-------------------------|-------------------+ 197df29960SAmit Cohen# | SW1 | | 207df29960SAmit Cohen# | $ol1 + | 217df29960SAmit Cohen# | 198.51.100.2/24 | 227df29960SAmit Cohen# | 2001:db8:1::2/64 | 237df29960SAmit Cohen# | | 247df29960SAmit Cohen# | + g1a (ip6gre) | 257df29960SAmit Cohen# | loc=2001:db8:3::1 | 267df29960SAmit Cohen# | rem=2001:db8:3::2 --. | 277df29960SAmit Cohen# | tos=inherit | | 287df29960SAmit Cohen# | . | 297df29960SAmit Cohen# | .--------------------- | 307df29960SAmit Cohen# | | | 317df29960SAmit Cohen# | v | 327df29960SAmit Cohen# | + $ul1.111 (vlan) | 337df29960SAmit Cohen# | | 2001:db8:10::1/64 | 347df29960SAmit Cohen# | \ | 357df29960SAmit Cohen# | \____________ | 367df29960SAmit Cohen# | | | 377df29960SAmit Cohen# | VRF default + $ul1 | 387df29960SAmit Cohen# +---------------------|-----------------------+ 397df29960SAmit Cohen# | 407df29960SAmit Cohen# +---------------------|-----------------------+ 417df29960SAmit Cohen# | SW2 | | 427df29960SAmit Cohen# | $ul2 + | 437df29960SAmit Cohen# | ___________| | 447df29960SAmit Cohen# | / | 457df29960SAmit Cohen# | / | 467df29960SAmit Cohen# | + $ul2.111 (vlan) | 477df29960SAmit Cohen# | ^ 2001:db8:10::2/64 | 487df29960SAmit Cohen# | | | 497df29960SAmit Cohen# | | | 507df29960SAmit Cohen# | '----------------------. | 517df29960SAmit Cohen# | + g2a (ip6gre) | | 527df29960SAmit Cohen# | loc=2001:db8:3::2 | | 537df29960SAmit Cohen# | rem=2001:db8:3::1 --' | 547df29960SAmit Cohen# | tos=inherit | 557df29960SAmit Cohen# | | 567df29960SAmit Cohen# | + $ol2 | 577df29960SAmit Cohen# | | 203.0.113.2/24 | 587df29960SAmit Cohen# | VRF v$ol2 | 2001:db8:2::2/64 | 597df29960SAmit Cohen# +---------------------|-----------------------+ 607df29960SAmit Cohen# +---------------------|----------+ 617df29960SAmit Cohen# | H2 | | 627df29960SAmit Cohen# | $h2 + | 637df29960SAmit Cohen# | 203.0.113.1/24 | 647df29960SAmit Cohen# | 2001:db8:2::1/64 | 657df29960SAmit Cohen# +--------------------------------+ 664b3d967bSAmit Cohen# 674b3d967bSAmit Cohen# Hierarchical model: 684b3d967bSAmit Cohen# The tunnel is bound to a device in a different VRF 694b3d967bSAmit Cohen# 704b3d967bSAmit Cohen# +--------------------------------+ 714b3d967bSAmit Cohen# | H1 | 724b3d967bSAmit Cohen# | $h1 + | 734b3d967bSAmit Cohen# | 198.51.100.1/24 | | 744b3d967bSAmit Cohen# | 2001:db8:1::1/64 | | 754b3d967bSAmit Cohen# +-------------------------|------+ 764b3d967bSAmit Cohen# | 774b3d967bSAmit Cohen# +-------------------------|-------------------+ 784b3d967bSAmit Cohen# | SW1 | | 794b3d967bSAmit Cohen# | +-----------------------|-----------------+ | 804b3d967bSAmit Cohen# | | $ol1 + | | 814b3d967bSAmit Cohen# | | 198.51.100.2/24 | | 824b3d967bSAmit Cohen# | | 2001:db8:1::2/64 | | 834b3d967bSAmit Cohen# | | | | 844b3d967bSAmit Cohen# | | + g1a (ip6gre) | | 854b3d967bSAmit Cohen# | | loc=2001:db8:3::1 | | 864b3d967bSAmit Cohen# | | rem=2001:db8:3::2 | | 874b3d967bSAmit Cohen# | | tos=inherit | | 884b3d967bSAmit Cohen# | | ^ | | 894b3d967bSAmit Cohen# | | VRF v$ol1 | | | 904b3d967bSAmit Cohen# | +--------------------|--------------------+ | 914b3d967bSAmit Cohen# | | | 924b3d967bSAmit Cohen# | +--------------------|--------------------+ | 934b3d967bSAmit Cohen# | | VRF v$ul1 | | | 944b3d967bSAmit Cohen# | | | | | 954b3d967bSAmit Cohen# | | v | | 964b3d967bSAmit Cohen# | | dummy1 + | | 974b3d967bSAmit Cohen# | | 2001:db8:3::1/64 | | 984b3d967bSAmit Cohen# | | .-----------' | | 994b3d967bSAmit Cohen# | | | | | 1004b3d967bSAmit Cohen# | | v | | 1014b3d967bSAmit Cohen# | | + $ul1.111 (vlan) | | 1024b3d967bSAmit Cohen# | | | 2001:db8:10::1/64 | | 1034b3d967bSAmit Cohen# | | \ | | 1044b3d967bSAmit Cohen# | | \__________ | | 1054b3d967bSAmit Cohen# | | | | | 1064b3d967bSAmit Cohen# | | + $ul1 | | 1074b3d967bSAmit Cohen# | +---------------------|-------------------+ | 1084b3d967bSAmit Cohen# +-----------------------|---------------------+ 1094b3d967bSAmit Cohen# | 1104b3d967bSAmit Cohen# +-----------------------|---------------------+ 1114b3d967bSAmit Cohen# | SW2 | | 1124b3d967bSAmit Cohen# | +---------------------|-------------------+ | 1134b3d967bSAmit Cohen# | | + $ul2 | | 1144b3d967bSAmit Cohen# | | _____| | | 1154b3d967bSAmit Cohen# | | / | | 1164b3d967bSAmit Cohen# | | / | | 1174b3d967bSAmit Cohen# | | | $ul2.111 (vlan) | | 1184b3d967bSAmit Cohen# | | + 2001:db8:10::2/64 | | 1194b3d967bSAmit Cohen# | | ^ | | 1204b3d967bSAmit Cohen# | | | | | 1214b3d967bSAmit Cohen# | | '------. | | 1224b3d967bSAmit Cohen# | | dummy2 + | | 1234b3d967bSAmit Cohen# | | 2001:db8:3::2/64 | | 1244b3d967bSAmit Cohen# | | ^ | | 1254b3d967bSAmit Cohen# | | | | | 1264b3d967bSAmit Cohen# | | | | | 1274b3d967bSAmit Cohen# | | VRF v$ul2 | | | 1284b3d967bSAmit Cohen# | +---------------------|-------------------+ | 1294b3d967bSAmit Cohen# | | | 1304b3d967bSAmit Cohen# | +---------------------|-------------------+ | 1314b3d967bSAmit Cohen# | | VRF v$ol2 | | | 1324b3d967bSAmit Cohen# | | | | | 1334b3d967bSAmit Cohen# | | v | | 1344b3d967bSAmit Cohen# | | g2a (ip6gre) + | | 1354b3d967bSAmit Cohen# | | loc=2001:db8:3::2 | | 1364b3d967bSAmit Cohen# | | rem=2001:db8:3::1 | | 1374b3d967bSAmit Cohen# | | tos=inherit | | 1384b3d967bSAmit Cohen# | | | | 1394b3d967bSAmit Cohen# | | $ol2 + | | 1404b3d967bSAmit Cohen# | | 203.0.113.2/24 | | | 1414b3d967bSAmit Cohen# | | 2001:db8:2::2/64 | | | 1424b3d967bSAmit Cohen# | +---------------------|-------------------+ | 1434b3d967bSAmit Cohen# +-----------------------|---------------------+ 1444b3d967bSAmit Cohen# | 1454b3d967bSAmit Cohen# +-----------------------|--------+ 1464b3d967bSAmit Cohen# | H2 | | 1474b3d967bSAmit Cohen# | $h2 + | 1484b3d967bSAmit Cohen# | 203.0.113.1/24 | 1494b3d967bSAmit Cohen# | 2001:db8:2::1/64 | 1504b3d967bSAmit Cohen# +--------------------------------+ 1517df29960SAmit Cohen 1527df29960SAmit Cohensource lib.sh 1537df29960SAmit Cohensource tc_common.sh 1547df29960SAmit Cohen 1557df29960SAmit Cohenh1_create() 1567df29960SAmit Cohen{ 1577df29960SAmit Cohen simple_if_init $h1 198.51.100.1/24 2001:db8:1::1/64 1587df29960SAmit Cohen ip route add vrf v$h1 203.0.113.0/24 via 198.51.100.2 1597df29960SAmit Cohen ip -6 route add vrf v$h1 2001:db8:2::/64 via 2001:db8:1::2 1607df29960SAmit Cohen} 1617df29960SAmit Cohen 1627df29960SAmit Cohenh1_destroy() 1637df29960SAmit Cohen{ 1647df29960SAmit Cohen ip -6 route del vrf v$h1 2001:db8:2::/64 via 2001:db8:1::2 1657df29960SAmit Cohen ip route del vrf v$h1 203.0.113.0/24 via 198.51.100.2 1667df29960SAmit Cohen simple_if_fini $h1 198.51.100.1/24 2001:db8:1::1/64 1677df29960SAmit Cohen} 1687df29960SAmit Cohen 1697df29960SAmit Cohenh2_create() 1707df29960SAmit Cohen{ 1717df29960SAmit Cohen simple_if_init $h2 203.0.113.1/24 2001:db8:2::1/64 1727df29960SAmit Cohen ip route add vrf v$h2 198.51.100.0/24 via 203.0.113.2 1737df29960SAmit Cohen ip -6 route add vrf v$h2 2001:db8:1::/64 via 2001:db8:2::2 1747df29960SAmit Cohen} 1757df29960SAmit Cohen 1767df29960SAmit Cohenh2_destroy() 1777df29960SAmit Cohen{ 1787df29960SAmit Cohen ip -6 route del vrf v$h2 2001:db8:1::/64 via 2001:db8:2::2 1797df29960SAmit Cohen ip route del vrf v$h2 198.51.100.0/24 via 203.0.113.2 1807df29960SAmit Cohen simple_if_fini $h2 203.0.113.1/24 2001:db8:2::1/64 1817df29960SAmit Cohen} 1827df29960SAmit Cohen 1837df29960SAmit Cohensw1_flat_create() 1847df29960SAmit Cohen{ 1857df29960SAmit Cohen local ol1=$1; shift 1867df29960SAmit Cohen local ul1=$1; shift 1877df29960SAmit Cohen 1887df29960SAmit Cohen ip link set dev $ol1 up 1897df29960SAmit Cohen __addr_add_del $ol1 add 198.51.100.2/24 2001:db8:1::2/64 1907df29960SAmit Cohen 1917df29960SAmit Cohen ip link set dev $ul1 up 1927df29960SAmit Cohen vlan_create $ul1 111 "" 2001:db8:10::1/64 1937df29960SAmit Cohen 1947df29960SAmit Cohen tunnel_create g1a ip6gre 2001:db8:3::1 2001:db8:3::2 tos inherit \ 1957df29960SAmit Cohen ttl inherit "$@" 1967df29960SAmit Cohen ip link set dev g1a up 1977df29960SAmit Cohen __addr_add_del g1a add "2001:db8:3::1/128" 1987df29960SAmit Cohen 1997df29960SAmit Cohen ip -6 route add 2001:db8:3::2/128 via 2001:db8:10::2 2007df29960SAmit Cohen ip route add 203.0.113.0/24 dev g1a 2017df29960SAmit Cohen ip -6 route add 2001:db8:2::/64 dev g1a 2027df29960SAmit Cohen} 2037df29960SAmit Cohen 2047df29960SAmit Cohensw1_flat_destroy() 2057df29960SAmit Cohen{ 2067df29960SAmit Cohen local ol1=$1; shift 2077df29960SAmit Cohen local ul1=$1; shift 2087df29960SAmit Cohen 2097df29960SAmit Cohen ip -6 route del 2001:db8:2::/64 2107df29960SAmit Cohen ip route del 203.0.113.0/24 2117df29960SAmit Cohen ip -6 route del 2001:db8:3::2/128 via 2001:db8:10::2 2127df29960SAmit Cohen 2137df29960SAmit Cohen __simple_if_fini g1a 2001:db8:3::1/128 2147df29960SAmit Cohen tunnel_destroy g1a 2157df29960SAmit Cohen 2167df29960SAmit Cohen vlan_destroy $ul1 111 2177df29960SAmit Cohen __simple_if_fini $ul1 2187df29960SAmit Cohen __simple_if_fini $ol1 198.51.100.2/24 2001:db8:1::2/64 2197df29960SAmit Cohen} 2207df29960SAmit Cohen 2217df29960SAmit Cohensw2_flat_create() 2227df29960SAmit Cohen{ 2237df29960SAmit Cohen local ol2=$1; shift 2247df29960SAmit Cohen local ul2=$1; shift 2257df29960SAmit Cohen 2267df29960SAmit Cohen simple_if_init $ol2 203.0.113.2/24 2001:db8:2::2/64 2277df29960SAmit Cohen __simple_if_init $ul2 v$ol2 2287df29960SAmit Cohen vlan_create $ul2 111 v$ol2 2001:db8:10::2/64 2297df29960SAmit Cohen 2307df29960SAmit Cohen tunnel_create g2a ip6gre 2001:db8:3::2 2001:db8:3::1 tos inherit \ 2317df29960SAmit Cohen ttl inherit dev v$ol2 "$@" 2327df29960SAmit Cohen __simple_if_init g2a v$ol2 2001:db8:3::2/128 2337df29960SAmit Cohen 2347df29960SAmit Cohen # Replace neighbor to avoid 1 dropped packet due to "unresolved neigh" 2357df29960SAmit Cohen ip neigh replace dev $ol2 203.0.113.1 lladdr $(mac_get $h2) 2367df29960SAmit Cohen ip -6 neigh replace dev $ol2 2001:db8:2::1 lladdr $(mac_get $h2) 2377df29960SAmit Cohen 2387df29960SAmit Cohen ip -6 route add vrf v$ol2 2001:db8:3::1/128 via 2001:db8:10::1 2397df29960SAmit Cohen ip route add vrf v$ol2 198.51.100.0/24 dev g2a 2407df29960SAmit Cohen ip -6 route add vrf v$ol2 2001:db8:1::/64 dev g2a 2417df29960SAmit Cohen} 2427df29960SAmit Cohen 2437df29960SAmit Cohensw2_flat_destroy() 2447df29960SAmit Cohen{ 2457df29960SAmit Cohen local ol2=$1; shift 2467df29960SAmit Cohen local ul2=$1; shift 2477df29960SAmit Cohen 2487df29960SAmit Cohen ip -6 route del vrf v$ol2 2001:db8:2::/64 2497df29960SAmit Cohen ip route del vrf v$ol2 198.51.100.0/24 2507df29960SAmit Cohen ip -6 route del vrf v$ol2 2001:db8:3::1/128 via 2001:db8:10::1 2517df29960SAmit Cohen 2527df29960SAmit Cohen __simple_if_fini g2a 2001:db8:3::2/128 2537df29960SAmit Cohen tunnel_destroy g2a 2547df29960SAmit Cohen 2557df29960SAmit Cohen vlan_destroy $ul2 111 2567df29960SAmit Cohen __simple_if_fini $ul2 2577df29960SAmit Cohen simple_if_fini $ol2 203.0.113.2/24 2001:db8:2::2/64 2587df29960SAmit Cohen} 2597df29960SAmit Cohen 2604b3d967bSAmit Cohensw1_hierarchical_create() 2614b3d967bSAmit Cohen{ 2624b3d967bSAmit Cohen local ol1=$1; shift 2634b3d967bSAmit Cohen local ul1=$1; shift 2644b3d967bSAmit Cohen 2654b3d967bSAmit Cohen simple_if_init $ol1 198.51.100.2/24 2001:db8:1::2/64 2664b3d967bSAmit Cohen simple_if_init $ul1 2674b3d967bSAmit Cohen ip link add name dummy1 type dummy 2684b3d967bSAmit Cohen __simple_if_init dummy1 v$ul1 2001:db8:3::1/64 2694b3d967bSAmit Cohen 2704b3d967bSAmit Cohen vlan_create $ul1 111 v$ul1 2001:db8:10::1/64 2714b3d967bSAmit Cohen tunnel_create g1a ip6gre 2001:db8:3::1 2001:db8:3::2 tos inherit \ 2724b3d967bSAmit Cohen ttl inherit dev dummy1 "$@" 2734b3d967bSAmit Cohen ip link set dev g1a master v$ol1 2744b3d967bSAmit Cohen 2754b3d967bSAmit Cohen ip -6 route add vrf v$ul1 2001:db8:3::2/128 via 2001:db8:10::2 2764b3d967bSAmit Cohen ip route add vrf v$ol1 203.0.113.0/24 dev g1a 2774b3d967bSAmit Cohen ip -6 route add vrf v$ol1 2001:db8:2::/64 dev g1a 2784b3d967bSAmit Cohen} 2794b3d967bSAmit Cohen 2804b3d967bSAmit Cohensw1_hierarchical_destroy() 2814b3d967bSAmit Cohen{ 2824b3d967bSAmit Cohen local ol1=$1; shift 2834b3d967bSAmit Cohen local ul1=$1; shift 2844b3d967bSAmit Cohen 2854b3d967bSAmit Cohen ip -6 route del vrf v$ol1 2001:db8:2::/64 2864b3d967bSAmit Cohen ip route del vrf v$ol1 203.0.113.0/24 2874b3d967bSAmit Cohen ip -6 route del vrf v$ul1 2001:db8:3::2/128 2884b3d967bSAmit Cohen 2894b3d967bSAmit Cohen tunnel_destroy g1a 2904b3d967bSAmit Cohen vlan_destroy $ul1 111 2914b3d967bSAmit Cohen 2924b3d967bSAmit Cohen __simple_if_fini dummy1 2001:db8:3::1/64 2934b3d967bSAmit Cohen ip link del dev dummy1 2944b3d967bSAmit Cohen 2954b3d967bSAmit Cohen simple_if_fini $ul1 2964b3d967bSAmit Cohen simple_if_fini $ol1 198.51.100.2/24 2001:db8:1::2/64 2974b3d967bSAmit Cohen} 2984b3d967bSAmit Cohen 2994b3d967bSAmit Cohensw2_hierarchical_create() 3004b3d967bSAmit Cohen{ 3014b3d967bSAmit Cohen local ol2=$1; shift 3024b3d967bSAmit Cohen local ul2=$1; shift 3034b3d967bSAmit Cohen 3044b3d967bSAmit Cohen simple_if_init $ol2 203.0.113.2/24 2001:db8:2::2/64 3054b3d967bSAmit Cohen simple_if_init $ul2 3064b3d967bSAmit Cohen 3074b3d967bSAmit Cohen ip link add name dummy2 type dummy 3084b3d967bSAmit Cohen __simple_if_init dummy2 v$ul2 2001:db8:3::2/64 3094b3d967bSAmit Cohen 3104b3d967bSAmit Cohen vlan_create $ul2 111 v$ul2 2001:db8:10::2/64 3114b3d967bSAmit Cohen tunnel_create g2a ip6gre 2001:db8:3::2 2001:db8:3::1 tos inherit \ 3124b3d967bSAmit Cohen ttl inherit dev dummy2 "$@" 3134b3d967bSAmit Cohen ip link set dev g2a master v$ol2 3144b3d967bSAmit Cohen 3154b3d967bSAmit Cohen # Replace neighbor to avoid 1 dropped packet due to "unresolved neigh" 3164b3d967bSAmit Cohen ip neigh replace dev $ol2 203.0.113.1 lladdr $(mac_get $h2) 3174b3d967bSAmit Cohen ip -6 neigh replace dev $ol2 2001:db8:2::1 lladdr $(mac_get $h2) 3184b3d967bSAmit Cohen 3194b3d967bSAmit Cohen ip -6 route add vrf v$ul2 2001:db8:3::1/128 via 2001:db8:10::1 3204b3d967bSAmit Cohen ip route add vrf v$ol2 198.51.100.0/24 dev g2a 3214b3d967bSAmit Cohen ip -6 route add vrf v$ol2 2001:db8:1::/64 dev g2a 3224b3d967bSAmit Cohen} 3234b3d967bSAmit Cohen 3244b3d967bSAmit Cohensw2_hierarchical_destroy() 3254b3d967bSAmit Cohen{ 3264b3d967bSAmit Cohen local ol2=$1; shift 3274b3d967bSAmit Cohen local ul2=$1; shift 3284b3d967bSAmit Cohen 3294b3d967bSAmit Cohen ip -6 route del vrf v$ol2 2001:db8:2::/64 3304b3d967bSAmit Cohen ip route del vrf v$ol2 198.51.100.0/24 3314b3d967bSAmit Cohen ip -6 route del vrf v$ul2 2001:db8:3::1/128 3324b3d967bSAmit Cohen 3334b3d967bSAmit Cohen tunnel_destroy g2a 3344b3d967bSAmit Cohen vlan_destroy $ul2 111 3354b3d967bSAmit Cohen 3364b3d967bSAmit Cohen __simple_if_fini dummy2 2001:db8:3::2/64 3374b3d967bSAmit Cohen ip link del dev dummy2 3384b3d967bSAmit Cohen 3394b3d967bSAmit Cohen simple_if_fini $ul2 3404b3d967bSAmit Cohen simple_if_fini $ol2 203.0.113.2/24 2001:db8:2::2/64 3414b3d967bSAmit Cohen} 3424b3d967bSAmit Cohen 3437df29960SAmit Cohentest_traffic_ip4ip6() 3447df29960SAmit Cohen{ 3457df29960SAmit Cohen RET=0 3467df29960SAmit Cohen 3477df29960SAmit Cohen h1mac=$(mac_get $h1) 3487df29960SAmit Cohen ol1mac=$(mac_get $ol1) 3497df29960SAmit Cohen 3507df29960SAmit Cohen tc qdisc add dev $ul1 clsact 3517df29960SAmit Cohen tc filter add dev $ul1 egress proto all pref 1 handle 101 \ 3527df29960SAmit Cohen flower $TC_FLAG action pass 3537df29960SAmit Cohen 3547df29960SAmit Cohen tc qdisc add dev $ol2 clsact 3557df29960SAmit Cohen tc filter add dev $ol2 egress protocol ipv4 pref 1 handle 101 \ 3567df29960SAmit Cohen flower $TC_FLAG dst_ip 203.0.113.1 action pass 3577df29960SAmit Cohen 3587df29960SAmit Cohen $MZ $h1 -c 1000 -p 64 -a $h1mac -b $ol1mac -A 198.51.100.1 \ 359*748d2744SIdo Schimmel -B 203.0.113.1 -t ip -q -d $MZ_DELAY 3607df29960SAmit Cohen 3617df29960SAmit Cohen # Check ports after encap and after decap. 3627df29960SAmit Cohen tc_check_at_least_x_packets "dev $ul1 egress" 101 1000 3637df29960SAmit Cohen check_err $? "Packets did not go through $ul1, tc_flag = $TC_FLAG" 3647df29960SAmit Cohen 3657df29960SAmit Cohen tc_check_at_least_x_packets "dev $ol2 egress" 101 1000 3667df29960SAmit Cohen check_err $? "Packets did not go through $ol2, tc_flag = $TC_FLAG" 3677df29960SAmit Cohen 3687df29960SAmit Cohen log_test "$@" 3697df29960SAmit Cohen 3707df29960SAmit Cohen tc filter del dev $ol2 egress protocol ipv4 pref 1 handle 101 flower 3717df29960SAmit Cohen tc qdisc del dev $ol2 clsact 3727df29960SAmit Cohen tc filter del dev $ul1 egress proto all pref 1 handle 101 flower 3737df29960SAmit Cohen tc qdisc del dev $ul1 clsact 3747df29960SAmit Cohen} 3757df29960SAmit Cohen 3767df29960SAmit Cohentest_traffic_ip6ip6() 3777df29960SAmit Cohen{ 3787df29960SAmit Cohen RET=0 3797df29960SAmit Cohen 3807df29960SAmit Cohen h1mac=$(mac_get $h1) 3817df29960SAmit Cohen ol1mac=$(mac_get $ol1) 3827df29960SAmit Cohen 3837df29960SAmit Cohen tc qdisc add dev $ul1 clsact 3847df29960SAmit Cohen tc filter add dev $ul1 egress proto all pref 1 handle 101 \ 3857df29960SAmit Cohen flower $TC_FLAG action pass 3867df29960SAmit Cohen 3877df29960SAmit Cohen tc qdisc add dev $ol2 clsact 3887df29960SAmit Cohen tc filter add dev $ol2 egress protocol ipv6 pref 1 handle 101 \ 3897df29960SAmit Cohen flower $TC_FLAG dst_ip 2001:db8:2::1 action pass 3907df29960SAmit Cohen 3917df29960SAmit Cohen $MZ -6 $h1 -c 1000 -p 64 -a $h1mac -b $ol1mac -A 2001:db8:1::1 \ 392*748d2744SIdo Schimmel -B 2001:db8:2::1 -t ip -q -d $MZ_DELAY 3937df29960SAmit Cohen 3947df29960SAmit Cohen # Check ports after encap and after decap. 3957df29960SAmit Cohen tc_check_at_least_x_packets "dev $ul1 egress" 101 1000 3967df29960SAmit Cohen check_err $? "Packets did not go through $ul1, tc_flag = $TC_FLAG" 3977df29960SAmit Cohen 3987df29960SAmit Cohen tc_check_at_least_x_packets "dev $ol2 egress" 101 1000 3997df29960SAmit Cohen check_err $? "Packets did not go through $ol2, tc_flag = $TC_FLAG" 4007df29960SAmit Cohen 4017df29960SAmit Cohen log_test "$@" 4027df29960SAmit Cohen 4037df29960SAmit Cohen tc filter del dev $ol2 egress protocol ipv6 pref 1 handle 101 flower 4047df29960SAmit Cohen tc qdisc del dev $ol2 clsact 4057df29960SAmit Cohen tc filter del dev $ul1 egress proto all pref 1 handle 101 flower 4067df29960SAmit Cohen tc qdisc del dev $ul1 clsact 4077df29960SAmit Cohen} 4087df29960SAmit Cohen 4097df29960SAmit Cohentopo_mtu_change() 4107df29960SAmit Cohen{ 4117df29960SAmit Cohen local mtu=$1 4127df29960SAmit Cohen 4137df29960SAmit Cohen ip link set mtu $mtu dev $h1 4147df29960SAmit Cohen ip link set mtu $mtu dev $ol1 4157df29960SAmit Cohen ip link set mtu $mtu dev g1a 4167df29960SAmit Cohen ip link set mtu $mtu dev $ul1 4177df29960SAmit Cohen ip link set mtu $mtu dev $ul1.111 4187df29960SAmit Cohen ip link set mtu $mtu dev $h2 4197df29960SAmit Cohen ip link set mtu $mtu dev $ol2 4207df29960SAmit Cohen ip link set mtu $mtu dev g2a 4217df29960SAmit Cohen ip link set mtu $mtu dev $ul2 4227df29960SAmit Cohen ip link set mtu $mtu dev $ul2.111 4237df29960SAmit Cohen} 4247df29960SAmit Cohen 4257df29960SAmit Cohentest_mtu_change() 4267df29960SAmit Cohen{ 4277df29960SAmit Cohen RET=0 4287df29960SAmit Cohen 4297df29960SAmit Cohen ping6_do $h1 2001:db8:2::1 "-s 1800 -w 3" 4307df29960SAmit Cohen check_fail $? "ping GRE IPv6 should not pass with packet size 1800" 4317df29960SAmit Cohen 4327df29960SAmit Cohen RET=0 4337df29960SAmit Cohen 4347df29960SAmit Cohen topo_mtu_change 2000 4357df29960SAmit Cohen ping6_do $h1 2001:db8:2::1 "-s 1800 -w 3" 4367df29960SAmit Cohen check_err $? 4377df29960SAmit Cohen log_test "ping GRE IPv6, packet size 1800 after MTU change" 4387df29960SAmit Cohen} 439