Bridge Interface Calculator
Determine bridge throughput ceiling from port speeds and estimate forwarding table size.
Inputs
e.g. two Gigabit ports and one Fast Ethernet port
Bridge Throughput Ceiling (Mbps)
100
Estimated Forwarding Table Memory (KB)
31.25
Bridge Port Count
3
Step by step
Values used
Bridge Port Speeds (comma-separated Mbps) = 1000, 1000, 100; Active MAC Addresses Seen = 250
Bridge throughput ceiling
bridge_throughput = min(all_port_speeds)
Bridge Throughput Ceiling (Mbps)
= 100
Estimated Forwarding Table Memory (KB)
= 31.25
Bridge Port Count
= 3
How it works
A Linux software bridge (or hardware switch) forwards frames between ports at Layer 2, and the effective throughput between any two ports is capped by whichever of the two is slower — connecting a Gigabit and a Fast Ethernet port through a bridge means traffic between them can never exceed 100 Mbps regardless of the Gigabit port's own capacity. The bridge also maintains a forwarding database (FDB) mapping learned source MAC addresses to the port they were seen on, and this table's memory footprint scales with the number of distinct active MAC addresses the bridge has learned.
Formula
Bridge throughput ceiling
bridge_throughput = min(all_port_speeds)
- S_i
- speed of bridge port i
Frequently Asked Questions
How do I inspect a Linux bridge's forwarding table?
`bridge fdb show` (from iproute2) or the legacy `brctl showmacs <bridge>` lists learned MAC-to-port mappings, including their aging status. `ip -s -d link show <bridge>` shows bridge-level statistics.
Why would two ports of the same nominal speed still bottleneck each other?
Even matched port speeds share the bridge's internal forwarding capacity and, for software bridges, CPU cycles for frame processing — under heavy multi-port load, aggregate throughput across all ports can be limited by CPU rather than any single port's link speed.
How does FDB aging affect memory usage over time?
Entries not refreshed within the aging timeout (default 300 seconds, tunable via `ip link set <bridge> type bridge ageing_time <seconds>`) are removed, so a bridge's actual FDB size fluctuates with how many distinct hosts have communicated through it recently rather than growing unbounded.