[ovs-discuss] IGMP fields added to the flow structure causes problem?

Tony van der Peet Tony.vanderPeet at alliedtelesis.co.nz
Thu Apr 23 00:03:08 UTC 2015


I have been investigating some anomalous behaviour in a switch (developed by us, based on OpenVSwitch code). It appears that flows added as a result of receiving IGMP packets are never deleted. Here's one of the flows (this is a switch running a simple MAC learning application, so you don't see the upper level fields).

recirc_id(0),in_port(2),eth(src=38:60:77:8b:d9:0a,dst=01:00:5e:00:00:16),eth_type(0x0800),ipv4(frag=no), packets:26, bytes:2236, used:9.600s, actions:1,6,5,4,3

Here's a log message I'm seeing:

2015 Apr 23 12:33:23 awplus ovs-vswitchd: 02570|dpif(revalidator4)|WARN|system at ovs-system: failed to flow_del (No such file or directory)
 skb_priority(0),skb_mark(0),recirc_id(0),dp_hash(0),in_port(2),eth(src=38:60:77:8b:d9:0a,dst=01:00:5e:00:00:16),eth_type(0x0800),ipv4(src=10.33.22.24,dst=224.0.0.22,proto=2,tos=0xc0,ttl=1,frag=no)

Here's some debugging I added myself (not the same flow as above):

adding flow, hash=-212754412, dmac=01-00-5e-00-00-16, dp_hash=0
  00000000   00000000   00000000   00000000   00000000   00000000   00000000   00000000
  00000000   00000000   00000000   00000000   00000000   00000000   00000000   00000000
  00000000   00000000   00000000   00000002   01005e00   00163860   778bd90a   08000000
  00000000   00000000   00000000   00000000   00000000   00000000   00000000   00000000
  00000000   00000000   00000000   00000000   0a211618   e0000016   00c00102   00000000
  00000000   00000000   00000000   00000000   00000000   00000000   00000000  *00220000*
 *00000001*  00000000
deleting flow, lookup failed, hash=801760725, dmac=01-00-5e-00-00-16, dp_hash=0
  00000000   00000000   00000000   00000000   00000000   00000000   00000000   00000000
  00000000   00000000   00000000   00000000   00000000   00000000   00000000   00000000
  00000000   00000000   00000000   00000002   01005e00   00163860   778bd90a   08000000
  00000000   00000000   00000000   00000000   00000000   00000000   00000000   00000000
  00000000   00000000   00000000   00000000   0a211618   e0000016   00c00102   00000000
  00000000   00000000   00000000   00000000   00000000   00000000   00000000  *00000000*
 *00000000*  00000000

This is showing a hex dump of the relevant flow structures. the highlighted fields are obviously different, and happen to be these:

    ovs_be16 tp_src;            /* TCP/UDP/SCTP source port. */
    ovs_be16 tp_dst;            /* TCP/UDP/SCTP destination port. */
    ovs_be32 igmp_group_ip4;    /* IGMP group IPv4 address */
I have tracked this down (I believe) to the lack of support for these fields (for IGMP packets at least) in odp_flow_key_to_flow__ and odp_flow_key_from_flow__. Looking at some of the conversation around the original commits that added support for IGMP to the flow, I can see that some work may have been deferred, but there is some question as to whether we want this supported anyway. I would like to fix this issue if possible, but have some questions:

1 - is my analysis correct?
2 - is there more to fix than just the routines I mentioned? (I know, I should make the change and try it out, but it appears a bit more extensive than I first thought, including adding to enum ovs_key_attr, which I wouldn't do lightly.)
3 - is there something different I should be doing to fix my issue? (I have the option of not adding the flows in my dpif (a variant of dpif-netdev) which will solve the problem, but would possibly just be papering over this issue).

Note that I updated our OVS from GitHub in Sep/2014. I have checked and there don't appear to be any subsequent commits that would address this.

Thanks
Tony
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://openvswitch.org/pipermail/ovs-discuss/attachments/20150423/fdb95c03/attachment-0002.html>


More information about the discuss mailing list