0
votes

My questions is a flow doesn't hit the OpenFlow flow table although its property matches the table perfectly.


I did a small experiment by using mininet,ONOS, Iperf.

I want to see flow routing according to srcIP, dstIP, UDP, dstPort.

Therefore, I generated a UDP flow (srcIP=10.0.0.3, dstIP=10.0.0.2, dstPORT=50000)

and I add flow rules to each mininet switch by using ONOS REST api.

You can see two flow rules below the raw flow rules.

1)  cookie=0x4c0000ef7faa8a, duration=332.717s, table=0, n_packets=8974, 
n_bytes=557090858, idle_age=153, priority=65050,ip,nw_dst=10.0.0.2 
actions=output:4

2) cookie=0x4c0000951b3b33, duration=332.636s, table=0, n_packets=10, 
n_bytes=460,idle_age=168,priority=65111,udp,nw_src=10.0.0.3,nw_dst=10.0.0.2,
tp_dst=50000 actions=output:3

Although 2) flow rule have more match fields with higher priority, Most of packet in the flow hit 1) flow rule.

I used Wireshark for check whether traffic is generated properly. However there is no problem.(srcIP=10.0.0.3, dstIP=10.0.0.2, dstPORT=50000)

How can it happen? Could you give me a little hint for trouble shooting?

Thanks for reading!


nimdrak@nimdrak-VirtualBox:~$ sudo ovs-ofctl dump-flows s1
NXST_FLOW reply (xid=0x4):
 cookie=0x4c0000ef7faa8a, duration=332.717s, table=0, n_packets=8974, n_bytes=557090858, idle_age=153, priority=65050,ip,nw_dst=10.0.0.2 actions=output:4
 cookie=0x4c0000ef7fb20c, duration=332.679s, table=0, n_packets=127, n_bytes=36814, idle_age=305, priority=65050,ip,nw_dst=10.0.0.4 actions=output:3
 cookie=0x4c0000ef7f9b86, duration=332.736s, table=0, n_packets=518, n_bytes=102960, idle_age=138, priority=65050,ip,nw_dst=10.0.0.254 actions=output:5
 cookie=0x4c0000ef7fae4b, duration=332.698s, table=0, n_packets=270, n_bytes=49059, idle_age=138, priority=65050,ip,nw_dst=10.0.0.3 actions=output:2
 cookie=0x4c0000ef7fa6c9, duration=332.751s, table=0, n_packets=125, n_bytes=36646, idle_age=305, priority=65050,ip,nw_dst=10.0.0.1 actions=output:1
 cookie=0x10000487f5557, duration=348.362s, table=0, n_packets=285, n_bytes=23085, idle_age=66, priority=40000,dl_type=0x88cc actions=CONTROLLER:65535
 cookie=0x10000487f63a1, duration=348.362s, table=0, n_packets=285, n_bytes=23085, idle_age=66, priority=40000,dl_type=0x8942 actions=CONTROLLER:65535
 cookie=0x10000488ebd5d, duration=348.362s, table=0, n_packets=12, n_bytes=504, idle_age=148, priority=40000,arp actions=CONTROLLER:65535
 cookie=0x10000464443e2, duration=348.362s, table=0, n_packets=0, n_bytes=0, idle_age=348, priority=5,arp actions=CONTROLLER:65535
 cookie=0x4c0000951a5275, duration=332.671s, table=0, n_packets=0, n_bytes=0, idle_age=332, priority=65050,udp,nw_src=10.0.0.3,nw_dst=10.0.0.1,tp_dst=50000 actions=output:1
 cookie=0x4c0000951b3b33, duration=332.636s, table=0, n_packets=10, n_bytes=460, idle_age=168, priority=65111,udp,nw_src=10.0.0.3,nw_dst=10.0.0.2,tp_dst=50000 actions=output:3
1
Actually, I found hitting flow table work properly when decreasing UDP segment size. When I make a UDP segment having data about 63k, hitting flow table doesn't work properly. But making it 1400Bytes, hitting flow table work properly. However I don't know why it happens.nimdrak

1 Answers

0
votes

I solve this problem. the problem is related with UDP fragmentation

As I write the comment, I found only the small UDP datagram hit the flow table properly.

In other words, It is because the UDP datagram is so large.

I set the UDP datagram 63k. Then it is fragmented at IP layer.

Then the only first packet has UDP header information and only the packet hit the flow table properly, as I expected.

For solve this problem, I use the Jumbo frame which means OVS can handle the packet with larger MSS.

We should also set NIC MSS. (http://docs.openvswitch.org/en/latest/topics/dpdk/jumbo-frames/)

And we update OVS version above 2.6.0 (it will be better to use http://docs.openvswitch.org/en/latest/intro/install/general/ than other sites that we can google)

After setting Jumbo frame, we can see the flow table hitting works properly for larger UDP datagram.