On Sun, Jan 4, 2015 at 1:47 AM, Jason Wang <jasow...@redhat.com> wrote: > > On 12/30/2014 01:14 PM, sfel...@gmail.com wrote: >> From: Scott Feldman <sfel...@gmail.com> >> >> [This is a collaboration between myself and Jiri Pirko]. >> >> This patch set adds a new ethernet switch device, called rocker. Rocker is >> intended to emulate HW features of switch ASICs found in today's >> data-center-class switch/routers. The original motivation in creating a new >> device is to accelerate device driver development for ethernet switches in >> the >> Linux kernel. A device driver for rocker already exists in the Linux 3.18 >> kernel and loads against this device. Basic L2 switching (bridging) >> functionality is offloaded to the device. Work continues to enable >> offloading >> of L3 routing functions and ACLs, as well as support for a flow-based modes, >> such as OpenVSwitch with OpenFlow. Future support for terminating L2-over-L3 >> tunnels is also planned. >> >> The core network processing functions are based on the spec of a real device: >> Broadcom's OF-DPA. Specifically, rocker borrows OF-DPA's network processing >> pipeline comprised of flow match and action tables. Only the OF-DPA spec was >> used in constructing rocker. The rocker developers do not have access to the >> real OF-DPA's software source code, so this is a clean-room, ground-up >> development. >> >> Each rocker device is a PCI device with a memory-mapped register space and >> MSI-X interrupts for command and event processing, as well as CPU-bound I/O. >> Each device can support up to 62 "front-panel" ports, which present >> themselves >> as -netdev attachment points. The device is programmed using OF-DPA flow and >> group tables to setup the flow pipeline. The programming defines the >> forwarding path for packets ingressing on 'front-panel' ports. The >> forwarding >> path can look at L2/L3/L4 packet header to forward the packet to its >> destination. For the performance path, packets would ingress and egress only >> on the device, and not be passed up to the device driver (or host OS). The >> slow path for control packets will forward packets to the CPU via the device >> driver for host OS processing. >> >> A QMP/HMP interface is added to give inside into the device's internal port >> configuration and flow/group tables. >> >> A test directory is included with some basic sanity tests to verify the >> device >> and driver. >> >> Scott Feldman (10): >> pci: move REDHAT_SDHCI device ID to make room for Rocker >> net: add MAC address string printer >> virtio-net: use qemu_mac_strdup_printf >> rocker: add register programming guide >> pci: add rocker device ID >> pci: add network device class 'other' for network switches >> rocker: add new rocker switch device >> qmp: add rocker device support >> rocker: add tests >> MAINTAINERS: add rocker >> >> MAINTAINERS | 6 + >> default-configs/pci.mak | 1 + >> docs/specs/pci-ids.txt | 3 +- >> hmp-commands.hx | 56 + >> hmp.c | 303 +++++ >> hmp.h | 4 + >> hw/net/Makefile.objs | 3 + >> hw/net/rocker/reg_guide.txt | 957 +++++++++++++ >> hw/net/rocker/rocker.c | 1440 ++++++++++++++++++++ >> hw/net/rocker/rocker.h | 76 ++ >> hw/net/rocker/rocker_desc.c | 379 ++++++ >> hw/net/rocker/rocker_desc.h | 57 + >> hw/net/rocker/rocker_fp.c | 243 ++++ >> hw/net/rocker/rocker_fp.h | 54 + >> hw/net/rocker/rocker_hw.h | 475 +++++++ >> hw/net/rocker/rocker_of_dpa.c | 2644 >> ++++++++++++++++++++++++++++++++++++ >> hw/net/rocker/rocker_of_dpa.h | 25 + >> hw/net/rocker/rocker_tlv.h | 247 ++++ >> hw/net/rocker/rocker_world.c | 108 ++ >> hw/net/rocker/rocker_world.h | 63 + >> hw/net/rocker/test/README | 5 + >> hw/net/rocker/test/all | 19 + >> hw/net/rocker/test/bridge | 43 + >> hw/net/rocker/test/bridge-stp | 52 + >> hw/net/rocker/test/bridge-vlan | 52 + >> hw/net/rocker/test/bridge-vlan-stp | 64 + >> hw/net/rocker/test/port | 22 + >> hw/net/rocker/test/tut.dot | 8 + >> hw/net/virtio-net.c | 12 +- >> include/hw/pci/pci.h | 3 +- >> include/hw/pci/pci_ids.h | 1 + >> include/net/net.h | 1 + >> net/net.c | 7 + >> qapi-schema.json | 51 + >> qmp-commands.hx | 24 + >> 35 files changed, 7497 insertions(+), 11 deletions(-) >> create mode 100644 hw/net/rocker/reg_guide.txt >> create mode 100644 hw/net/rocker/rocker.c >> create mode 100644 hw/net/rocker/rocker.h >> create mode 100644 hw/net/rocker/rocker_desc.c >> create mode 100644 hw/net/rocker/rocker_desc.h >> create mode 100644 hw/net/rocker/rocker_fp.c >> create mode 100644 hw/net/rocker/rocker_fp.h >> create mode 100644 hw/net/rocker/rocker_hw.h >> create mode 100644 hw/net/rocker/rocker_of_dpa.c >> create mode 100644 hw/net/rocker/rocker_of_dpa.h >> create mode 100644 hw/net/rocker/rocker_tlv.h >> create mode 100644 hw/net/rocker/rocker_world.c >> create mode 100644 hw/net/rocker/rocker_world.h >> create mode 100644 hw/net/rocker/test/README >> create mode 100755 hw/net/rocker/test/all >> create mode 100755 hw/net/rocker/test/bridge >> create mode 100755 hw/net/rocker/test/bridge-stp >> create mode 100755 hw/net/rocker/test/bridge-vlan >> create mode 100755 hw/net/rocker/test/bridge-vlan-stp >> create mode 100755 hw/net/rocker/test/port >> create mode 100644 hw/net/rocker/test/tut.dot >> > > Hi: > > Did you have a git tree for us to review or play?
I do, it's at https://github.com/scottfeldman/qemu-rocker.git. The Qemu bits are 2.1.12, so it's a little stale, but fine for rocker review purposes.