xref: /linux/tools/testing/selftests/net/forwarding/ip6gre_lib.sh (revision 79790b6818e96c58fe2bffee1b418c16e64e7b80)
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