The patch adds a new action to support packet truncation.  The new action
is formatted as 'output(port=n,max_len=m)', as output to port n, with
packet size being MIN(original_size, m).

One use case is to enable port mirroring to send smaller packets to the
destination port so that only useful packet information is mirrored/copied,
saving some performance overhead of copying entire packet payload.  Example
use case is below as well as shown in the testcases:

    - Output to port 1 with max_len 100 bytes.
    - The output packet size on port 1 will be MIN(original_packet_size, 100).
    # ovs-ofctl add-flow br0 'actions=output(port=1,max_len=100)'

    - The scope of max_len is limited to output action itself.  The following
      packet size of output:1 and output:2 will be intact.
    # ovs-ofctl add-flow br0 \
            'actions=output(port=1,max_len=100),output:1,output:2'
    - The Datapath actions shows:
    # Datapath actions: trunc(100),1,1,2

Implementation/Limitaions:
    - The patch adds a new OpenFlow extension action OFPACT_OUTPUT_TRUNC, and
      a new datapath action, OVS_ACTION_ATTR_TRUNC. An OFPACT_OUTPUT_TRUNC
      will translate into a datapath truncate action, followed by a datapath
      output action.
    - The OVS_ACTION_ATTR_TRUNC action only marks the packet with a truncate
      size (max_len).  Actual truncation happens when the packet is about to
      be transmitted.
    - Only "output(port=[0-9]*,max_len=<N>)" is supported.  Output to any
      OFPUTIL_NAMED_PORTS or patch port are not supported.
    - Compatibility: If the openvswitch kernel module does not support
      OVS_ACTION_ATTR_TRUNC, it falls back to userspace slow path, do the
      packet truncation and send to the output port.

v5->v6
- Add sample snaplen and sFlow usecase
- Add mirror snaplen usecase

v4->v5
- Disallow truncate and output to a patch port
- Add additional testcases 
- Fix sparse warnings
v4: https://patchwork.ozlabs.org/patch/626486/

v3->v4
- Save the bytes to removed in datapath, instead of max_len
- Fix issues in test cases
- Add truncate support when upcall to userspace
v3: https://patchwork.ozlabs.org/patch/618573/

v2->v3
- Separate the truncate action and output action in datapath.
- Add truncate support for tunnel push and pop.
- Fix clang error.
- Use pskb_trim instead of skb_trim.
- Fallback to userspace truncate action when the
  openvswitch kernel module does not support.
- Disallow truncate port to be any OFPUTIL_NAMED_PORTS.
- Add more testcases.
v2: https://patchwork.ozlabs.org/patch/605082/

William Tu (3):
  ofp-actions: Add truncate action.
  ofproto-dpif-sflow: Add snaplen for sample action and sFlow.
  ofproto-dpif-mirror: Add mirror snaplen support.

 datapath/actions.c                                |  36 ++-
 datapath/datapath.c                               |  25 +-
 datapath/datapath.h                               |   4 +
 datapath/flow_netlink.c                           |   9 +
 datapath/linux/compat/include/linux/openvswitch.h |   8 +
 datapath/vport.c                                  |   1 +
 include/openvswitch/ofp-actions.h                 |  11 +
 lib/dp-packet.c                                   |   1 +
 lib/dp-packet.h                                   |  26 ++
 lib/dpif-netdev.c                                 |  33 +-
 lib/dpif-netlink.c                                |   4 +-
 lib/dpif.c                                        |  23 ++
 lib/dpif.h                                        |   1 +
 lib/netdev-bsd.c                                  |   5 +
 lib/netdev-dpdk.c                                 |   6 +
 lib/netdev-dummy.c                                |   5 +
 lib/netdev-linux.c                                |   5 +
 lib/netdev.c                                      |   8 +-
 lib/odp-execute.c                                 |  11 +
 lib/odp-util.c                                    |  23 ++
 lib/ofp-actions.c                                 | 118 ++++++-
 ofproto/ofproto-dpif-mirror.c                     |   9 +-
 ofproto/ofproto-dpif-mirror.h                     |   4 +-
 ofproto/ofproto-dpif-sflow.c                      |  20 +-
 ofproto/ofproto-dpif-sflow.h                      |   2 +
 ofproto/ofproto-dpif-upcall.c                     |  22 +-
 ofproto/ofproto-dpif-xlate.c                      | 112 ++++++-
 ofproto/ofproto-dpif.c                            |  58 +++-
 ofproto/ofproto-dpif.h                            |   3 +
 ofproto/ofproto.h                                 |   2 +
 tests/odp.at                                      |   3 +
 tests/ofp-actions.at                              |  11 +-
 tests/ofproto-dpif.at                             | 365 ++++++++++++++++++++++
 tests/ovs-ofctl.at                                |  28 +-
 tests/system-traffic.at                           | 213 +++++++++++++
 tests/system-userspace-macros.at                  |   9 +
 vswitchd/bridge.c                                 |   6 +
 vswitchd/vswitch.ovsschema                        |   7 +-
 vswitchd/vswitch.xml                              |   9 +
 39 files changed, 1202 insertions(+), 44 deletions(-)

-- 
2.5.0

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

Reply via email to