hi,
when we send 2 packets with different dest mac in 10s(fast datapath flow
aging time), with the same userspace flow action, but the second packet act
incorrectly.
1. problem phenomenon:
userspace flow:
in_port=1,table=0,cookie=0x123,priority=500,tun_id=0x3562,actions=set_field:fe:ff:ff:ff:ff:ff->eth_src,set_field:fa:16:3e:c0:ee:8c->eth_dst,output:tap111
packet caputured:
13:51:02.097914 fe:ff:ff:ff:ff:ff > fa:16:3e:c0:ee:8c , ethertype IPv4
(0x0800), length 115: 10.194.50.240.53 > 10.199.16.44.48651: 35479 1/0/1 A
66.102.251.24 (73) //first packet, corrrect change its mac
13:51:04.213568 fe:ff:ff:ff:ff:ff > 00:00:00:00:00:00, ethertype IPv4
(0x0800), length 115: 10.194.50.240.53 > 10.199.16.44.48651: 35479 1/0/1 A
66.102.251.24 (73) //second packet, dest mac stay as unchanged
2. enviroment
ovs 2.12, can only reproduce in kernel mode
3. reproduce step
client node--> server node
3.1 client node configuration:
$ sudo ovs-vsctl show
77f97d1d-e34f-4e4c-b4f1-1d2299a4411a
Bridge br-test
fail_mode: secure
Port "vxlan11"
Interface "vxlan11"
type: vxlan
options: {in_key=flow, local_ip="10.185.2.87", out_key=flow,
remote_ip=flow}
Port br-test
Interface br-test
type: internal
Port "tap11"
Interface "tap11"
type: internal
ovs_version: "2.12.0"
sudo ovs-ofctl dump-flows br-test -O openflow13
cookie=0x0, duration=223377.958s, table=0, n_packets=7512, n_bytes=1755097,
reset_counts in_port=tap11
actions=set_field:0x3562->tun_id,load:0xab90251->NXM_NX_TUN_IPV4_DST[],output:vxlan11
3.2 server node configuration:
# ovs-vsctl show
f39fb127-019b-41c3-86b7-a420a3b4d7f2
Bridge br-int
fail_mode: secure
Port "vf-10.185.2.81"
Interface "vf-10.185.2.81"
type: vxlan
options: {csum="true", df_default="false", in_key=flow,
local_ip="10.185.2.81", out_key=flow, remote_ip=flow}
Port br-int
Interface br-int
type: internal
Port "tap111"
Interface "tap111"
type: internal
ovs_version: "2.12.0"
ovs-ofctl add-flow br-int -O openflow13
"in_port=1,table=0,cookie=0x123,priority=500,tun_id=0x3562,actions=set_field:fe:ff:ff:ff:ff:ff->eth_src,set_field:c6:3a:16:ec:e0:d9->eth_dst,output:tap111"
3.3 sending packets
packet payload:
dst mac:c6:3a:16:ec:e0:d9
src mac: 02:00:00:00:00:00
src ip: 10.194.50.241
dst ip: 10.100.100.212
proto: udp
l4port: 45678
# ovs-ofctl packet-out br-test 1 "table=0"
"c63a16ece0d902000000000008004500001c0000400040118de60ac232f10a6464d48000b26e00082084000000000000000000000000000000000000"
sleep 1s, send the second packet:
# ovs-ofctl packet-out br-test 1 "table=0"
"11111111111102000000000008004500001c0000400040118de60ac232f10a6464d48000b26e00082084000000000000000000000000000000000000"
3.4 server node packet capture
10:49:59.725865 fe:ff:ff:ff:ff:ff > c6:3a:16:ec:e0:d9, ethertype IPv4
(0x0800), length 60: 10.194.50.241.32768 > 10.100.100.212.45678: UDP, length 0
10:50:00.881564 fe:ff:ff:ff:ff:ff > 11:11:11:11:11:11, ethertype IPv4
(0x0800), length 60: 10.194.50.241.32768 > 10.100.100.212.45678: UDP, length 0
//it is wrong, dest mac should be c6:3a:16:ec:e0:d9
3.5 fast datapath flow in server node
recirc_id(0),tunnel(tun_id=0x3562,src=10.185.2.87,dst=10.185.2.81,flags(-df-csum+key)),in_port(1),eth(src=02:00:00:00:00:00),eth_type(0x0800),ipv4(frag=no),
packets:1, bytes:60, used:2.176s, actions:,set(eth(src=fe:ff:ff:ff:ff:ff)),3
correct datapath flow:
recirc_id(0),tunnel(tun_id=0x3562,src=10.185.2.87,dst=10.185.2.81,flags(-df-csum+key)),in_port(1),eth(src=02:00:00:00:00:00,dst=11:11:11:11:11:11),eth_type(0x0800),ipv4(frag=no),
packets:0, bytes:0, used:never,
actions:set(eth(src=fe:ff:ff:ff:ff:ff,dst=c6:3a:16:ec:e0:d9)),3
compare with the correct datapath flow, dest mac is disappeared in match
and action.
_______________________________________________
dev mailing list
[email protected]
https://mail.openvswitch.org/mailman/listinfo/ovs-dev