Home

Awesome

An Open Source 10Gb Ethernet Switch

The main goal of this project is to demonstrate a 10Gb Ethernet switch. Packets will arrive in one of four SFP+ interfaces, and from there be routed as appropriately.

For a full discussion of the design, please check out this ZipCPU blog article: An Overview of a 10Gb Ethernet Switch.

Routing algorithm

The current (draft) routing algorithm is as follows:

  1. For each incoming packet, its incoming port and source MAC address will be captured, and then recorded in a table.

    • The table will have timeouts for all entries.
    • If the table is full, the new entry will overwrite the oldest entry
  2. For each outgoing packet, if the destination MAC address matches the source address seen on a previous incoming source MAC address, the packet will be routed to that port.

  3. In all other cases, if the port cannot be determined or if the destination port is to a broadcast address, the packet will be broadcast to all (other) ports.

  4. One address has been reserved and used for a local soft-core CPU.

Other hardware interfaces

Other hardware interfaces are also be present within this design, to include UART, HDMI Tx and Rx, a SATA controller (still under development), micro SD, eMMC, QSPI flash, I2C, temperature sensing and fan control, and much more.

Sponsorship

This project was sponsored by NetIdee.

License

This project is released under the GPLv3 license. This should be sufficient for most individual needs. Should you find this license insufficient to meet your needs, other licenses can be purchased from Gisselquist Technology, LLC.

Status

As of 30 November, 2023:

The next steps for this project include:

To track the project's status at a glance, you can check either the bus blocks testing stoplight chart, or the 10Gb Ethernet testing diagram. Both show the status of the hardware testing of various components within the system, although from different viewpoints. The bus blocks chart shows the status of the various components connected to the backbone Wishbone bus, but doesn't really break down the 10Gb ethernet components. The 10Gb Ethernet blocks diagram, on the other hand, breaks down the status of the 10Gb Ethernet components, but doesn't show the status of the rest of the design. Together, both will provide insight into the current state of the design.

Ideally, the dev branch of this project would have the most recent status. In practice, the master branch has tended to have the most recent updates.