Hello, I have an OpenBSD 6.2 router, set up in a test rig so there's no traffic apart from my tests. It has vmx interfaces. $int_if is a vlan on one of them.
I have an issue where if a child queue has a different “max” from a parent queue, the bandwidth is throttled down to much less than either. I have the following simple queue tree (eventually it will be bigger, this is just for testing): queue inbound on $int_if bandwidth 100M queue inbound_all parent inbound bandwidth 30M max 30M queue inbound_std parent inbound_all bandwidth 20M max 30M default pass on $int_if This works, and an iperf test shunting data through the router from ext->int gets around 30Mb as expected. If I change the inbound_all queue's max to a slightly higher number, this shouldn’t have any effect at all - after all, the inbound_std queue is still "bandwidth 20M max 30M", and neither of these numbers exceed the parent: queue inbound on $int_if bandwidth 100M queue inbound_all parent inbound bandwidth 30M max 40M ^^^^^^^ queue inbound_std parent inbound_all bandwidth 20M max 30M default pass on $int_if However, when I do this, suddenly connections assigned to inbound_std only get around 2.3Mb. ``systat q’’ shows all packets are going into the correct queue. As an experiment, I put a “min” level on inbound_std: queue inbound_std parent inbound_all bandwidth 20M min 10M max 30M default Then connections get that minimum bandwidth (here, iperf reported around 10Mb), so it shows the queue *can* use more than 2.3Mb, but it still sticks to the min rather than using all available bandwidth. This seems like a bug to me, although I’m hesitant to suggest it since I have a lot of respect for the OpenBSD team. Does anyone have a suggestion as to what’s happening? Thanks, Oliver.