It took a while, but I finally got this reviewed. Looks good to me,

Acked-by: Mark Michelson <mmich...@redhat.com>

On 3/29/19 1:53 PM, nusid...@redhat.com wrote:
From: Numan Siddique <nusid...@redhat.com>

This is an RFC series to address the MTU issues for OVN reported
here [1].

To address this issue, a new OVS action - check_pkt_larger is added.
A new datapath action is also added - check_pkt_len.


v4 -> v5
------
   * Addressed the review comments for patch 2 - " ovn: Add a new OVN field 
icmp4.frag_mtu"
   * Added a new patch - patch 3 to add a new action - "icmp4_error"
     which is same as icmp4 but it also includes the original IP datagram
     when it injects the ICMPv4 packet.

v3 -> v4
--------
   * In v4, I have separated the datapath patch and it is submitted
     separately here addressing the review comments
         - https://patchwork.ozlabs.org/patch/1046370/

   * This patch series has now 4 patches.

   * Addressed the review comments.

   * Added tests and documentation

   * I have also pushed these patches to my github repo - 
https://github.com/numansiddique/ovs/tree/ovn_mtu_fix/rfc_v4_p5_with_ovs_dp
     This also has patch to support 'check_pkt_len' in the ovs in-kernel 
datapath code
     If some one is interested to try this out without compiling net-next
     tree can use this.


v2 --> v3
---------
In v2, the check_pkt_len implementation in odp-execute.c (in p2) was missing,
which is added in v3.

----------------------------------------

v1 of RFC included patches for datapath and OVS. This v2 series also
includes the corresponding OVN changes.

In v1, check_pkt_len datapath action was implemented as
   - check_pkt_len(pkt_len, condition, userspace action if condition matches)
    Eg.
     check_pkt_len( > 1500 ? userspace(pid=<PID>,slow_path(check_pkt_len))
     If the packet length is greater than 1500 bytes, send it to userspace.

In v2 a different approach is taken
   - check_pkt_len(> pkt_len ? (set of action to apply) : (another set of
     actions to apply))
     Eg. check_pkt_len(> 1500 ? (2): (3))
     If the packet length is greater than 1500, output to port 2, else
output to port 3.

ovs-vswitchd is modified accordingly.

The ovs action - check_pkt_larger is unchanged. It looks like
   - check_pkt_larger(pkt_len)->REGISTER_BIT.
     Eg.  check_pkt_larger(1500)->NXM_NX_REG0[0]
     If the packet is larger than 1500 bytes, REG0[0] will be set to 1.

More details in the patches.

If the approach seems reasonable, I will submit the datapath patch first
to net-dev ML first.

[1] - https://mail.openvswitch.org/pipermail/ovs-discuss/2018-July/047039.html

Numan Siddique (5):
   Add a new OVS action check_pkt_larger
   ovn: Add a new OVN field icmp4.frag_mtu
   ovn: Add a new OVN action 'icmp4_error'
   ovn: Support OVS action 'check_pkt_larger' in OVN
   ovn: Generate ICMPv4 packet in router pipeline for larger packets

  NEWS                                          |   2 +
  .../linux/compat/include/linux/openvswitch.h  |  22 ++
  include/openvswitch/ofp-actions.h             |  19 ++
  include/ovn/actions.h                         |  42 +++-
  include/ovn/automake.mk                       |   3 +-
  include/ovn/expr.h                            |   5 +
  {ovn/lib => include/ovn}/logical-fields.h     |  39 ++++
  lib/dpif-netdev.c                             |   1 +
  lib/dpif.c                                    |   1 +
  lib/odp-execute.c                             |  72 +++++++
  lib/odp-util.c                                |  86 ++++++++
  lib/ofp-actions.c                             | 121 ++++++++++-
  lib/ofp-parse.c                               |  10 +
  lib/ovs-actions.xml                           |  31 +++
  ofproto/ofproto-dpif-ipfix.c                  |   1 +
  ofproto/ofproto-dpif-sflow.c                  |   1 +
  ofproto/ofproto-dpif-xlate.c                  | 131 ++++++++++++
  ofproto/ofproto-dpif.c                        |  43 ++++
  ofproto/ofproto-dpif.h                        |   5 +-
  ovn/controller/lflow.c                        |   1 +
  ovn/controller/lflow.h                        |   2 +-
  ovn/controller/pinctrl.c                      | 109 +++++++++-
  ovn/lib/actions.c                             | 121 ++++++++++-
  ovn/lib/automake.mk                           |   1 -
  ovn/lib/expr.c                                |  17 +-
  ovn/lib/logical-fields.c                      |  36 +++-
  ovn/northd/ovn-northd.8.xml                   |  83 +++++++-
  ovn/northd/ovn-northd.c                       |  94 +++++++-
  ovn/ovn-sb.xml                                |  41 +++-
  ovn/utilities/ovn-trace.c                     |  34 ++-
  tests/odp.at                                  |   5 +
  tests/ofp-actions.at                          |   6 +
  tests/ofproto-dpif.at                         | 162 ++++++++++++++
  tests/ovn.at                                  | 200 ++++++++++++++++++
  tests/test-ovn.c                              |   2 +-
  35 files changed, 1520 insertions(+), 29 deletions(-)
  rename {ovn/lib => include/ovn}/logical-fields.h (73%)


_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to