[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH v8 0/9] rocker: add new rocker ethernet switch devic

From: sfeldma
Subject: [Qemu-devel] [PATCH v8 0/9] rocker: add new rocker ethernet switch device
Date: Fri, 13 Mar 2015 21:09:24 -0700

From: Scott Feldman <address@hidden>


 - From Stefan Hajnoczi's net-pull-request v3, merge in these changes:
     - Squash David Ahern's clang struct definition warnings fix
     - Squash in Jiri's fix for rocker format string specifiers [Peter]
     - Squash in Windows build fix [Peter]

 - In addition, fix 2 compile warnings from net-pull-request v4:
     - Fix compile issue for min glibc 2.12
     - w32: fix 64 bit constant without ULL suffix


 - Per Stefan Hajnoczi comments:
     - #ifdef CONFIG_ROCKER wrapper around qmp/hmp to fix compile when PCI is
       disabled or rocker is disabled.


 - Per Stefan Hajnoczi review:
     - Move tests to tests/rocker
     - Fix some mem leaks
     - Fix doc grammer/spelling
 - Per Eric Blake review:
     - Add #optional to optional args comments in qmp interface
     - Add "query-" prefix to qmp cmds
     - Fix doc grammer/spelling


 - Per Jason Wang review:
     - Fix some missing/wrong references in the rocker.txt spec
     - mark rocker as unmigratable.


 - Per Paolo Bonzini review:
     - move reg_guide.txt to docs/specs/rocker.txt
     - fix some spelling/grammer mistakes in the rocker.txt doc
     - fix some misleading/wrong statements in rocker.txt
     - add double 4-byte access for 64-bit registers
     - define new ROCKER_Exxx to replace usage of errno.h return codes
 - Add patch from David Ahern to timestamp debug output


 - Per Stefan Hajnoczi review:
     - move HMP rocker cmds to "info rocker"
     - prefix QMP rocker cmds with query-
     - tag QMP cmds as "Since 2.3"
     - convert structs to typedef with CamelCase naming
 - Remove SDHCI device ID move patch...Paolo Bonzini is addressing
   SDHCI move is separate patch.


 - Address reg_guide.txt review comments from Eric Blake
 - Address QMP review comments from Eric Blake


[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

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.

David Ahern (1):
  rocker: timestamp on the debug logs helps correlate with events in
    the VM

Scott Feldman (8):
  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
  rocker: add tests
  MAINTAINERS: add rocker

 MAINTAINERS                   |    6 +
 default-configs/pci.mak       |    1 +
 docs/specs/pci-ids.txt        |    1 +
 docs/specs/rocker.txt         | 1009 ++++++++++++++++++
 hw/net/Makefile.objs          |    4 +
 hw/net/rocker/rocker.c        | 1480 ++++++++++++++++++++++++++
 hw/net/rocker/rocker.h        |   84 ++
 hw/net/rocker/rocker_desc.c   |  377 +++++++
 hw/net/rocker/rocker_desc.h   |   53 +
 hw/net/rocker/rocker_fp.c     |  234 +++++
 hw/net/rocker/rocker_fp.h     |   51 +
 hw/net/rocker/rocker_hw.h     |  491 +++++++++
 hw/net/rocker/rocker_of_dpa.c | 2315 +++++++++++++++++++++++++++++++++++++++++
 hw/net/rocker/rocker_of_dpa.h |   22 +
 hw/net/rocker/rocker_tlv.h    |  244 +++++
 hw/net/rocker/rocker_world.c  |  106 ++
 hw/net/rocker/rocker_world.h  |   60 ++
 hw/net/virtio-net.c           |   12 +-
 include/hw/pci/pci.h          |    1 +
 include/hw/pci/pci_ids.h      |    1 +
 include/net/net.h             |    1 +
 net/net.c                     |    7 +
 tests/rocker/README           |    5 +
 tests/rocker/all              |   19 +
 tests/rocker/bridge           |   48 +
 tests/rocker/bridge-stp       |   57 +
 tests/rocker/bridge-vlan      |   57 +
 tests/rocker/bridge-vlan-stp  |   69 ++
 tests/rocker/port             |   22 +
 tests/rocker/tut.dot          |    8 +
 30 files changed, 6836 insertions(+), 9 deletions(-)
 create mode 100644 docs/specs/rocker.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 tests/rocker/README
 create mode 100755 tests/rocker/all
 create mode 100755 tests/rocker/bridge
 create mode 100755 tests/rocker/bridge-stp
 create mode 100755 tests/rocker/bridge-vlan
 create mode 100755 tests/rocker/bridge-vlan-stp
 create mode 100755 tests/rocker/port
 create mode 100644 tests/rocker/tut.dot


reply via email to

[Prev in Thread] Current Thread [Next in Thread]