在 2016/10/25 1:16, Daniele Di Proietto 写道:




On 24/10/2016 00:31, "Michael Qiu" <08005...@163.com> wrote:

Hi, all


When I self-compiled the OVS-2.6 from commit:

commit 7a0f907b2393626dac1387617355990eab69aef7
Author: Justin Pettit <jpet...@ovn.org>
Date:   Tue Sep 27 10:13:42 2016 -0700

     Set release date for 2.6.0.

     Signed-off-by: Justin Pettit <jpet...@ovn.org>
     Acked-by: Ben Pfaff <b...@ovn.org>

I found that when I using "action=normal", the fdb table will never
learn the mac addr in the packets from the patch port, is it a bug?


This issue lead other problems, all packets to patch port will flooding
to all ports with the same vlan in the bridge, and I see lots of packet
copy.


See below:


# ovs-ofctl show br-int
OFPT_FEATURES_REPLY (xid=0x2): dpid:000072fe77bb5849
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src
mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
  1(vhuffc5b772-c6): addr:00:00:00:00:00:00
      config:     0
      state:      LINK_DOWN
      speed: 0 Mbps now, 0 Mbps max
  2(patch-tun): addr:7a:85:c5:7d:2f:da
      config:     0
      state:      0
      speed: 0 Mbps now, 0 Mbps max
  3(vhu88dab7aa-ae): addr:00:00:00:00:00:00
      config:     0
      state:      LINK_DOWN
      speed: 0 Mbps now, 0 Mbps max
  8(vhu29e6e817-63): addr:00:00:00:00:00:00
      config:     0
      state:      0
      speed: 0 Mbps now, 0 Mbps max
  LOCAL(br-int): addr:72:fe:77:bb:58:49
      config:     PORT_DOWN
      state:      LINK_DOWN
      current:    10MB-FD COPPER
      speed: 10 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0


# ovs-ofctl show br-tun
OFPT_FEATURES_REPLY (xid=0x2): dpid:00007e58c1f5b141
n_tables:254, n_buffers:256
capabilities: FLOW_STATS TABLE_STATS PORT_STATS QUEUE_STATS ARP_MATCH_IP
actions: output enqueue set_vlan_vid set_vlan_pcp strip_vlan mod_dl_src
mod_dl_dst mod_nw_src mod_nw_dst mod_nw_tos mod_tp_src mod_tp_dst
  1(patch-int): addr:56:36:bb:1e:ec:c7
      config:     0
      state:      0
      speed: 0 Mbps now, 0 Mbps max
  5(vxlan-c0a8c80b): addr:26:e9:2b:31:62:8b
      config:     0
      state:      0
      speed: 0 Mbps now, 0 Mbps max
  6(vxlan-c0a8c80c): addr:2a:07:0e:84:fd:8e
      config:     0
      state:      0
      speed: 0 Mbps now, 0 Mbps max
  LOCAL(br-tun): addr:7e:58:c1:f5:b1:41
      config:     PORT_DOWN
      state:      LINK_DOWN
      current:    10MB-FD COPPER
      speed: 10 Mbps now, 0 Mbps max
OFPT_GET_CONFIG_REPLY (xid=0x4): frags=normal miss_send_len=0



# ovs-vsctl show
57863254-3c79-4dc7-a6a0-277eb8c741f4
     Bridge br-dpdk
         Port br-dpdk
             Interface br-dpdk
                 type: internal
         Port "dpdk0"
             Interface "dpdk0"
                 type: dpdk
     Bridge br-int
         fail_mode: secure
         Port patch-tun
             Interface patch-tun
                 type: patch
                 options: {peer=patch-int}
         Port "vhu29e6e817-63"
             tag: 1
             Interface "vhu29e6e817-63"
                 type: dpdkvhostuser
         Port "vhuffc5b772-c6"
             tag: 2
             Interface "vhuffc5b772-c6"
                 type: dpdkvhostuser
         Port "vhu88dab7aa-ae"
             tag: 1
             Interface "vhu88dab7aa-ae"
                 type: dpdkvhostuser
         Port br-int
             Interface br-int
                 type: internal

     Bridge br-tun
         fail_mode: secure
         Port br-tun
             Interface br-tun
                 type: internal
         Port "vxlan-c0a8c80b"
             Interface "vxlan-c0a8c80b"
                 type: vxlan
                 options: {df_default="true", in_key=flow,
local_ip="192.168.200.14", out_key=flow, remote_ip="192.168.200.11"}
         Port "vxlan-c0a8c80c"
             Interface "vxlan-c0a8c80c"
                 type: vxlan
                 options: {df_default="true", in_key=flow,
local_ip="192.168.200.14", out_key=flow, remote_ip="192.168.200.12"}
         Port patch-int
             Interface patch-int
                 type: patch
                 options: {peer=patch-tun}
     ovs_version: "2.6.0"


Flow Table:

br-int:

ovs-ofctl add-flow br-int "in_port=2,action=output:8"
I suspect that the above flow is preventing the mac learning from happening.

If you output directly to a specific port, OVS will not perform any mac 
learning.

Could you maybe try with normal action here, instead of outputting directly to 
port 8?


Yes, I've tried to do that, and seen the mac from patch port shown in fdb table, but the VM will never received the arp reply packet, don't know why. Maybe because local VM is in vlan 1(tag 1), but patch port does not has a vlan ID.


Then I changed the flow table to:
    ovs-ofctl add-flow br-int "nw_dst=10.0.0.218,action=output:8"

IP: 10.0.0.218 is local VM IP. The guest could receive the arp packets, but fdb table will only have one entry with local VM, remote VM's mac does not exist.


So if using flow rules, the l2 switch will never learn the mac right?

Don't know why patch port using "normal" action will block the arp packets


ovs-ofctl add-flow br-int "in_port=8,action=output:normal"


br-tun

ovs-ofctl add-flow br-tun
"in_port=1,action=set_tunnel:0x46,strip_vlan,output:6"

ovs-ofctl add-flow br-tun "in_port=6,action=output:1"


VM using port 8(vhu29e6e817-63)  as vhost-user port:

(creat hugepage first)

/usr/libexec/qemu-kvm -machine pc,accel=kvm,usb=off  -cpu host -m 2048
-smp 2,sockets=2,cores=1,threads=1 -drive
file=/var/lib/nova/instances/_base/0fc2479281ab0a4ca901b7981122a180f843b2bf
-chardev socket,id=charnet0,path=/var/run/openvswitch/vhu29e6e817-63
-netdev type=vhost-user,id=hostnet0,chardev=charnet0 -device
virtio-net-pci,netdev=hostnet0,id=net0,mac=fa:16:3e:61:23:ed,bus=pci.0,addr=0x3
-object
memory-backend-file,id=ram-node0,prealloc=yes,mem-path=/dev/hugepages/libvirt/qemu,share=yes,size=2147483648,host-nodes=0,policy=bind
-numa node,nodeid=0,cpus=0-1,memdev=ram-node0  -vnc 0.0.0.0:0 -k en-us
-device cirrus-vga,id=video0,bus=pci.0,addr=0x2


In VM ping another VM in other hosts, which  using native OVS.

Then find in OVS-DPDK:

# ovs-appctl fdb/show br-int
  port  VLAN  MAC                Age
     8     1       fa:16:3e:61:23:ed    1


In OVS(another host, port 4 is patch port.):

  ovs-appctl fdb/show br-int
  port  VLAN  MAC                Age
     6     2       fa:16:3e:09:9d:bc    0
     4     2       fa:16:3e:61:23:ed    0


This issue will cause packets flooding in br-int.

Any sulotions?


--
Thanks,
Michael



--
Thanks,
Michael


_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev

Reply via email to