On Wed, 28 Aug 2024 07:33:42 +0000
"Wangyunjian\(wangyunjian, TongTu\) via discuss"
<ovs-discuss@openvswitch.org> wrote:

> Hi
> In our scenario, there are two hosts attached to the OVS. The active
> host1 and the standby host2 have same MAC. When switching from host1
> to host2, the flow of host1 in revalidator update the mac entry of
> the host2. I think this is not exactly. How do you think?


It looks like the test can race pings from the two sources and
the last one might run before the first, leaving the original one
in the fdb.

What happens if you ping one address and then ping the other manually?


 
> Another question: I think the upcall thread update the mac learning
> table is enough why the revalidator thread do this?

Because some changes may affect the flows in the datapath as well.

fbl

> 
> 
> Here are some logs:
> #     ovs-appctl fdb/show br-2
> port  VLAN  MAC                Age
>     6     0  de:ca:44:38:17:41    4
>     2     0  de:ca:44:38:17:42    4                           // The
> port no should be 6 6     0  de:ca:44:38:17:45    4
>     6     0  de:ca:44:38:17:43    4
>     6     0  de:ca:44:38:17:44    4
> #     ovs-appctl fdb/show br-3
> port  VLAN  MAC                Age
>     6     0  de:ca:44:38:17:41    4           // The port no should
> be 1 2     0  de:ca:44:38:17:42    4
>     5     0  de:ca:44:38:17:45    4
>     3     0  de:ca:44:38:17:43    4
>     4     0  de:ca:44:38:17:44    4
> CI-EVS-9-31-3-95:/Images/linhf # ovs-dpctl dump-flows --names
> recirc_id(0),in_port(hnic2.5),eth(src=de:ca:44:38:17:45,dst=de:ca:44:38:17:55),eth_type(0x0800),ipv4(frag=no),
> packets:9, bytes:882, used:4.112s,
> actions:br-2,hnic2.1,hnic2.2,hnic2.3,hnic2.4,veth2.1
> 
> recirc_id(0),in_port(hnic2.1),eth(src=de:ca:44:38:17:41,dst=de:ca:44:38:17:51),eth_type(0x0800),ipv4(frag=no),
> packets:9, bytes:882, used:4.145s,
> actions:br-2,hnic2.2,hnic2.3,hnic2.4,hnic2.5,veth2.1
> recirc_id(0),in_port(veth3.1),eth(src=de:ca:44:38:17:41,dst=de:ca:44:38:17:51),eth_type(0x0800),ipv4(frag=no),
> packets:9, bytes:882, used:4.145s,
> actions:br-3,hnic3.1,hnic3.2,hnic3.3,hnic3.4,hnic3.5
> recirc_id(0),in_port(hnic3.1),eth(src=de:ca:44:38:17:41,dst=de:ca:44:38:17:61),eth_type(0x0800),ipv4(frag=no),
> packets:4, bytes:392, used:4.053s,
> actions:br-3,hnic3.2,hnic3.3,hnic3.4,hnic3.5,veth3.1
> recirc_id(0),in_port(veth2.1),eth(src=de:ca:44:38:17:41,dst=de:ca:44:38:17:61),eth_type(0x0800),ipv4(frag=no),
> packets:4, bytes:392, used:4.053s,
> actions:br-2,hnic2.1,hnic2.2,hnic2.3,hnic2.4,hnic2.5
> 
> recirc_id(0),in_port(hnic2.2),eth(src=de:ca:44:38:17:42,dst=de:ca:44:38:17:52),eth_type(0x0800),ipv4(frag=no),
> packets:9, bytes:882, used:4.145s,
> actions:br-2,hnic2.1,hnic2.3,hnic2.4,hnic2.5,veth2.1
> recirc_id(0),in_port(veth3.1),eth(src=de:ca:44:38:17:42,dst=de:ca:44:38:17:52),eth_type(0x0800),ipv4(frag=no),
> packets:9, bytes:882, used:4.145s,
> actions:br-3,hnic3.1,hnic3.2,hnic3.3,hnic3.4,hnic3.5
> recirc_id(0),in_port(hnic3.2),eth(src=de:ca:44:38:17:42,dst=de:ca:44:38:17:62),eth_type(0x0800),ipv4(frag=no),
> packets:4, bytes:392, used:4.049s,
> actions:br-3,hnic3.1,hnic3.3,hnic3.4,hnic3.5,veth3.1
> recirc_id(0),in_port(veth2.1),eth(src=de:ca:44:38:17:42,dst=de:ca:44:38:17:62),eth_type(0x0800),ipv4(frag=no),
> packets:4, bytes:392, used:4.049s,
> actions:br-2,hnic2.1,hnic2.2,hnic2.3,hnic2.4,hnic2.5
> 
> recirc_id(0),in_port(veth3.1),eth(src=de:ca:44:38:17:43,dst=de:ca:44:38:17:53),eth_type(0x0800),ipv4(frag=no),
> packets:9, bytes:882, used:4.145s,
> actions:br-3,hnic3.1,hnic3.2,hnic3.3,hnic3.4,hnic3.5
> recirc_id(0),in_port(hnic3.5),eth(src=de:ca:44:38:17:45,dst=de:ca:44:38:17:65),eth_type(0x0800),ipv4(frag=no),
> packets:4, bytes:392, used:4.017s,
> actions:br-3,hnic3.1,hnic3.2,hnic3.3,hnic3.4,veth3.1
> recirc_id(0),in_port(hnic2.4),eth(src=de:ca:44:38:17:44,dst=de:ca:44:38:17:54),eth_type(0x0800),ipv4(frag=no),
> packets:9, bytes:882, used:4.113s,
> actions:br-2,hnic2.1,hnic2.2,hnic2.3,hnic2.5,veth2.1
> recirc_id(0),in_port(hnic2.3),eth(src=de:ca:44:38:17:43,dst=de:ca:44:38:17:53),eth_type(0x0800),ipv4(frag=no),
> packets:9, bytes:882, used:4.145s,
> actions:br-2,hnic2.1,hnic2.2,hnic2.4,hnic2.5,veth2.1
> recirc_id(0),in_port(veth3.1),eth(src=de:ca:44:38:17:45,dst=de:ca:44:38:17:55),eth_type(0x0800),ipv4(frag=no),
> packets:9, bytes:882, used:4.113s,
> actions:br-3,hnic3.1,hnic3.2,hnic3.3,hnic3.4,hnic3.5
> recirc_id(0),in_port(veth2.1),eth(src=de:ca:44:38:17:45,dst=de:ca:44:38:17:65),eth_type(0x0800),ipv4(frag=no),
> packets:4, bytes:392, used:4.017s,
> actions:br-2,hnic2.1,hnic2.2,hnic2.3,hnic2.4,hnic2.5
> recirc_id(0),in_port(hnic3.3),eth(src=de:ca:44:38:17:43,dst=de:ca:44:38:17:63),eth_type(0x0800),ipv4(frag=no),
> packets:4, bytes:392, used:4.017s,
> actions:br-3,hnic3.1,hnic3.2,hnic3.4,hnic3.5,veth3.1
> recirc_id(0),in_port(veth3.1),eth(src=de:ca:44:38:17:44,dst=de:ca:44:38:17:54),eth_type(0x0800),ipv4(frag=no),
> packets:9, bytes:882, used:4.113s,
> actions:br-3,hnic3.1,hnic3.2,hnic3.3,hnic3.4,hnic3.5
> recirc_id(0),in_port(veth2.1),eth(src=de:ca:44:38:17:43,dst=de:ca:44:38:17:63),eth_type(0x0800),ipv4(frag=no),
> packets:4, bytes:392, used:4.017s,
> actions:br-2,hnic2.1,hnic2.2,hnic2.3,hnic2.4,hnic2.5
> recirc_id(0),in_port(hnic3.4),eth(src=de:ca:44:38:17:44,dst=de:ca:44:38:17:64),eth_type(0x0800),ipv4(frag=no),
> packets:4, bytes:392, used:4.017s,
> actions:br-3,hnic3.1,hnic3.2,hnic3.3,hnic3.5,veth3.1
> recirc_id(0),in_port(veth2.1),eth(src=de:ca:44:38:17:44,dst=de:ca:44:38:17:64),eth_type(0x0800),ipv4(frag=no),
> packets:4, bytes:392, used:4.017s,
> actions:br-2,hnic2.1,hnic2.2,hnic2.3,hnic2.4,hnic2.5
> 
> Here is test script:
> ovs-vsctl del-br br-2
> ovs-vsctl del-br br-3
> ip link add veth2.1 type veth peer name veth3.1;
> ifconfig veth2.1 up;
> sleep 1;
> ifconfig veth3.1 up;
> ovs-vsctl add-br br-2;
> ovs-vsctl add-br br-3;
> ovs-vsctl add-port br-2 hnic2.1 -- set interface hnic2.1
> type=internal; ovs-vsctl add-port br-2 hnic2.2 -- set interface
> hnic2.2 type=internal; ovs-vsctl add-port br-2 hnic2.3 -- set
> interface hnic2.3 type=internal; ovs-vsctl add-port br-2 hnic2.4 --
> set interface hnic2.4 type=internal; ovs-vsctl add-port br-2 hnic2.5
> -- set interface hnic2.5 type=internal; ovs-vsctl add-port br-3
> hnic3.1 -- set interface hnic3.1 type=internal; ovs-vsctl add-port
> br-3 hnic3.2 -- set interface hnic3.2 type=internal; ovs-vsctl
> add-port br-3 hnic3.3 -- set interface hnic3.3 type=internal;
> ovs-vsctl add-port br-3 hnic3.4 -- set interface hnic3.4
> type=internal; ovs-vsctl add-port br-3 hnic3.5 -- set interface
> hnic3.5 type=internal; ip link set hnic2.1 address DE:CA:44:38:17:41;
> ip link set hnic3.1 address DE:CA:44:38:17:41; ip link set hnic2.2
> address DE:CA:44:38:17:42; ip link set hnic3.2 address
> DE:CA:44:38:17:42; ip link set hnic2.3 address DE:CA:44:38:17:43;
> ip link set hnic3.3 address DE:CA:44:38:17:43;
> ip link set hnic2.4 address DE:CA:44:38:17:44;
> ip link set hnic3.4 address DE:CA:44:38:17:44;
> ip link set hnic2.5 address DE:CA:44:38:17:45;
> ip link set hnic3.5 address DE:CA:44:38:17:45;
> ifconfig hnic2.1 192.168.112.2/24;
> ifconfig hnic3.1 192.168.113.2/24;
> ifconfig hnic2.2 192.168.122.2/24;
> ifconfig hnic3.2 192.168.123.2/24;
> ifconfig hnic2.3 192.168.132.2/24;
> ifconfig hnic3.3 192.168.133.2/24;
> ifconfig hnic2.4 192.168.142.2/24;
> ifconfig hnic3.4 192.168.143.2/24;
> ifconfig hnic2.5 192.168.152.2/24;
> ifconfig hnic3.5 192.168.153.2/24;
> ovs-vsctl add-port br-2 veth2.1;
> ovs-vsctl add-port br-3 veth3.1;
> arp -s 192.168.112.3 de:ca:44:38:17:51;
> arp -s 192.168.122.3 de:ca:44:38:17:52;
> arp -s 192.168.132.3 de:ca:44:38:17:53;
> arp -s 192.168.142.3 de:ca:44:38:17:54;
> arp -s 192.168.152.3 de:ca:44:38:17:55;
> arp -s 192.168.113.3 de:ca:44:38:17:61;
> arp -s 192.168.123.3 de:ca:44:38:17:62;
> arp -s 192.168.133.3 de:ca:44:38:17:63;
> arp -s 192.168.143.3 de:ca:44:38:17:64;
> arp -s 192.168.153.3 de:ca:44:38:17:65;
> for ((i=0;i<1;i++));do
>     ovs-appctl fdb/flush br-2
>     ovs-appctl fdb/flush br-3
>     ovs-dpctl del-flows
>     
>     ping 192.168.112.3 -c 5 > /dev/null &
>     ping 192.168.122.3 -c 5 > /dev/null &
>     ping 192.168.132.3 -c 5 > /dev/null &
>     ping 192.168.142.3 -c 5 > /dev/null &
>     ping 192.168.152.3 -c 5 > /dev/null &
>     sleep 5
>     ovs-appctl fdb/show br-2
>     ovs-appctl fdb/show br-3
>     ovs-dpctl dump-flows --names
>     
>     ping 192.168.112.3 -c 5 > /dev/null &
>     ping 192.168.122.3 -c 5 > /dev/null &
>     ping 192.168.132.3 -c 5 > /dev/null &
>     ping 192.168.142.3 -c 5 > /dev/null &
>     ping 192.168.152.3 -c 5 > /dev/null &
>     sleep 0.04       
>     ping 192.168.113.3 -c 5 > /dev/null &
>     ping 192.168.123.3 -c 5 > /dev/null &
>     ping 192.168.133.3 -c 5 > /dev/null &
>     ping 192.168.143.3 -c 5 > /dev/null &
>     ping 192.168.153.3 -c 5 > /dev/null &
> 
>     ovs-appctl fdb/show br-2
>     ovs-appctl fdb/show br-3
>     ovs-dpctl dump-flows --names
>          
> done
> 
> 
> _______________________________________________
> 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

Reply via email to