flow_dissector: set encapsulation control flags for non-IP
authorAsbjørn Sloth Tønnesen <ast@fiberby.net>
Sat, 13 Jul 2024 02:19:09 +0000 (02:19 +0000)
committerJakub Kicinski <kuba@kernel.org>
Mon, 15 Jul 2024 16:14:39 +0000 (09:14 -0700)
Make sure to set encapsulated control flags also for non-IP
packets, such that it's possible to allow matching on e.g.
TUNNEL_OAM on a geneve packet carrying a non-IP packet.

Suggested-by: Davide Caratti <dcaratti@redhat.com>
Signed-off-by: Asbjørn Sloth Tønnesen <ast@fiberby.net>
Tested-by: Davide Caratti <dcaratti@redhat.com>
Reviewed-by: Davide Caratti <dcaratti@redhat.com>
Link: https://patch.msgid.link/20240713021911.1631517-13-ast@fiberby.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
net/core/flow_dissector.c
net/sched/cls_flower.c

index 1a9ca129fdddeec8b3e7b9724c340a79f341c1f7..ada1e39b557e0d59b20dfa725faa0fa871c0e2c9 100644 (file)
@@ -434,6 +434,10 @@ skb_flow_dissect_tunnel_info(const struct sk_buff *skb,
                        ipv6->dst = key->u.ipv6.dst;
                }
                break;
+       default:
+               skb_flow_dissect_set_enc_control(0, ctrl_flags, flow_dissector,
+                                                target_container);
+               break;
        }
 
        if (dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_ENC_KEYID)) {
index 897d6b683cc6f229a1862ea7d67be44c7cd037b1..38b2df387c1e113a1610f4c00e8f17b93884a91f 100644 (file)
@@ -2199,7 +2199,8 @@ static void fl_init_dissector(struct flow_dissector *dissector,
        FL_KEY_SET_IF_MASKED(mask, keys, cnt,
                             FLOW_DISSECTOR_KEY_ENC_IPV6_ADDRS, enc_ipv6);
        if (FL_KEY_IS_MASKED(mask, enc_ipv4) ||
-           FL_KEY_IS_MASKED(mask, enc_ipv6))
+           FL_KEY_IS_MASKED(mask, enc_ipv6) ||
+           FL_KEY_IS_MASKED(mask, enc_control))
                FL_KEY_SET(keys, cnt, FLOW_DISSECTOR_KEY_ENC_CONTROL,
                           enc_control);
        FL_KEY_SET_IF_MASKED(mask, keys, cnt,