mirror_iproute2/testsuite/tests/tc/mpls.t
Guillaume Nault 02a261b5ba m_mpls: add mac_push action
Add support for the new TCA_MPLS_ACT_MAC_PUSH action (kernel commit
a45294af9e96 ("net/sched: act_mpls: Add action to push MPLS LSE before
Ethernet header")). This action let TC push an MPLS header before the
MAC header of a frame.

Example (encapsulate all outgoing frames with label 20, then add an
outer Ethernet header):
 # tc filter add dev ethX matchall \
       action mpls mac_push label 20 ttl 64 \
       action vlan push_eth dst_mac 0a:00:00:00:00:02 \
                            src_mac 0a:00:00:00:00:01

This patch also adds an alias for ETH_P_TEB, since it is useful when
decapsulating MPLS packets that contain an Ethernet frame.

With MAC_PUSH, there's no previous Ethertype to modify. However, the
"protocol" option is still needed, because the kernel uses it to set
skb->protocol. So rename can_modify_ethtype() to can_set_ethtype().

Also add a test suite for m_mpls, which covers the new action and the
pre-existing ones.

Signed-off-by: Guillaume Nault <gnault@redhat.com>
Signed-off-by: David Ahern <dsahern@gmail.com>
2020-10-20 08:57:08 -06:00

70 lines
1.9 KiB
Bash
Executable File

#!/bin/sh
. lib/generic.sh
DEV="$(rand_dev)"
ts_ip "$0" "Add $DEV dummy interface" link add dev $DEV up type dummy
ts_tc "$0" "Add ingress qdisc" qdisc add dev $DEV ingress
reset_qdisc()
{
ts_tc "$0" "Remove ingress qdisc" qdisc del dev $DEV ingress
ts_tc "$0" "Add ingress qdisc" qdisc add dev $DEV ingress
}
ts_tc "$0" "Add mpls action pop" \
filter add dev $DEV ingress protocol mpls_uc matchall \
action mpls pop protocol ip
ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress
test_on "mpls"
test_on "pop protocol ip pipe"
reset_qdisc
ts_tc "$0" "Add mpls action push" \
filter add dev $DEV ingress protocol ip matchall \
action mpls push protocol mpls_uc label 20 tc 3 bos 1 ttl 64
ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress
test_on "mpls"
test_on "push"
test_on "protocol mpls_uc"
test_on "label 20"
test_on "tc 3"
test_on "bos 1"
test_on "ttl 64"
test_on "pipe"
reset_qdisc
ts_tc "$0" "Add mpls action mac_push" \
filter add dev $DEV ingress matchall \
action mpls mac_push protocol mpls_uc label 20 tc 3 bos 1 ttl 64
ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress
test_on "mpls"
test_on "mac_push"
test_on "protocol mpls_uc"
test_on "label 20"
test_on "tc 3"
test_on "bos 1"
test_on "ttl 64"
test_on "pipe"
reset_qdisc
ts_tc "$0" "Add mpls action modify" \
filter add dev $DEV ingress protocol mpls_uc matchall \
action mpls modify label 20 tc 3 ttl 64
ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress
test_on "mpls"
test_on "modify"
test_on "label 20"
test_on "tc 3"
test_on "ttl 64"
test_on "pipe"
reset_qdisc
ts_tc "$0" "Add mpls action dec_ttl" \
filter add dev $DEV ingress protocol mpls_uc matchall \
action mpls dec_ttl
ts_tc "$0" "Show ingress filters" filter show dev $DEV ingress
test_on "mpls"
test_on "dec_ttl"
test_on "pipe"