Hello,

Here is my unit test:

diff --git a/tests/tunnel-push-pop.at b/tests/tunnel-push-pop.at
index 57589758f..bfb0f440b 100644
--- a/tests/tunnel-push-pop.at
+++ b/tests/tunnel-push-pop.at
@@ -842,3 +842,52 @@ Datapath actions: 7

 OVS_VSWITCHD_STOP
 AT_CLEANUP
+
+AT_SETUP([tunnel_push_pop - VXLAN access port])
+
+dnl Create bridge that has a MAC address
+OVS_VSWITCHD_START([set bridge br0 dnl
+                    datapath_type=dummy -- set Interface dnl
+                    br0 other-config:hwaddr=aa:55:aa:55:00:00])
+AT_CHECK([ovs-vsctl add-port br0 p8 -- set Interface p8 dnl
+           type=dummy ofport_request=8])
+
+dnl Create another bridge
+AT_CHECK([ovs-vsctl add-br ovs-tun0 -- set bridge ovs-tun0
datapath_type=dummy])
+
+dnl Add VXLAN port to this bridge
+AT_CHECK([ovs-vsctl add-port ovs-tun0 tun0 -- set int tun0 dnl
+          type=vxlan options:remote_ip=10.0.0.11 -- add-port ovs-tun0 p7 dnl
+          -- set interface p7 type=dummy ofport_request=7])
+
+dnl Set VLAN tags, so that br0 and its port p8 have the same tag,
+dnl but ovs-tun0's port p7 has a different tag
+AT_CHECK([ovs-vsctl set port p8 tag=42 -- set port br0 tag=42 dnl
+          -- set port p7 tag=200])
+
+dnl Set IP address and route for br0
+AT_CHECK([ovs-appctl netdev-dummy/ip4addr br0 10.0.0.2/24], [0], [OK
+])
+AT_CHECK([ovs-appctl ovs/route/add 10.0.0.11/24 br0], [0], [OK
+])
+
+dnl Send an ARP reply to port b8 on br0, so that packets will be forwarded
+dnl to learned port
+AT_CHECK([ovs-ofctl add-flow br0 action=normal])
+AT_CHECK([ovs-appctl netdev-dummy/receive p8 'in_port(8),dnl
+   eth(src=aa:55:aa:66:00:00,dst=ff:ff:ff:ff:ff:ff),eth_type(0x0806),dnl
+   
arp(sip=10.0.0.11,tip=10.0.0.2,op=2,sha=aa:55:aa:66:00:00,tha=00:00:00:00:00:00)'])
+
+AT_CHECK([ovs-appctl ofproto/trace ovs-tun0 in_port=p7], [0], [stdout])
+AT_CHECK([tail -2 stdout], [0], [dnl
+Megaflow: recirc_id=0,eth,in_port=7,dl_src=00:00:00:00:00:00,dnl
+dl_dst=00:00:00:00:00:00,dl_type=0x0000
+Datapath actions: push_vlan(vid=200,pcp=0),1,clone(tnl_push(tnl_port(4789),dnl
+header(size=50,type=4,eth(dst=aa:55:aa:66:00:00,src=aa:55:aa:55:00:00,dnl
+dl_type=0x0800),ipv4(src=10.0.0.2,dst=10.0.0.11,proto=17,tos=0,ttl=64,dnl
+frag=0x4000),udp(src=0,dst=4789,csum=0x0),vxlan(flags=0x8000000,vni=0x0)),dnl
+out_port(100)),8)
+])
+
+OVS_VSWITCHD_STOP
+AT_CLEANUP

On Tue, Apr 5, 2022 at 2:35 PM Ilya Maximets <i.maxim...@ovn.org> wrote:
>
> Hi.  Thanks for the patch!
>
> One general comment for the subject line:
> 'netdev' doesn't seem to be a correct 'area' for the change.
> It should be 'ofproto-dpif-xlate' instead.  And, please,
> add the space after the ':'.  'summary' should preferably
> start with a capital letter and end with a period.
>
> More details on how to format the patch here:
>   Documentation/internals/contributing/submitting-patches.rst
>
> See some more comments inline.
>
> On 4/5/22 01:01, Thilak Raj Surendra Babu wrote:
> > when a packet is received over an access port that needs to be sent over a 
> > vxlan tunnel,
> > the access port VLAN id is used in the lookup leading to a wrong packet 
> > being crafted and
> > sent over the tunnel.Clear out the flow 's VLAN field as it should not be 
> > used while performing
> > mac lookup for the outer tunnel and also at this point the VLAN action 
> > related to inner flow is
> > already committed.
>
> Please, limit the line length for a commit message.
> 72 characters is the most common limit for it.
>
> >
>
> Please, add a 'Fixes' tag.
>
> > Signed-off-by: Thilak Raj Surendra Babu <thilakraj...@nutanix.com>
> > ---
>
> While sending new versions of a patch, please, add here
> a brief explanation of what changed between versions.
> E.g.:
>
> Version 2:
>   - Fixed line length warning from checkpatch.
>   - Dropped unrelated changes.
>
> >  ofproto/ofproto-dpif-xlate.c |  3 ++
> >  tests/system-traffic.at      | 54 ++++++++++++++++++++++++++++++++++++
>
> I see you added a system test.  That is OK, good to have one.
> However, the issue doesn't require any actual network to be
> reproduced.  So, we should have a unit test for it.
>
> I know that Rosemarie worked on the same problem over the
> past few weeks, and she already has a working unit test.  So,
> I think it would be great if you can cooperate and include
> the unit test into the patch.
>
> Rosemarie, could you share what you have?
>
> >  2 files changed, 57 insertions(+)
> >
> > diff --git a/ofproto/ofproto-dpif-xlate.c b/ofproto/ofproto-dpif-xlate.c
> > index bfd4960dd..34f74aade 100644
> > --- a/ofproto/ofproto-dpif-xlate.c
> > +++ b/ofproto/ofproto-dpif-xlate.c
> > @@ -3541,6 +3541,9 @@ propagate_tunnel_data_to_flow__(struct flow *dst_flow,
> >  {
> >      dst_flow->dl_dst = dmac;
> >      dst_flow->dl_src = smac;
>
> An empty line here would be nice.
>
> > +    /* Clear VLAN entries which do not apply for tunnel flows */
>
> Comments should end with a period.
>
> > +    memset (dst_flow->vlans, 0,
>
> No need for extra space between the function name and the '('.
>
> > +            sizeof(union flow_vlan_hdr) * FLOW_MAX_VLAN_HEADERS);
>
> Please, avoid use of sizeof with the type as an argument.
> Use the expression (actual object) as an argument instead.
>
> For more details see the coding-style guide:
>   Documentation/internals/contributing/coding-style.rst
>
> >
> >      dst_flow->packet_type = htonl(PT_ETH);
> >      dst_flow->nw_dst = src_flow->tunnel.ip_dst;
> > diff --git a/tests/system-traffic.at b/tests/system-traffic.at
> > index 4a7fa49fc..b0003c2e5 100644
> > --- a/tests/system-traffic.at
> > +++ b/tests/system-traffic.at
> > @@ -259,6 +259,60 @@ NS_CHECK_EXEC([at_ns0], [ping -s 3200 -q -c 3 -i 0.3 
> > -w 2 10.1.1.100 | FORMAT_PI
> >  OVS_TRAFFIC_VSWITCHD_STOP
> >  AT_CLEANUP
> >
> > +
>
> This extra space is unnecessary.
>
> > +AT_SETUP([datapath - ping vlan over vxlan tunnel])
> > +OVS_CHECK_TUNNEL_TSO()
> > +OVS_CHECK_VXLAN()
> > +
> > +OVS_TRAFFIC_VSWITCHD_START()
> > +ADD_BR([br-underlay])
> > +
> > +AT_CHECK([ovs-vsctl -- add-port br0 patch0 -- set interface patch0 
> > type=patch options:peer=patch1 -- add-port br-underlay patch1 -- set 
> > interface patch1 type=patch options:peer=patch0])
> > +
> > +AT_CHECK([ovs-ofctl add-flow br0 "actions=normal"])
> > +AT_CHECK([ovs-ofctl add-flow br-underlay "actions=normal"])
> > +
> > +ADD_NAMESPACES(at_ns0)
> > +
> > +dnl Set up underlay link from host into the namespace using veth pair.
> > +ADD_VETH(p0, at_ns0, br-underlay, "172.31.1.1/24")
> > +AT_CHECK([ip addr add dev br-underlay "172.31.1.100/24"])
> > +AT_CHECK([ip link set dev br-underlay up])
> > +
> > +
> > +dnl Set up tunnel endpoints on OVS outside the namespace and with a native
> > +dnl linux device inside the namespace.
> > +
> > +ADD_NATIVE_TUNNEL([vxlan], [at_vxlan1], [at_ns0], [172.31.1.100], 
> > [10.1.1.1/24],
> > +                  [id 0 dstport 4789])
> > +
> > +ADD_OVS_TUNNEL([vxlan], [br-underlay], [at_vxlan0], [172.31.1.1], 
> > [10.1.1.100/24])
> > +
> > +NS_EXEC([at_ns0], [ip link add link at_vxlan1 name at_vxlan1.100 type vlan 
> > id 100])
> > +
> > +NS_EXEC([at_ns0], [ip addr flush dev at_vxlan1])
> > +NS_EXEC([at_ns0], [ip addr add dev at_vxlan1.100 "10.1.1.30/24"])
> > +NS_EXEC([at_ns0], [ip link set dev at_vxlan1.100 up])
> > +
> > +ADD_NAMESPACES(at_ns1)
> > +ADD_VETH(p1, at_ns1, br0, "10.1.1.10/24")
> > +
> > +AT_CHECK([ovs-vsctl set port ovs-p1 tag=100])
> > +
> > +dnl First, check the underlay
> > +NS_CHECK_EXEC([at_ns0], [ping -q -c 3 -i 0.3 -w 2 172.31.1.100 | 
> > FORMAT_PING], [0], [dnl
> > +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> > +])
> > +
> > +NS_CHECK_EXEC([at_ns1], [ping -q -c 3 -i 0.3 -w 2 10.1.1.30 | 
> > FORMAT_PING], [0], [dnl
> > +3 packets transmitted, 3 received, 0% packet loss, time 0ms
> > +])
> > +
> > +OVS_TRAFFIC_VSWITCHD_STOP(["/ofproto_dpif_xlate(revalidator.*)|WARN|over 
> > max translation depth 64.*/d"])
>
> Looks like you have a loop in the test topology.  That is not good.
> Please, remove the loop and you'll not need to filter out warnings.
>
> > +AT_CLEANUP
> > +
> > +
> > +
>
> One empty line is enough.
>
> >  AT_SETUP([datapath - ping over vxlan6 tunnel])
> >  OVS_CHECK_TUNNEL_TSO()
> >  OVS_CHECK_VXLAN_UDP6ZEROCSUM()
>
> Best regards, Ilya Maximets.
>

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

Reply via email to