On Thu, May 19, 2022 at 9:25 AM Ferriter, Cian <cian.ferri...@intel.com> wrote:
>
> Hi Aaron,
>
> <snip commit message away>
>
> > ---
> >  include/openvswitch/flow.h |  7 +++----
> >  tests/classifier.at        | 27 +++++++++++++++++++++++++++
> >  2 files changed, 30 insertions(+), 4 deletions(-)
> >
> > diff --git a/include/openvswitch/flow.h b/include/openvswitch/flow.h
> > index 3054015d93..df10cf579e 100644
> > --- a/include/openvswitch/flow.h
> > +++ b/include/openvswitch/flow.h
> > @@ -141,15 +141,14 @@ struct flow {
> >      uint8_t nw_tos;             /* IP ToS (including DSCP and ECN). */
> >      uint8_t nw_ttl;             /* IP TTL/Hop Limit. */
> >      uint8_t nw_proto;           /* IP protocol or low 8 bits of ARP 
> > opcode. */
> > +    /* L4 (64-bit aligned) */
> >      struct in6_addr nd_target;  /* IPv6 neighbor discovery (ND) target. */
> >      struct eth_addr arp_sha;    /* ARP/ND source hardware address. */
> >      struct eth_addr arp_tha;    /* ARP/ND target hardware address. */
> > -    ovs_be16 tcp_flags;         /* TCP flags/ICMPv6 ND options type.
> > -                                 * With L3 to avoid matching L4. */
> > +    ovs_be16 tcp_flags;         /* TCP flags/ICMPv6 ND options type. */
> >      ovs_be16 pad2;              /* Pad to 64 bits. */
> >      struct ovs_key_nsh nsh;     /* Network Service Header keys */
> >
> > -    /* L4 (64-bit aligned) */
> >      ovs_be16 tp_src;            /* TCP/UDP/SCTP source port/ICMP type. */
> >      ovs_be16 tp_dst;            /* TCP/UDP/SCTP destination port/ICMP 
> > code. */
> >      ovs_be16 ct_tp_src;         /* CT original tuple source port/ICMP 
> > type. */
> > @@ -179,7 +178,7 @@ BUILD_ASSERT_DECL(offsetof(struct flow, igmp_group_ip4) 
> > + sizeof(uint32_t)
>
> About the following BUILD_ASSRT_DECL which is in include/openvswitch/flow.h 
> directly below struct flow.h:
> /* Remember to update FLOW_WC_SEQ when changing 'struct flow'. */
> BUILD_ASSERT_DECL(offsetof(struct flow, igmp_group_ip4) + sizeof(uint32_t)
>                   == sizeof(struct flow_tnl) + sizeof(struct ovs_key_nsh) + 
> 300
>                   && FLOW_WC_SEQ == 42);
>
> Should we increment the FLOW_WC_SEQ value? The comment reads:
> /* This sequence number should be incremented whenever anything involving 
> flows
>  * or the wildcarding of flows changes.  This will cause build assertion
>  * failures in places which likely need to be updated. */
>
> We haven't changed anything in the order or content of struct flow but we 
> have changed (fixed) how flows are wildcarded. It doesn't look like any of 
> the code asserting FLOW_WC_SEQ == 42 and relying on struct flow order and 
> content needs updating.
> Just wondering your/others thoughts about whether to increment to 43 or not.
>
> >  enum {
> >      FLOW_SEGMENT_1_ENDS_AT = offsetof(struct flow, dl_dst),
> >      FLOW_SEGMENT_2_ENDS_AT = offsetof(struct flow, nw_src),
> > -    FLOW_SEGMENT_3_ENDS_AT = offsetof(struct flow, tp_src),
> > +    FLOW_SEGMENT_3_ENDS_AT = offsetof(struct flow, nd_target),
> >  };
> >  BUILD_ASSERT_DECL(FLOW_SEGMENT_1_ENDS_AT % sizeof(uint64_t) == 0);
> >  BUILD_ASSERT_DECL(FLOW_SEGMENT_2_ENDS_AT % sizeof(uint64_t) == 0);
>
> IIUC, we are moving the L4 boundary 56B earlier in struct flow. This means 
> L3/L4 segment boundary is still at a U64 boundary. I know we have 
> BUILD_ASSERTs checking this, but I just thought to double check myself.
>
> > diff --git a/tests/classifier.at b/tests/classifier.at
> > index cdcd72c156..a0a8fe0359 100644
> > --- a/tests/classifier.at
> > +++ b/tests/classifier.at
> > @@ -129,6 +129,33 @@ Datapath actions: 3
> >  OVS_VSWITCHD_STOP(["/'prefixes' with incompatible field: ipv6_label/d"])
> >  AT_CLEANUP
> >
> > +AT_SETUP([flow classifier - ipv6 ND dependancy])
> > +OVS_VSWITCHD_START
> > +add_of_ports br0 1 2
> > +AT_DATA([flows.txt], [dnl
> > + table=0,priority=100,ipv6,ipv6_src=1000::/10 actions=resubmit(,1)
> > + table=0,priority=0 actions=NORMAL
> > + table=1,priority=110,ipv6,ipv6_dst=1000::3 actions=resubmit(,2)
> > + table=1,priority=100,ipv6,ipv6_dst=1000::4 actions=resubmit(,2)
> > + table=1,priority=0 actions=NORMAL
> > + 
> > table=2,priority=120,icmp6,nw_ttl=255,icmp_type=135,icmp_code=0,nd_target=1000::1
> >  actions=NORMAL
> > + table=2,priority=100,tcp actions=NORMAL
> > + table=2,priority=100,icmp6 actions=NORMAL
> > + table=2,priority=0 actions=NORMAL
> > +])
> > +AT_CHECK([ovs-ofctl add-flows br0 flows.txt])
> > +
> > +# test ICMPv6 echo request (which should have no nd_target field)
> > +AT_CHECK([ovs-appctl ofproto/trace br0
> > "in_port=1,eth_src=f6:d2:b0:19:5e:7b,eth_dst=d2:49:19:91:78:fe,dl_type=0x86dd,ipv6_src=1000::3,ipv6_ds
> > t=1000::4,nw_proto=58,icmpv6_type=128,icmpv6_code=0"], [0], [stdout])
> > +AT_CHECK([tail -2 stdout], [0],
> > +  [Megaflow:
> > recirc_id=0,eth,icmp6,in_port=1,dl_src=f6:d2:b0:19:5e:7b,dl_dst=d2:49:19:91:78:fe,ipv6_src=1000::/10,i
> > pv6_dst=1000::4,nw_ttl=0,nw_frag=no
> > +Datapath actions: 100,2
> > +])
> > +
> > +AT_CLEANUP
> > +
> > +
> > +
>
> Nit: The other tests in the file have one line after the "AT_CLEANUP", maybe 
> this should be the same instead of 3 lines?
>
> >  AT_BANNER([conjunctive match])
> >
> >  AT_SETUP([single conjunctive match])
>
> I've applied the patch to the latest master, run the unit test and it passes 
> for me.
> I also ran the test after reverting just the C code changes in this patch and 
> correctly fails as expected. The Megaflow in the test has a ",nd_target=::" 
> at the end, which the test correctly picks up as a failure. The test is 
> correctly doing its job!
>
> I have looked at the performance tests we run and none of them are affected 
> by moving tcp_flags from the l3 subtable match to l4.
>
> Out of curiosity, I also ran the classifier benchmark tests (ovstest 
> test-classifier benchmark) and didn't see a performance difference before and 
> after the patch. Having a look at tests/test-classifier.c, I can see that the 
> tcp_flags field isn't tested, so it makes sense there's no difference in 
> performance there.
>
> Regardless of the questions and comments above, I'm happy to Ack this patch 
> in its current state:
> Acked-by: Cian Ferriter <cian.ferri...@intel.com>

Thanks for fixing this issue.
Tested the patch and it fixes the issue on my setup.

Tested-by: Numan Siddique <num...@ovn.org>

Thanks
Numan

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

Reply via email to