mirror of
https://git.proxmox.com/git/mirror_iproute2
synced 2025-10-05 07:43:30 +00:00

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>
70 lines
1.9 KiB
Bash
Executable File
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"
|