This fixes an issue with using bpf_skb_change_head to redirect packet from l3 to l2 device. See commit messages for details. v3->v4: - Run the tc_redirect test in its own thread to isolate the network and mount namespace modifications to the test thread. Fixes the failing CI check in v3. v2->v3: - Refactor test_tc_redirect_peer_l3 to use BPF for passing packets to both directions instead of relying on forwarding on the way back. - Clean up of tc_redirect test. Setup and tear down namespaces for each test case and avoid a more complex cleanup when tearing down the namespace is enough. v1->v2: - Port the test case to the newly refactored prog_tests/tc_redirect.c.