2016-10-13 19:28 GMT+02:00 Géza Gémes <geza.ge...@gmail.com>:

> Hi,
>
> Sorry for cross-posting, but I feel this might be an interesting topic for
> the dev list as well.
>
> I've recreated my setup with qemu VM instead of lxc container and the
> situation is the same.
> Summary of my setup:
> Ovs compiled with dpdk (from ubuntu-cloud-archive/newton) deployed on a
> libvirt VM having 3 network connections to a shared network:
> [image: Szövegközi kép 3]
> I've set up two bridges: dpdk-br0 with dpdk and non-dpdk-br1 with kernel
> datapath each having an interface to the host provided network. For both
> bridges only the normal action is present, no flows were defined.
>
I forgot to mention, that intentionally I didn't use dpdkvhostuser ports
even with the dpdk datapath bridge as the problem I try to investigate is
whether there can be traffic in this scenario.

> If the qemu VM is connected to the kernel datapath bridge all traffic
> passes between the host and the internal VM. If it is connected to the dpdk
> bridge, udp and icmp traffic goes through, but tcp traffic does not.
>
> Could you please explain this behavior?
>
> Thank you in advance!
>
> Cheers,
>
> Geza
>
> 2016-10-11 21:18 GMT+02:00 Geza Gemes <geza.ge...@gmail.com>:
>
>> On 10/11/2016 04:35 PM, Chandran, Sugesh wrote:
>>
>>>
>>> /Regards/
>>>
>>> /_Sugesh/
>>>
>>> *From:*Geza Gemes [mailto:geza.ge...@gmail.com]
>>> *Sent:* Tuesday, October 11, 2016 2:34 PM
>>> *To:* Chandran, Sugesh <sugesh.chand...@intel.com>;
>>> discuss@openvswitch.org
>>> *Subject:* Re: [ovs-discuss] Behavior of netdev (dpdk) bridges with
>>> non-dpdkvhostuser ports
>>>
>>> On 10/11/2016 10:45 AM, Chandran, Sugesh wrote:
>>>
>>>     Hi Geza,
>>>
>>>     /Regards/
>>>
>>>     /_Sugesh/
>>>
>>>     *From:*discuss [mailto:discuss-boun...@openvswitch.org] *On Behalf
>>>     Of *Geza Gemes
>>>     *Sent:* Sunday, October 9, 2016 5:30 PM
>>>     *To:* discuss@openvswitch.org <mailto:discuss@openvswitch.org>
>>>     *Subject:* [ovs-discuss] Behavior of netdev (dpdk) bridges with
>>>
>>>     non-dpdkvhostuser ports
>>>
>>>     Hi,
>>>
>>>     I've created a libvirt/KVM VM  with Ubuntu 16.04 for experimenting
>>>     with OVS 2.6 and DPDK 16.07 (from ubuntu cloud archive, newton),
>>>     it has a number of NICs, out of which I've kept one for a kernel
>>>     (ens16) and one for a DPDK (dpdk0) datapath.
>>>
>>>     The bridge setup without virtual NICs:
>>>
>>>     #ovs-vsctl show
>>>
>>>     ef015869-3f47-45d4-af20-644f75208a92
>>>
>>>         Bridge "dpdk-br0"
>>>
>>>             Port "dpdk-br0"
>>>
>>>                 Interface "dpdk-br0"
>>>
>>>                     type: internal
>>>
>>>             Port "dpdk0"
>>>
>>>                 Interface "dpdk0"
>>>
>>>                     type: dpdk
>>>
>>>         Bridge "non-dpdk-br1"
>>>
>>>             Port "ens16"
>>>
>>>                 Interface "ens16"
>>>
>>>             Port "non-dpdk-br1"
>>>
>>>                 Interface "non-dpdk-br1"
>>>
>>>                     type: internal
>>>
>>>         ovs_version: "2.6.0"
>>>
>>>     I've created an lxc container (I'm using the lxc daily ppa) with
>>>     the following config:
>>>
>>>     # grep -v ^# /var/lib/lxc/ovsdpdkbr/config
>>>
>>>     lxc.include = /usr/share/lxc/config/ubuntu.common.conf
>>>
>>>     lxc.rootfs = /var/lib/lxc/ovsdpdkbr/rootfs
>>>
>>>     lxc.rootfs.backend = dir
>>>
>>>     lxc.utsname = ovsdpdkbr
>>>
>>>     lxc.arch = amd64
>>>
>>>     lxc.network.type = veth
>>>
>>>     lxc.network.link = dpdk-br0
>>>
>>>     lxc.network.flags = up
>>>
>>>     lxc.network.hwaddr = 00:16:3e:0c:c3:69
>>>
>>>     lxc.network.veth.pair = veth-dpdk
>>>
>>>     Started the lxc container and expected to have no connectivity as
>>>     lxc is not aware of the bridge being netdev:
>>>
>>>     # ovs-vsctl show
>>>
>>>     ef015869-3f47-45d4-af20-644f75208a92
>>>
>>>         Bridge "dpdk-br0"
>>>
>>>             Port "dpdk-br0"
>>>
>>>                 Interface "dpdk-br0"
>>>
>>>                     type: internal
>>>
>>>             Port veth-dpdk
>>>
>>>                 Interface veth-dpdk
>>>
>>>             Port "dpdk0"
>>>
>>>                 Interface "dpdk0"
>>>
>>>                     type: dpdk
>>>
>>>         Bridge "non-dpdk-br1"
>>>
>>>             Port "ens16"
>>>
>>>                 Interface "ens16"
>>>
>>>             Port "non-dpdk-br1"
>>>
>>>                 Interface "non-dpdk-br1"
>>>
>>>                     type: internal
>>>
>>>         ovs_version: "2.6.0"
>>>
>>>     The strange thing is, that it has got an IP address over eth0:
>>>
>>>     $ ifconfig eth0
>>>
>>>     eth0      Link encap:Ethernet  HWaddr 00:16:3e:0c:c3:69
>>>
>>>               inet addr:192.168.122.215  Bcast:192.168.122.255
>>>      Mask:255.255.255.0
>>>
>>>               inet6 addr: fe80::216:3eff:fe0c:c369/64 Scope:Link
>>>
>>>               UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
>>>
>>>               RX packets:17 errors:0 dropped:0 overruns:0 frame:0
>>>
>>>               TX packets:11 errors:0 dropped:0 overruns:0 carrier:0
>>>
>>>               collisions:0 txqueuelen:1000
>>>
>>>               RX bytes:2768 (2.7 KB)  TX bytes:1374 (1.3 KB)
>>>
>>>      and is able to ping the host:
>>>
>>>     ubuntu@ovsdpdkbr:~$ ping -c 1 192.168.122.1
>>>
>>>     PING 192.168.122.1 (192.168.122.1) 56(84) bytes of data.
>>>
>>>     64 bytes from 192.168.122.1 <http://192.168.122.1>: icmp_seq=1
>>>     ttl=64 time=0.290 ms
>>>
>>>     --- 192.168.122.1 ping statistics ---
>>>
>>>     1 packets transmitted, 1 received, 0% packet loss, time 0ms
>>>
>>>     rtt min/avg/max/mdev = 0.290/0.290/0.290/0.000 ms
>>>
>>>     And the host is also able to ping the container:
>>>
>>>     $ ping -c 1 192.168.122.215
>>>
>>>     PING 192.168.122.215 (192.168.122.215) 56(84) bytes of data.
>>>
>>>     64 bytes from 192.168.122.215 <http://192.168.122.215>: icmp_seq=1
>>>     ttl=64 time=0.265 ms
>>>
>>>     --- 192.168.122.215 ping statistics ---
>>>
>>>     1 packets transmitted, 1 received, 0% packet loss, time 0ms
>>>
>>>     rtt min/avg/max/mdev = 0.265/0.265/0.265/0.000 ms
>>>
>>>     But while sshd listens in the container:
>>>
>>>     root@ovsdpdkbr:~# netstat -tunap
>>>
>>>     Active Internet connections (servers and established)
>>>
>>>     Proto Recv-Q Send-Q Local Address           Foreign Address
>>>   State PID/Program name
>>>
>>>     tcp        0      0 0.0.0.0:22 <http://0.0.0.0:22>
>>>  0.0.0.0:*               LISTEN  179/sshd
>>>
>>>     tcp6       0      0 :::22           :::*                    LISTEN
>>>      179/sshd
>>>
>>>     udp        0      0 0.0.0.0:68 <http://0.0.0.0:68>
>>>  0.0.0.0:* 147/dhclient
>>>
>>>     I cannot connect to it from the host:
>>>
>>>     ssh -v -v -v ubuntu@192.168.122.215 <mailto:ubuntu@192.168.122.215>
>>>
>>>     OpenSSH_6.6.1, OpenSSL 1.0.1f 6 Jan 2014
>>>
>>>     debug1: Reading configuration data /home/egzagme/.ssh/config
>>>
>>>     debug1: /home/egzagme/.ssh/config line 1: Applying options for
>>>     192.168.*.*
>>>
>>>     debug1: Reading configuration data /etc/ssh/ssh_config
>>>
>>>     debug1: /etc/ssh/ssh_config line 19: Applying options for *
>>>
>>>     debug2: ssh_connect: needpriv 0
>>>
>>>     debug1: Connecting to 192.168.122.215 [192.168.122.215] port 22.
>>>
>>>     Looks like ICMP and UDP packets go through somehow, but TCP does not.
>>>
>>>     */[Sugesh] Did you configure any static rules or its just normal
>>>     action in OVS?/*
>>>
>>>     */Can you please confirm what rules are being installed in the OVS
>>>     datapath? /*
>>>
>>>     */Have you tried ssh in container with different port than 22?/*
>>>
>>>     */Also is there any iptable rules that present in the host?/*
>>>
>>>     *//*
>>>
>>>
>>>     Could someone please explain the observed behavior?
>>>
>>>     Thank you in advance!
>>>
>>>     Cheers,
>>>
>>>     Geza
>>>
>>> Hi Sugesh,
>>>
>>> The packets shall be subject to the normal action only:
>>>
>>> # ovs-ofctl show dpdk-br0
>>> OFPT_FEATURES_REPLY (xid=0x2): dpid:00008e3a9f11d64e
>>> 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(dpdk0): addr:52:54:00:03:64:b1
>>>      config:     0
>>>      state:      0
>>>      current:    10GB-FD
>>>      advertised: FIBER
>>>      supported:  1GB-HD 1GB-FD 10GB-FD COPPER FIBER AUTO_PAUSE
>>>      peer:       10MB-FD 100MB-HD 100MB-FD 10GB-FD COPPER
>>>      speed: 10000 Mbps now, 10000 Mbps max
>>>  LOCAL(dpdk-br0): addr:8e:3a:9f:11:d6:4e
>>>      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
>>>
>>> I have no iptables set up on the host:
>>>
>>> # iptables -L
>>> Chain INPUT (policy ACCEPT)
>>> target     prot opt source               destination
>>> ACCEPT     tcp  --  anywhere anywhere             tcp dpt:domain
>>> ACCEPT     udp  --  anywhere anywhere             udp dpt:domain
>>> ACCEPT     tcp  --  anywhere anywhere             tcp dpt:bootps
>>> ACCEPT     udp  --  anywhere anywhere             udp dpt:bootps
>>>
>>> Chain FORWARD (policy ACCEPT)
>>> target     prot opt source               destination
>>> ACCEPT     all  --  anywhere             anywhere
>>> ACCEPT     all  --  anywhere             anywhere
>>>
>>> Chain OUTPUT (policy ACCEPT)
>>> target     prot opt source               destination
>>>
>>> On the other hand I have an other bridge, with kernel datapath and there
>>> connectivity of lxc containers works as expected. My question is how
>>> communication between an bridge with dpdk datapath and an lxc container not
>>> having a dpdkvhostuser port and not being backed by hugepages is supposed
>>>
>>> */[Sugesh] The ovs-vswitchd main thread will taken care of the kernel
>>> interfaces for the packet forwarding. The PMD threads are not involved in
>>> this packet handling, so hugepages./*
>>>
>>> */I am not very familiar with lxc OVS network setup. Definitely OVS
>>> forwards packets based on the configured rules when they  landed in either
>>> through kernel or DPDK managed interface. /*
>>>
>>> */You could verify whats happening in the ovs-dpdk data path using
>>> following commands/*
>>>
>>> *//*
>>>
>>> */ovs-appctcl dpctl/show –s netdev@ovs-netdev (watch these  to see the
>>> port stats)/*
>>>
>>> */ovs-appctl dpctl/dump-flows netdev@ovs-netdev/*
>>>
>>> *//*
>>>
>>> */Please have a look at the route table and arp in host for more
>>> debugging./*
>>>
>>> */In the above setup, /*192.168.122.1 */is the ip address assigned to
>>> the kernel interface ens16? So any packet destined for that subnet will
>>> forward to that interface than OVS? Is this assumption correct?/*
>>>
>>> *//*
>>>
>>> to work?
>>>
>>> Thank you!
>>>
>>> Cheers,
>>>
>>> Geza
>>>
>>> Hi,
>>
>> My network setup looks like:
>>
>>
>> Where the host network with the dhcp server listening at 192.168.122.1
>> has 192.168.122.0/24
>>
>> Ovs command:
>>
>> # ovs-appctl dpctl/show –s netdev@ovs-netdev
>> ovs-vswitchd: opening datapath –s failed (No such device)
>> netdev@ovs-netdev:
>>     lookups: hit:376 missed:21 lost:0
>>     flows: 4
>>     port 0: ovs-netdev (tap)
>>     port 1: dpdk0 (dpdk: configured_rx_queues=1, configured_tx_queues=1,
>> mtu=1500, requested_rx_queues=1, requested_tx_queues=3)
>>     port 2: dpdk-br0 (tap)
>>     port 3: veth-dpdk
>> ovs-appctl: ovs-vswitchd: server returned an error
>>
>> suggest some kind of error. Arp table in the VM contains the host. I've
>> also tried with ens16 removed from the kernel datapath bridge but with no
>> difference.
>>
>> Tomorrow I'll retry the setup with a qemu VM instead of an lxc container.
>>
>> Cheers,
>>
>> Geza
>>
>>
>>
>>
>
_______________________________________________
discuss mailing list
discuss@openvswitch.org
http://openvswitch.org/mailman/listinfo/discuss

Reply via email to