diff options
| author | 2017-07-19 12:51:30 +0000 | |
|---|---|---|
| committer | 2017-07-19 12:51:30 +0000 | |
| commit | b28abc6437903ba6bd4637f4ad2b9c044f61015a (patch) | |
| tree | 53865dd90e290de4b1b0ebcec186aa99feb058ca /sys/net/pf_ioctl.c | |
| parent | more depends gc / yacc rules overhaul (diff) | |
| download | wireguard-openbsd-b28abc6437903ba6bd4637f4ad2b9c044f61015a.tar.xz wireguard-openbsd-b28abc6437903ba6bd4637f4ad2b9c044f61015a.zip | |
Rework HFSC vs FQ-CoDel checks
The selection mechanism introduced in pf_ioctl.c -r1.316 suffers
from being too ambiguous and lacks robustness. Instead of relying
on composition of multiple flags in the queue specification, it's
easier to identify the root class (if it exists) and derive all
further checks from it.
Diffstat (limited to 'sys/net/pf_ioctl.c')
| -rw-r--r-- | sys/net/pf_ioctl.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/sys/net/pf_ioctl.c b/sys/net/pf_ioctl.c index 7c9df05a53b..4661c897487 100644 --- a/sys/net/pf_ioctl.c +++ b/sys/net/pf_ioctl.c @@ -1,4 +1,4 @@ -/* $OpenBSD: pf_ioctl.c,v 1.318 2017/07/05 11:40:17 bluhm Exp $ */ +/* $OpenBSD: pf_ioctl.c,v 1.319 2017/07/19 12:51:30 mikeb Exp $ */ /* * Copyright (c) 2001 Daniel Hartmeier @@ -606,12 +606,12 @@ pf_create_queues(void) qif = malloc(sizeof(*qif), M_TEMP, M_WAITOK); qif->ifp = ifp; - if ((q->flags & PFQS_FLOWQUEUE) && !(q->flags & PFQS_DEFAULT)) { - qif->ifqops = ifq_fqcodel_ops; - qif->pfqops = pfq_fqcodel_ops; - } else { + if (q->flags & PFQS_ROOTCLASS) { qif->ifqops = ifq_hfsc_ops; qif->pfqops = pfq_hfsc_ops; + } else { + qif->ifqops = ifq_fqcodel_ops; + qif->pfqops = pfq_fqcodel_ops; } qif->disc = qif->pfqops->pfq_alloc(ifp); @@ -1104,8 +1104,9 @@ pfioctl(dev_t dev, u_long cmd, caddr_t addr, int flags, struct proc *p) break; } bcopy(qs, &pq->queue, sizeof(pq->queue)); + /* It's a root flow queue but is not an HFSC root class */ if ((qs->flags & PFQS_FLOWQUEUE) && qs->parent_qid == 0 && - !(qs->flags & PFQS_DEFAULT)) + !(qs->flags & PFQS_ROOTCLASS)) error = pfq_fqcodel_ops->pfq_qstats(qs, pq->buf, &nbytes); else |
