[ovs-discuss] Using ipv6_label match and dec_ttl action in flow rule produces errors

nm_r nm_r at directbox.com
Sat Sep 1 17:28:29 UTC 2018


>> On Fri, Aug 31, 2018 at 03:14:39PM +0200, nm_r at directbox.com wrote:
>> Hello
>>
>> When using an ovs flow which matches on an IPv6 flow label and also using
>> the 'dec_ttl' action before outputing the packet to a switch port, ovs
>> produces errors. When removing either of the two from the rule it works
>> correctly.
>>
>> The (simplified) flow was:
>>
>>
>> ovs-ofctl add-flow "ovs" \
>>     in_port=LOCAL,ipv6,ipv6_label=0x0000,actions=dec_ttl,output:"ovs_p1"
>>
>>
>> The flow rule is matched correctly (with trace and with real packets) and the
>> correspondent statistics counters on the flow rule are increased. But no packets
>> appear on the output port. Instead the following error messages can be found
>> in the ovs-vswitchd.log file (reformated for readability).
>>
>>
>> 2018-08-31T11:02:38.891Z|00614|dpif(handler63)|WARN|system at ovs-system:
>>     failed to put[create] (Invalid argument) ufid:55a3aa72-a988-432a-a21f-ad4efde57db7
>>     recirc_id(0),dp_hash(0/0),skb_priority(0/0),in_port(1),skb_mark(0/0),
>>     ct_state(0/0),ct_zone(0/0),ct_mark(0/0),ct_label(0/0),
>>     eth(
>>         src=6e:de:2b:9d:82:4d,
>>         dst=00:01:bb:04:01:01),
>>         eth_type(0x86dd),
>>         ipv6(
>>             src=2001:db8:1000::100/::,
>>             dst=2001:db8:1000::1/::,
>>             label=0,
>>             proto=17/0,tclass=0x29/0,hlimit=64,frag=no),
>>         udp(src=2500/0,dst=2500/0),
>>     actions:set(ipv6(label=0,hlimit=63)),2
>>
>>
>> 2018-08-31T11:02:38.891Z|00615|dpif(handler63)|WARN|system at ovs-system:
>>     execute set(ipv6(label=0,hlimit=63)),2 failed
>>     (Invalid argument) on packet
>>         udp6,vlan_tci=0x0000,
>>         dl_src=6e:de:2b:9d:82:4d,dl_dst=00:01:bb:04:01:01,
>>         ipv6_src=2001:db8:1000::100,ipv6_dst=2001:db8:1000::1,
>>         ipv6_label=0x00000,
>>         nw_tos=40,nw_ecn=1,
>>         nw_ttl=64,
>>         tp_src=2500,tp_dst=2500,
>>         udp_csum:ef7c
>>     with metadata skb_priority(0),skb_mark(0),in_port(1) mtu 0
>>
>>
>> Tested on Ubuntu 16.04 LTS (64 bit kernel 4.4.0-134-generic) with ovs
>> version 2.9.0 and 2.10.0.
>>
>> I assume the correct behaviour should be a packet with IPv6 label 0 and a 1 less
>> ttl as on the input port.
> 
> Hmm, that's weird.
> 
> It's not a surprise that it takes both of the actions to produce this
> behavior.  Without an output, OVS won't bother changing the packet, and
> it's changing the packet that's apparently provoking the problem.
> 
> The action itself looks perfectly valid and I don't see anything in the
> datapath code that is intended to reject it.
> 
> Linux 4.4 is slightly old but OVS fully supported IPv6 since long before
> that.
> 
> Greg, do you have any idea?
> 
> .

I was wondering why the log shows two actions

"actions:set(ipv6(label=0,hlimit=63))"

as there is only one defined in the flow "dec_ttl"? The flow label
is only matched if its 0 so why set it to 0 again in the action?




More information about the discuss mailing list