Skip to content

Commit 59fb9b6

Browse files
yosh1k104borkmann
authored andcommitted
flow_dissector: Fix to use new variables for port ranges in bpf hook
This patch applies new flag (FLOW_DISSECTOR_KEY_PORTS_RANGE) and field (tp_range) to BPF flow dissector to generate appropriate flow keys when classified by specified port ranges. Fixes: 8ffb055 ("cls_flower: Fix the behavior using port ranges with hw-offload") Signed-off-by: Yoshiki Komachi <[email protected]> Signed-off-by: Daniel Borkmann <[email protected]> Acked-by: Petar Penkov <[email protected]> Acked-by: John Fastabend <[email protected]> Link: https://lore.kernel.org/bpf/[email protected]
1 parent b23bfa5 commit 59fb9b6

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

net/core/flow_dissector.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -834,10 +834,10 @@ static void __skb_flow_bpf_to_target(const struct bpf_flow_keys *flow_keys,
834834
struct flow_dissector *flow_dissector,
835835
void *target_container)
836836
{
837+
struct flow_dissector_key_ports *key_ports = NULL;
837838
struct flow_dissector_key_control *key_control;
838839
struct flow_dissector_key_basic *key_basic;
839840
struct flow_dissector_key_addrs *key_addrs;
840-
struct flow_dissector_key_ports *key_ports;
841841
struct flow_dissector_key_tags *key_tags;
842842

843843
key_control = skb_flow_dissector_target(flow_dissector,
@@ -876,10 +876,17 @@ static void __skb_flow_bpf_to_target(const struct bpf_flow_keys *flow_keys,
876876
key_control->addr_type = FLOW_DISSECTOR_KEY_IPV6_ADDRS;
877877
}
878878

879-
if (dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_PORTS)) {
879+
if (dissector_uses_key(flow_dissector, FLOW_DISSECTOR_KEY_PORTS))
880880
key_ports = skb_flow_dissector_target(flow_dissector,
881881
FLOW_DISSECTOR_KEY_PORTS,
882882
target_container);
883+
else if (dissector_uses_key(flow_dissector,
884+
FLOW_DISSECTOR_KEY_PORTS_RANGE))
885+
key_ports = skb_flow_dissector_target(flow_dissector,
886+
FLOW_DISSECTOR_KEY_PORTS_RANGE,
887+
target_container);
888+
889+
if (key_ports) {
883890
key_ports->src = flow_keys->sport;
884891
key_ports->dst = flow_keys->dport;
885892
}

0 commit comments

Comments
 (0)