qosify: add support for keeping stats
[project/qosify.git] / qosify-bpf.c
index d508e39169f7618353473e0ddc7a0f2de63b24b8..5d5cf52dc7b5bd4cbeee396502c8ee336aa1a642 100644 (file)
@@ -373,7 +373,8 @@ parse_ipv6(struct qosify_config *config, struct skb_parser_info *info,
 }
 
 static __always_inline int
-dscp_lookup_class(uint8_t *dscp, bool ingress, struct qosify_class **out_class)
+dscp_lookup_class(uint8_t *dscp, bool ingress, struct qosify_class **out_class,
+                 bool counter)
 {
        struct qosify_class *class;
        __u8 fallback_flag;
@@ -391,6 +392,8 @@ dscp_lookup_class(uint8_t *dscp, bool ingress, struct qosify_class **out_class)
        if (!(class->flags & QOSIFY_CLASS_FLAG_PRESENT))
                return -1;
 
+       if (counter)
+           class->packets++;
        *dscp = dscp_val(&class->val, ingress);
        *dscp |= fallback_flag;
        *out_class = class;
@@ -441,12 +444,12 @@ int classify(struct __sk_buff *skb)
                dscp = ip_val->dscp;
        }
 
-       if (dscp_lookup_class(&dscp, ingress, &class))
+       if (dscp_lookup_class(&dscp, ingress, &class, true))
                return TC_ACT_UNSPEC;
 
        if (class) {
                if (check_flow(&class->config, skb, &dscp) &&
-                   dscp_lookup_class(&dscp, ingress, &class))
+                   dscp_lookup_class(&dscp, ingress, &class, false))
                        return TC_ACT_UNSPEC;
        }