| Server IP : 127.0.1.1 / Your IP : 216.73.216.152 Web Server : Apache/2.4.52 (Ubuntu) System : Linux bahcrestlinepropertiesllc 5.15.0-113-generic #123-Ubuntu SMP Mon Jun 10 08:16:17 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare, MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /lib/modules/5.15.0-161-generic/build/tools/testing/selftests/net/forwarding/ |
Upload File : |
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
# +-----------------------+
# | H1 (v$h1) |
# | 192.0.2.1/24 |
# | 2001:db8::1/124 |
# | + $h1 |
# +-----------------|-----+
# |
# | (Plain Ethernet traffic)
# |
# +-----------------|-----------------------------------------+
# | LER1 + $edge1 |
# | -ingress: |
# | -encapsulate Ethernet into MPLS |
# | -add outer Ethernet header |
# | -redirect to $mpls1 (egress) |
# | |
# | + $mpls1 |
# | | -ingress: |
# | | -remove outer Ethernet header |
# | | -remove MPLS header |
# | | -redirect to $edge1 (egress) |
# +-----------------|-----------------------------------------+
# |
# | (Ethernet over MPLS traffic)
# |
# +-----------------|-----------------------------------------+
# | LER2 + $mpls2 |
# | -ingress: |
# | -remove outer Ethernet header |
# | -remove MPLS header |
# | -redirect to $edge2 (egress) |
# | |
# | + $edge2 |
# | | -ingress: |
# | | -encapsulate Ethernet into MPLS |
# | | -add outer Ethernet header |
# | | -redirect to $mpls2 (egress) |
# +-----------------|-----------------------------------------|
# |
# | (Plain Ethernet traffic)
# |
# +-----------------|-----+
# | H2 (v$h2) | |
# | + $h2 |
# | 192.0.2.2/24 |
# | 2001:db8::2/124 |
# +-----------------------+
#
# LER1 and LER2 logically represent two different routers. However, no VRF is
# created for them, as they don't do any IP routing.
ALL_TESTS="mpls_forward_eth"
NUM_NETIFS=6
source lib.sh
h1_create()
{
simple_if_init $h1 192.0.2.1/24 2001:db8::1/124
}
h1_destroy()
{
simple_if_fini $h1 192.0.2.1/24 2001:db8::1/124
}
h2_create()
{
simple_if_init $h2 192.0.2.2/24 2001:db8::2/124
}
h2_destroy()
{
simple_if_fini $h2 192.0.2.2/24 2001:db8::2/124
}
ler1_create()
{
tc qdisc add dev $edge1 ingress
tc filter add dev $edge1 ingress \
matchall \
action mpls mac_push label 102 \
action vlan push_eth dst_mac $mpls2mac src_mac $mpls1mac \
action mirred egress redirect dev $mpls1
ip link set dev $edge1 up
tc qdisc add dev $mpls1 ingress
tc filter add dev $mpls1 ingress \
protocol mpls_uc \
flower mpls_label 101 \
action vlan pop_eth \
action mpls pop protocol teb \
action mirred egress redirect dev $edge1
ip link set dev $mpls1 up
}
ler1_destroy()
{
ip link set dev $mpls1 down
tc qdisc del dev $mpls1 ingress
ip link set dev $edge1 down
tc qdisc del dev $edge1 ingress
}
ler2_create()
{
tc qdisc add dev $edge2 ingress
tc filter add dev $edge2 ingress \
matchall \
action mpls mac_push label 101 \
action vlan push_eth dst_mac $mpls1mac src_mac $mpls2mac \
action mirred egress redirect dev $mpls2
ip link set dev $edge2 up
tc qdisc add dev $mpls2 ingress
tc filter add dev $mpls2 ingress \
protocol mpls_uc \
flower mpls_label 102 \
action vlan pop_eth \
action mpls pop protocol teb \
action mirred egress redirect dev $edge2
ip link set dev $mpls2 up
}
ler2_destroy()
{
ip link set dev $mpls2 down
tc qdisc del dev $mpls2 ingress
ip link set dev $edge2 down
tc qdisc del dev $edge2 ingress
}
mpls_forward_eth()
{
ping_test $h1 192.0.2.2
ping6_test $h1 2001:db8::2
}
setup_prepare()
{
h1=${NETIFS[p1]}
edge1=${NETIFS[p2]}
mpls1=${NETIFS[p3]}
mpls2=${NETIFS[p4]}
edge2=${NETIFS[p5]}
h2=${NETIFS[p6]}
mpls1mac=$(mac_get $mpls1)
mpls2mac=$(mac_get $mpls2)
vrf_prepare
h1_create
h2_create
ler1_create
ler2_create
}
cleanup()
{
pre_cleanup
ler2_destroy
ler1_destroy
h2_destroy
h1_destroy
vrf_cleanup
}
trap cleanup EXIT
setup_prepare
setup_wait
tests_run
tc_offload_check
if [[ $? -ne 0 ]]; then
log_info "Could not test offloaded functionality"
else
tcflags="skip_sw"
tests_run
fi
exit $EXIT_STATUS