ifq: real ifq_start (drain+transmit), dequeue cookie fix, pf_kifq_input hook in the data path; 14/14 suite unchanged

This commit is contained in:
lgcosta committed 2026-11-12 01:15:26 -03:00
1 parent f34c4f92a9
commit 14ff7d1c39
5 files changed
+94 -1

No files matched your search

+16
View File
@@ -204,6 +204,22 @@ pfk_pkt_work(struct work_struct *w)
if (m == m0) {
/*
* Queueing: when a pf `queue' rule attached a scheduler to the
* egress interface, hand the packet to it instead of sending it
* straight out - this is what makes bandwidth limits real.
*/
if (action == PF_PASS && pk->dir == PF_OUT &&
pskb_may_pull(pk->skb, sizeof(struct iphdr)) &&
skb_dst(pk->skb) && !IS_ERR(skb_dst(pk->skb)) &&
pf_kifq_input(skb_dst(pk->skb)->dev ?
pfk_ifp_bydev(skb_dst(pk->skb)->dev) : NULL, m)) {
orig = pk->skb;
pk->skb = NULL; /* the queue owns the packet */
kfree_skb(orig);
kfree(pk);
return;
}
/* same buffer, possibly rewritten in place: our wrapper
* held one extra skb reference — release it */
m_freem(m);