summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFelix Fietkau2021-11-19 16:10:54 +0000
committerFelix Fietkau2021-11-19 16:14:55 +0000
commit88f1db7dd611c4344b97c5c2fdc65e8710638c16 (patch)
tree63b9f503cb85ca5eb5fb8d3b3d51a05e41549bf9
parent46cf3eae2d99052fdbca347293fe7366cdbc576f (diff)
downloadqosify-88f1db7dd611c4344b97c5c2fdc65e8710638c16.tar.gz
bpf: fix priority flow detection
Take number of GSO segments into account Signed-off-by: Felix Fietkau <nbd@nbd.name>
-rw-r--r--qosify-bpf.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/qosify-bpf.c b/qosify-bpf.c
index d59415f..d0772e5 100644
--- a/qosify-bpf.c
+++ b/qosify-bpf.c
@@ -327,11 +327,18 @@ static __always_inline void
check_flow_prio(struct qosify_flow_config *config, struct __sk_buff *skb,
struct flow_bucket *flow, __u8 *out_val)
{
+ int cur_len = skb->len;
+
if (flow->bulk_timeout)
return;
- if (config->prio_max_avg_pkt_len &&
- ewma(&flow->pkt_len_avg, skb->len) <= config->prio_max_avg_pkt_len)
+ if (!config->prio_max_avg_pkt_len)
+ return;
+
+ if (skb->gso_size && skb->gso_segs > 1)
+ cur_len /= skb->gso_segs;
+
+ if (ewma(&flow->pkt_len_avg, cur_len) <= config->prio_max_avg_pkt_len)
*out_val = config->dscp_prio;
}