On 12 Mar 2024, at 4:16, Zhangweiwei via discuss wrote:
> Hi, > I send an ICMP echo request packet from port tapVm71( IP: 1.1.70.1) to > tapVm72( IP: 1.1.70.2) with CT, and there are two ICMP reply packets which > are captured on tapVm72. We can see the ICMP reply packet sent by tapVm72 is > mirrored twice within recirc_id(0) and recirc_id(0xe). This issue is caused > by patch (ofproto-dpif-upcall: Mirror packets that are modified, > https://github.com/openvswitch/ovs/commit/feed7f6775056b3dd55249596a7e587bc9c5fd4a). > The patch resets the mirrors every time when a packet is modified. In my > pipline, the NXM_NX_REG4[31] is modified,thus the ICMP reply packet is > mirrored again in recirc_id(0xe). > The condition for resetting the mirror in reset_mirror_ctx() seems not strict > enough, which can lead to duplicated mirror during recirclation. Mike can you take a look at this? It was introduced after your patch. > 1、ovs version: 3.2.1 > > 2、dpcls > [root@localhost ~]# ovs-appctl dpctl/dump-flows -m > flow-dump from pmd on cpu core: 1 > ufid:bc206dc0-dcfb-4396-894a-695656ffe6cc, > recirc_id(0),dp_hash(0/0),skb_priority(0/0),in_port(tapVm72),skb_mark(0/0),ct_state(0/0x20),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),packet_type(ns=0,id=0),eth(src=52:54:00:9a:bf:ed,dst=52:54:00:67:d5:61/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=1.1.70.2,dst=1.1.70.1/0.0.0.0,proto=1,tos=0/0,ttl=64/0,frag=no),icmp(type=0/0,code=0/0), > packets:449, bytes:44002, used:0.086s, dp:ovs, > actions:mitapVm72,ct(zone=6),recirc(0xe), dp-extra-info:miniflow_bits(5,2) > ufid:fbd3db23-9e12-4f6b-826e-5672d33856ae, > recirc_id(0),dp_hash(0/0),skb_priority(0/0),in_port(tapVm71),skb_mark(0/0),ct_state(0/0x3f),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),packet_type(ns=0,id=0),eth(src=52:54:00:67:d5:61,dst=52:54:00:9a:bf:ed),eth_type(0x0800),ipv4(src=1.1.70.1,dst=1.1.70.2/255.255.192.0,proto=1,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), > packets:449, bytes:44002, used:0.086s, dp:ovs, > actions:ct(zone=6),recirc(0xd), dp-extra-info:miniflow_bits(5,2) > ufid:63728c39-8203-4dd3-8d48-1dd1a2ec999e, > recirc_id(0xe),dp_hash(0/0),skb_priority(0/0),in_port(tapVm72),skb_mark(0/0),ct_state(0x2a/0x3f),ct_zone(0x6/0),ct_mark(0/0),ct_label(0/0),ct_tuple4(src=1.1.70.1/0.0.0.0,dst=1.1.70.2/0.0.0.0,proto=1/0,tp_src=8/0,tp_dst=0/0),packet_type(ns=0,id=0),eth(src=52:54:00:9a:bf:ed/00:00:00:00:00:00,dst=52:54:00:67:d5:61),eth_type(0x0800),ipv4(src=1.1.70.2/0.0.0.0,dst=1.1.70.1/255.255.192.0,proto=1,tos=0/0,ttl=64/0,frag=no),icmp(type=0/0,code=0/0), > packets:449, bytes:44002, used:0.086s, dp:ovs, actions:mitapVm72,tapVm71, > dp-extra-info:miniflow_bits(5,2) > ufid:54af771a-7c46-4b33-b207-93b219d014a4, > recirc_id(0xd),dp_hash(0/0),skb_priority(0/0),in_port(tapVm71),skb_mark(0/0),ct_state(0x22/0xf),ct_zone(0x6/0),ct_mark(0/0),ct_label(0/0),ct_tuple4(src=1.1.70.1/0.0.0.0,dst=1.1.70.2/0.0.0.0,proto=1/0,tp_src=8/0,tp_dst=0/0),packet_type(ns=0,id=0),eth(src=52:54:00:67:d5:61/00:00:00:00:00:00,dst=52:54:00:9a:bf:ed/00:00:00:00:00:00),eth_type(0x0800),ipv4(src=1.1.70.1/0.0.0.0,dst=1.1.70.2/0.0.0.0,proto=1/0,tos=0/0,ttl=64/0,frag=no),icmp(type=8/0,code=0/0), > packets:448, bytes:43904, used:0.086s, dp:ovs, actions:tapVm72,mitapVm72, > dp-extra-info:miniflow_bits(4,1) > > 3、Bridge > [root@localhost openvswitch-3.2.1]# ovs-vsctl show > Bridge vds1-br > Controller "tcp:172.20.66.228:6633" > is_connected: true > Controller "tcp:172.20.66.229:6633" > is_connected: true > fail_mode: secure > datapath_type: netdev > Port vxlan_vds1-br > Interface vxlan_vds1-br > type: vxlan > options: {key=flow, local_ip="3.3.3.70", remote_ip=flow, > tos=inherit} > Port tapVm72 > tag: 0 > Interface tapVm72 > type: dpdkvhostuserclient > options: {vhost-server-path="/var/run/openvswitch/tapVm72"} > Port mitapVm72 > Interface mitapVm72 > Port tapVm71 > tag: 0 > Interface tapVm71 > type: dpdkvhostuserclient > options: {vhost-server-path="/var/run/openvswitch/tapVm71"} > Port vds1-br > Interface vds1-br > type: internal > ovs_version: "3.2.1" > > 4、packets > [root@localhost ~]# ovs-tcpdump -i tapVm72 > dropped privs to tcpdump > tcpdump: verbose output suppressed, use -v or -vv for full protocol decode > listening on mitapVm72, link-type EN10MB (Ethernet), capture size 262144 bytes > > 10:03:30.173595 IP 1.1.70.1 > 1.1.70.2: ICMP echo request, id 16616, seq 1, > length 64 > 10:03:30.173696 IP 1.1.70.2 > 1.1.70.1: ICMP echo reply, id 16616, seq 1, > length 64 > 10:03:30.173697 IP 1.1.70.2 > 1.1.70.1: ICMP echo reply, id 16616, seq 1, > length 64 > > 5、track > [root@localhost~]# ovs-appctl ofproto/trace vds1-br in_port=tapVm72 > 52540067d5615254009abfed080045000054f9ba00004001f2e901014602010146010000a0761bcd0001c487ea6500000000cbfa0a0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363752540067d5615254009abfed080045000054f9ba00004001f2e901014602010146010000a0761bcd0001c487ea6500000000cbfa0a0000000000101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f3031323334353637 > Flow: > icmp,in_port=6,vlan_tci=0x0000,dl_src=52:54:00:9a:bf:ed,dl_dst=52:54:00:67:d5:61,nw_src=1.1.70.2,nw_dst=1.1.70.1,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=0,icmp_code=0 > > bridge("vds1-br") > ----------------- > 0. priority 0, cookie 0x1000000000000001 > goto_table:5 > 5. priority 0, cookie 0x1000000000000001 > group:553648133 > bucket 0 > resubmit(,166) > 166. No match. > drop > goto_table:12 > 12. priority 0, cookie 0x1000000000000001 > goto_table:15 > 15. in_port=6, priority 30000, cookie 0x1000000000000000 > write_metadata:0x500000000 > goto_table:17 > 17. ip,metadata=0x500000000/0x80ffffff0fff0000,in_port=6, priority 30000, > cookie 0x1000000000000000 > load:0x1->NXM_NX_REG4[0..30] > goto_table:20 > 20. priority 0, cookie 0x1000000000000001 > goto_table:21 > 21. priority 0, cookie 0x1000000000000001 > goto_table:25 > 25. priority 0, cookie 0x1000000000000001 > goto_table:30 > 30. > ip,metadata=0x500000000/0x80ffffff0fff0000,in_port=6,dl_src=52:54:00:9a:bf:ed,nw_src=1.1.70.2, > priority 30000, cookie 0x1000000000000000 > goto_table:35 > 35. metadata=0/0x8000000000000000, priority 30000, cookie 0x1000000000000000 > > learn(table=151,hard_timeout=300,priority=10000,OXM_OF_METADATA[32..55],NXM_OF_ETH_DST[]=NXM_OF_ETH_SRC[],load:NXM_OF_IN_PORT[]->OXM_OF_METADATA[0..15],load:OXM_OF_METADATA[16..27]->OXM_OF_METADATA[16..27]) > -> table=151 > metadata=0x500000000/0xffffff00000000,dl_dst=52:54:00:9a:bf:ed priority=10000 > hard=300 > actions=load:0x6->OXM_OF_METADATA[0..15],load:0->OXM_OF_METADATA[16..27] > goto_table:40 > 40. ip, priority 30000, cookie 0x1000000000000000 > goto_table:75 > 75. ct_state=-trk,ip,metadata=0x500000000/0x80ffffff0fff0000,in_port=6, > priority 30000, cookie 0x1020000000000000 > ct(table=76,zone=6) > drop > -> A clone of the packet is forked to recirculate. The forked pipeline > will be resumed at table 76. > -> Sets the packet to an untracked state, and clears all the conntrack > fields. > > Final flow: > icmp,reg4=0x1,metadata=0x500000000,in_port=6,vlan_tci=0x0000,dl_src=52:54:00:9a:bf:ed,dl_dst=52:54:00:67:d5:61,nw_src=1.1.70.2,nw_dst=1.1.70.1,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=0,icmp_code=0 > Megaflow: > recirc_id=0,ct_state=-trk,eth,icmp,in_port=6,dl_src=52:54:00:9a:bf:ed,nw_src=1.1.70.2,nw_frag=no > Datapath actions: 5,ct(zone=6),recirc(0xe) > > =============================================================================== > recirc(0xe) - resume conntrack with default ct_state=trk|new (use --ct-next > to customize) > =============================================================================== > > Flow: > recirc_id=0xe,ct_state=new|trk,ct_zone=6,eth,icmp,reg4=0x1,metadata=0x500000000,in_port=6,vlan_tci=0x0000,dl_src=52:54:00:9a:bf:ed,dl_dst=52:54:00:67:d5:61,nw_src=1.1.70.2,nw_dst=1.1.70.1,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=0,icmp_code=0 > > bridge("vds1-br") > ----------------- > thaw > Resuming from table 76 > 76. ct_state=+new-est,ip,metadata=0x500000000/0x80ffffff0fff0000,in_port=6, > priority 50000, cookie 0x1020000000000000 > ct(commit,zone=6) > drop > -> Sets the packet to an untracked state, and clears all the conntrack > fields. > goto_table:78 > 78. priority 0, cookie 0x1000000000000001 > goto_table:80 > 80. priority 0, cookie 0x1000000000000001 > goto_table:85 > 85. priority 0, cookie 0x1000000000000001 > goto_table:87 > 87. priority 0, cookie 0x1000000000000000 > group:553648129 > bucket 0 > resubmit(,160) > 160. No match. > drop > bucket 1 > resubmit(,145) > 145. No match. > drop > goto_table:90 > 90. ip,metadata=0x500000000/0x80ffffff0fff0000,in_port=6, priority 30000, > cookie 0x1000000000000000 > load:0x1->NXM_NX_REG4[0..30] > goto_table:92 > 92. ip,reg4=0x1,nw_dst=1.1.0.0/16, priority 30000, cookie 0x1000000000000000 > load:0x1->NXM_NX_REG4[31] > goto_table:100 > 100. priority 0, cookie 0x1000000000000001 > goto_table:105 > 105. priority 0, cookie 0x1000000000000001 > goto_table:110 > 110. dl_dst=00:00:00:00:00:00/01:00:00:00:00:00, priority 30000, cookie > 0x1000000000000000 > goto_table:115 > 115. priority 0, cookie 0x1000000000000001 > goto_table:120 > 120. priority 0, cookie 0x1000000000000001 > goto_table:130 > 130. priority 0, cookie 0x1000000000000001 > goto_table:140 > 140. priority 0, cookie 0x1000000000000001 > goto_table:150 > 150. metadata=0x500000000/0xffffff00000000,dl_dst=52:54:00:67:d5:61, priority > 30000, cookie 0x1000000000000000 > write_metadata:0x500000003/0xffffff0fffffff > goto_table:230 > 230. priority 0, cookie 0x1000000000000001 > goto_table:231 > 231. priority 0, cookie 0x1000000000000001 > goto_table:233 > 233. priority 0, cookie 0x1000000000000001 > goto_table:235 > 235. priority 0, cookie 0x1000000000000001 > goto_table:240 > 240. priority 0, cookie 0x1000000000000001 > goto_table:245 > 245. priority 0, cookie 0x1000000000000000 > group:553648130 > bucket 0 > resubmit(,162) > 162. No match. > drop > bucket 1 > resubmit(,171) > 171. No match. > drop > bucket 2 > resubmit(,145) > 145. No match. > drop > goto_table:249 > 249. metadata=0x500000003/0xffffff0fffffff, priority 30000, cookie > 0x1000000000000000 > output:3 > > Final flow: > recirc_id=0xe,eth,icmp,reg4=0x80000001,metadata=0x500000003,in_port=6,vlan_tci=0x0000,dl_src=52:54:00:9a:bf:ed,dl_dst=52:54:00:67:d5:61,nw_src=1.1.70.2,nw_dst=1.1.70.1,nw_tos=0,nw_ecn=0,nw_ttl=64,nw_frag=no,icmp_type=0,icmp_code=0 > Megaflow: > recirc_id=0xe,ct_state=+new-est-rel-rpl-inv+trk,eth,icmp,in_port=6,dl_dst=52:54:00:67:d5:61,nw_dst=1.1.64.0/18,nw_frag=no > Datapath actions: 5,ct(commit,zone=6),4 > > [root@localhost ~]# ovs-appctl dpif/show > netdev@ovs-netdev: hit:14940 missed:34 > vds1-br: > mitapVm72 5/5: (system) > tapVm71 3/4: (dpdkvhostuserclient: configured_rx_queues=1, > configured_tx_queues=1, mtu=1500, requested_rx_queues=1, > requested_tx_queues=1) > tapVm72 6/6: (dpdkvhostuserclient: configured_rx_queues=1, > configured_tx_queues=1, mtu=1500, requested_rx_queues=1, > requested_tx_queues=1) > vds1-br 65534/2: (tap) > vxlan_vds1-br 2/7: (vxlan: key=flow, local_ip=3.3.3.70, remote_ip=flow, > tos=inherit) > > > Best regards, WeiweiZhang > > ------------------------------------------------------------------------------------------------------------------------------------- > 本邮件及其附件含有新华三集团的保密信息,仅限于发送给上面地址中列出 > 的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全部或部分地泄露、复制、 > 或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或邮件通知发件人并删除本 > 邮件! > This e-mail and its attachments contain confidential information from New > H3C, which is > intended only for the person or entity whose address is listed above. Any use > of the > information contained herein in any way (including, but not limited to, total > or partial > disclosure, reproduction, or dissemination) by persons other than the intended > recipient(s) is prohibited. If you receive this e-mail in error, please > notify the sender > by phone or email immediately and delete it! > _______________________________________________ > discuss mailing list > disc...@openvswitch.org > https://mail.openvswitch.org/mailman/listinfo/ovs-discuss _______________________________________________ discuss mailing list disc...@openvswitch.org https://mail.openvswitch.org/mailman/listinfo/ovs-discuss