I believe the syntax for writing QoS on FreeBSD and OpenBSD provides very good expressive capability [1]. By using tagging [2], one can assign QoS priority to anything that a firewall rule can define.
Having used FreeBSD QoS on dial-up, ISDN, DSL and cable over the years, it is this expressiveness that is one of the reasons I prefer the pf packet filter and thus BSD.
Here's an example for bandwidth limited wan. Interactive ssh sessions get a queue with a minimum bandwidth; scp and sftp bulk transfers go to a separate queue.
queue rootq on em0 bandwidth 100M max 100M
queue ssh parent rootq bandwidth 20M
queue ssh_interactive parent ssh bandwidth 10M min 5M
queue ssh_bulk parent ssh bandwidth 10M
queue std parent rootq bandwidth 20M default
block return out on em0 inet all set queue std
pass out on em0 inet proto tcp from any to any port 22 set queue(ssh_bulk, ssh_interactive)
OpenBSD doesn't support any form of Active Queue Management or fair queuing. It used to support an old and mostly useless AQM (RED) but dropped support in 5.6. Now there isn't even a way to apply ECN marking.
A hierarchy of dumb FIFO queues does not make a real QoS system. It can produce reasonable-looking benchmark numbers when the prioritization rules and benchmark are contrived to match, but in the face of real-world traffic that uses HTTP to carry vastly different kinds of traffic over links that don't have constant bandwidth and latency, OpenBSD is hopeless. Even the rate-limiting capability that OpenBSD has is rudimentary and lacks the ability to account for per-packet overhead and framing overhead, which is necessary for accurate traffic shaping on common service types like ADSL.
If you say you don't see any disadvantages for OpenBSD on QoS, then your idea of QoS is twenty years out of date.
Yes, they've got ECN capability, if you're satisfied with RED as your AQM. pfSense apparently also has an implementation of plain CoDel. Work is also underway to bring fair queuing to the BSD world so that networks with more than one simultaneous traffic flow can get some good QoS: http://caia.swin.edu.au/freebsd/aqm/
All of the BSDs are still way behind; the best by only a few years, while others are stuck in the 1990s.
CoDel doesn't do fair queuing so its performance on a mixed stream of traffic is much worse than fq_codel and other AQMs that have a fair queuing component. Please, read some of the literature on what's been developed in recent years. You don't seem to know anything about this subject other than having seen some of these terms show up in pfSense configuration pages and thinking it means it's at parity with Linux.
I doubt it would help to point you to anything specific, since you've managed to not find for yourself any of the wealth of relevant information that's been written over the past several years, from draft RFCs to LWN articles and Wikipedia articles to blog and mailing list discussions by internet luminaries and even some of their comments in recent HN discussions. At some point you have to actually put in the minimal effort of googling a topic and skimming at least one of the results, instead of assuming that the people around you are making stupid and obvious mistakes.
What's the actual queuing algorithm in use? My experience with BSD QoS has been that it's easy to set up, but far inferior to the more modern QoS options in Linux (fq_codel, etc).
I just wish tc had an interface understandable by your average sysadmin. I have to dig into the source to figure out what anything does, but not many users will have the ability/desire to do that.
I believe the syntax for writing QoS on FreeBSD and OpenBSD provides very good expressive capability [1]. By using tagging [2], one can assign QoS priority to anything that a firewall rule can define.
Having used FreeBSD QoS on dial-up, ISDN, DSL and cable over the years, it is this expressiveness that is one of the reasons I prefer the pf packet filter and thus BSD.
Here's an example for bandwidth limited wan. Interactive ssh sessions get a queue with a minimum bandwidth; scp and sftp bulk transfers go to a separate queue.
[1] PF - Packet Queueing and Prioritization http://www.openbsd.org/faq/pf/queueing.html[2] PF - Packet Tagging (Policy Filtering) http://www.openbsd.org/faq/pf/tagging.html