Bug 298108 - dummynet: support link rates above UINT32_MAX bit/s
Summary: dummynet: support link rates above UINT32_MAX bit/s
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: kern (show other bugs)
Version: 16.0-CURRENT
Hardware: Any Any
: --- Affects Some People
Assignee: freebsd-net (Nobody)
URL: https://lists.freebsd.org/archives/fr...
Keywords:
Depends on:
Blocks:
 
Reported: 2026-09-02 00:45 UTC by Samuel Oluwasakin
Modified: 2026-09-02 01:16 UTC (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Samuel Oluwasakin 2026-09-02 00:45:53 UTC
Overview
========

Dummynet cannot directly configure link bandwidths above UINT32_MAX
bits/s (4,294,967,295 bit/s).

This prevents dummynet from shaping currently available multi-gigabit
links at their full rates. My immediate use case is applying an FQ_CODEL
limiter to an 8 Gbit/s residential Internet connection.

Steps to Reproduce
==================

On an unmodified FreeBSD main userland:

    # dnctl pipe 1 config bw 8Gbit/s
    dnctl: bandwidth too large

Actual result
=============

The command rejects bandwidth values above UINT32_MAX.

Expected result
===============

Dummynet should be able to configure and report link rates above
UINT32_MAX, including an 8 Gbit/s rate, while retaining compatibility
with existing userland and kernel interfaces where practical.

Technical details
=================

In the current source:

* sbin/ipfw/dummynet.c:read_bandwidth() returns the parsed bandwidth
  through a uint32_t and rejects values greater than UINT_MAX.
* sys/netinet/ip_dummynet.h defines struct dn_link.bandwidth as
  uint32_t.
* The kernel scheduler state embeds struct dn_link, so the 32-bit
  representation is also carried into the kernel implementation.

PR 194453 fixed the earlier signed 2 Gbit/s limit by changing the field
to uint32_t, but this retained the current 4.29 Gbit/s ceiling:

bug #194453

Design discussion
=================

I started an RFC on freebsd-ipfw covering compatibility and ABI options,
including a possible DN_LINK64 object, normalization into private 64-bit
kernel state, API-version negotiation, and legacy GET behaviour:

https://lists.freebsd.org/archives/freebsd-ipfw/2026-September/000623.html

The precise ABI approach is intentionally left open pending feedback
from the IPFW/dummynet maintainers.

Work in progress
================

I have drafted an experimental implementation and ATF tests for
UINT32_MAX, UINT32_MAX+1, 10 Gbit/s, and 100 Gbit/s, including
FQ_CODEL. The implementation has not yet completed FreeBSD-CURRENT
build and ATF validation, so I am not attaching it as a proposed patch
yet.

The implementation and tests will be submitted for formal review after
the ABI direction has been discussed and they have been validated on
FreeBSD-CURRENT.