[ovs-discuss] Packets not forwarded to queues after hitting flows in OVS QoS

Ben Pfaff blp at ovn.org
Wed Dec 7 16:46:16 UTC 2016


On Wed, Dec 07, 2016 at 12:20:24PM +0100, Santhosh R P wrote:
> Hi,
> 
> The physical port (enp0s25) of the host and the tap devices (vnet0 and
> vnet1) of two hosted VMs are added to an OVS bridge named "test".
> 
>    ovs-vsctl show
>        Bridge test
>            Port test
>                Interface test
>                    type: internal
>            Port "vnet0"
>                Interface "vnet0"
>            Port "enp0s25"
>                Interface "enp0s25"
>            Port "vnet1"
>                Interface "vnet1"
>        ovs_version: "2.5.1"
> 
> I want to apply traffic shaping for the traffic leaving from these two VMs
> to an external machine over the internet. So, I created qos for enp0s25
> with two queues using,
> 
> ovs-vsctl  set port enp0s25 qos=@newqos -- --id=@newqos create qos
> type=linux-htb queues:1=@vnet0queue queues:2=@vnet1queue --
> --id=@vnet0queue create queue other-config:max-rate=100000000 --
> --id=@vnet1queue create queue other-config:max-rate=200000000
> 
> 
> QoS and queues are created as expected (both in OVS and TC).
> 
> 
> ovs-vsctl list qos
> 
>    _uuid               : 9e8b295d-13cf-4c18-9df6-f75809bb1184
> 
>    external_ids        : {}
> 
>    other_config        : {}
> 
>    queues              : {1=c9f1e852-9b29-4736-8b83-8ce1562be857,
> 2=3c61b22c-87a4-4380-96b5-822000d2bc94}
> 
>    type                : linux-htb
> 
> 
> ovs-ofctl -O OpenFlow13 queue-stats test
> 
>    OFPST_QUEUE reply (OF1.3) (xid=0x2): 3 queues
> 
>    port 1 queue 0: bytes=369596, pkts=1119, errors=0, duration=4294961079.
> 3744967296s
> 
>    port 1 queue 1: bytes=108, pkts=2, errors=0, duration=4294961079.
> 3744967296s
> 
>    port 1 queue 2: bytes=108, pkts=2, errors=0, duration=4294961079.
> 3744967296s
> 
> Then, as shown in the FAQ, I created flows to direct the traffic from VMs
> to these queues.
> 
> 
> ovs-ofctl add-flow test priority=2000,in_port=2,actions=set_queue:1,normal
> ovs-ofctl add-flow test priority=2000,in_port=3,actions=set_queue:2,normal
> 
> ovs-ofctl add-flow test priority=10,actions=normal
> 
> 
> The ofport of vnet0 and vnet1 are verified to 2 and 3 respectively
> (using: ovs-vsctl
> -- --columns=name,ofport list Interface) and the flows are configured
> correctly,
> 
> When I use iPerf3 from VM1 to an external IP, I could see that packet count
> is increasing in Port 2 (using: ovs-ofctl dump-ports test).
> 
> 
> The flows before the iPerf test looks like this,
> 
> 
> ovs-ofctl dump-flows test
> 
>     NXST_FLOW reply (xid=0x4):
> 
>     cookie=0x0, duration=7.439s, table=0, n_packets=0, n_bytes=0,
> idle_age=7, priority=2000,in_port=2 actions=set_queue:1,NORMAL
> 
>     cookie=0x0, duration=7.433s, table=0, n_packets=0, n_bytes=0,
> idle_age=7, priority=2000,in_port=3 actions=set_queue:2,NORMAL
> 
>     cookie=0x0, duration=6.263s, table=0, n_packets=55, n_bytes=17232,
> idle_age=0, priority=10 actions=NORMAL
> 
> 
> And after the iPerf test, looks like this (with packet counts increased in
> flow 1 and 3),
> 
> 
> ovs-ofctl dump-flows test
> 
>     NXST_FLOW reply (xid=0x4):
> 
>     cookie=0x0, duration=628.046s, table=0, n_packets=26200,
> n_bytes=1104961741, idle_age=2, priority=2000,in_port=2
> actions=set_queue:1,NORMAL
> 
>     cookie=0x0, duration=628.040s, table=0, n_packets=11, n_bytes=594,
> idle_age=14, priority=2000,in_port=3 actions=set_queue:2,NORMAL
> 
>     cookie=0x0, duration=626.870s, table=0, n_packets=203437,
> n_bytes=1118596590, idle_age=0, priority=10 actions=NORMAL (packet count
> here increased along with first flow in same magnitude)
> 
> But, the packets are not reaching the corresponding queues (verified in
> both OVS and TC), and no traffic shaping takes place. The default queue 0
> gets filled instead.
> 
> 
> On the other hand, the flows are hit, queues are filled and traffic shaping
> takes place if I use the dest IP address of iperf test as filter in the
> flow like this,
> 
> 
> ovs-ofctl add-flow test priority=2000,ip,nw_dst=134.60.64.159,
> actions=set_queue:1,normal
> ovs-ofctl add-flow test priority=2000,in_port=3,actions=set_queue:2,normal
> 
> ovs-ofctl add-flow test priority=10,actions=normal
> 
> 
> Using the src IP of VM1 or the port for VM1, hits the flows, but packets
> are not forwarded to the queue.
> 
> If this has something to do with, I used IP Masquerading in the host with
> private IPs for both VMs.
> 
> In ovs-vswitchd.log, there is no information other than added and deleted
> flows.
> 
> 
> What am I doing wrong here? Would be grateful to anyone who can help.

What's showing up in the kernel flows as displayed by "ovs-dpctl
dump-flows" while the test is running?


More information about the discuss mailing list