If VLAN acceleration is used when the kernel receives a packet
then the outer-most VLAN tag will not be present in the packet
when it is received by netdev-linux. Rather, it will be present
in auxdata.

The purpose of this series is to obtain the vlan_tid and if available the
vlan_tpid from auxdata as appropriate and push a VLAN tag onto the packet
accordingly. In order to allow the push to be performed efficiently
netdev_class is updated to provide an ofpbuf * argument to rx_recv().

Key Changes between v4 and v5:
* Updated documentation of rx_recv to text suggested by Ben Pfaff.
* As provided by Ben Pfaff
  - Include local copy of struct tpacket_auxdata and related #defines
    to avoid depending on the kernel headers used for the build.

Key Changes between v3 and v4:
* Add patch to correct truncated documentation of the rx_recv
  field of struct netdev_class.
* On error in rx_recv implementations return a positive error code rather
  than a negative one
* Use TP_STATUS_VLAN_VALID to allow vlan 0 to be read from auxdata
* Use TP_STATUS_VLAN_TPID_VALID allow the VLAN tpid to be read
  from auxdata

Key Changes between v2 and v3:
* On success, update struct ofpbuf size inside netdev_class rx_recv
  implementation and return 0. This moves logic from the caller.
* Document that it is recommended that the struct ofpbuf should provide
  extra tailroom for a VLAN header. This will be used by a subsequent patch.
* Update BSD code
* Limit to reading one VLAN from auxdata

Key Changes between v1 and v2:
* Update netdev_class to provide an ofpbuf * argument to rx_recv()

Simon Horman (3):
  netdev_class: Pass a struct ofpbuf * to rx_recv()
  lib: Add tpid parameter to eth_push_vlan()
  netdev-linux: Read packet auxdata to obtain vlan_tid

 include/sparse/sys/socket.h  |   1 +
 lib/cfm.c                    |   2 +-
 lib/flow.c                   |   2 +-
 lib/netdev-bsd.c             |  28 ++++----
 lib/netdev-dummy.c           |  13 ++--
 lib/netdev-linux.c           | 160 +++++++++++++++++++++++++++++++++++++++----
 lib/netdev-provider.h        |  25 +++++--
 lib/netdev.c                 |   8 +--
 lib/odp-execute.c            |   2 +-
 lib/packets.c                |   4 +-
 lib/packets.h                |   2 +-
 ofproto/bond.c               |   2 +-
 ofproto/ofproto-dpif-xlate.c |   2 +-
 13 files changed, 198 insertions(+), 53 deletions(-)

-- 
1.8.4

_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to