Hi Jarno,

2016-12-02, Jarno Rajahalme:

2016-11-29T14:44:40.126Z|00001|odp_util(revalidator45)|WARN|commit_set_ipv4_action
assert would fail....
2016-11-29T14:44:40.126Z|00002|odp_util(revalidator45)|WARN| base_flow: ip,in_port=5,dl_vlan=3,dl_vlan_pcp=0,dl_src=fa:16:3e:33:f7:fe,dl_dst=00:00:5e:00:43:64,nw_src=0.0.0.0,nw_dst=0.0.0.0,nw_proto=0,nw_tos=0,nw_ecn=0,nw_ttl=0 2016-11-29T14:44:40.126Z|00003|odp_util(revalidator45)|WARN| flow: tcp,in_port=5,dl_vlan=3,dl_vlan_pcp=0,dl_src=fa:16:3e:33:f7:fe,dl_dst=00:00:5e:00:43:64,nw_src=10.0.1.22,nw_dst=10.0.0.3,nw_tos=0,nw_ecn=0,nw_ttl=64,tp_src=53295,tp_dst=8080,tcp_flags=psh|ack 2016-11-29T14:44:40.126Z|00004|odp_util(revalidator45)|WARN| masks: recirc_id=0xffffffff,reg0=0xffffffff,in_port=4294967295,dl_vlan=4095,dl_vlan_pcp=7,dl_src=ff:ff:ff:ff:ff:ff,dl_dst=ff:ff:ff:ff:ff:ff,dl_type=0xffff 2016-11-29T14:44:40.126Z|00005|odp_util(revalidator45)|WARN| actions: set(ipv4(src=10.0.1.22,dst=10.0.0.3,ttl=63)),set(eth(src=b8:2a:72:de:1b:e3,dst=00:17:cb:79:2c:01)),push_mpls(label=410384,tc=0,ttl=63,bos=1,eth_type=0x8847),9,set(eth(src=fa:16:3e:33:f7:fe,dst=00:00:5e:00:43:64)),pop_mpls(eth_type=0x800),push_vlan(vid=3,pcp=0),1

push_mpls clears L3/L4, while pop_mpls re-populates them, and then processing the output to port 1 hits the assert?

That's what I'm thinking too.

Jarno, is this something you have time to look into?  It'd be great, if
you do.  I'm way behind.

I’m looking at this.

Based on the trace given it seems that:
1. Packet is received on br-int port 32, which outputs it via NORMAL action over a patch port to another bridge. The only patch-port on br-int is 2 (patch-tun). The NORMAL action adds dl_vlan=1. 2. br-tun receives the packet on in_port 1 (patch-int), and outputs it on it’s port 2 (patch-to-mpls) 3. br-mpls receives the packet on it’s in_port 2 (patch-to-tun), does pop_vlan, and outputs to it’s port 21 (ipvpn-pp-out), which is also an patch port. 4. br-mpls (?) receives the packet on it’s in_port 20 (ipvpn-pp-in), does dec_ttl,push_mpls:0x8847,load:0x644c0->OXM_OF_MPLS_LABEL[],set_field:b8:2a:72:de:1b:e3->eth_src,set_field:00:17:cb:79:2c:01->eth_dst,output:1

Yes, step 4 is br-mpls receiving from a patch-port that has both of its ends in br-mpls.



All this generates a megaflow: set(ipv4(src=10.0.1.23,dst=10.0.0.3,ttl=63)),set(eth(src=b8:2a:72:de:1b:e3,dst=00:17:cb:79:2c:01)),push_mpls(label=410816,tc=0,ttl=63,bos=1,eth_type=0x8847),9

This is only the beginning part of the trouble-some megaflow, in which br-int sends the packet also to another port (vlan 3), and as part of that pops the MPLS and restores the original ethernet addresses. Maybe this would happen with the trace too, if you flushed MACs before the trace?


Yes, I'd think so.
I'll try that later today.


The patch ports 21 and 20 appear to be in the same bridge and patched to each other. Is this the case?

Yes.
You'll probably tell me it that it's surprising; it's a solution we found quite a while ago to keep track of the VPN instance in which the packet is to be processed, but we're now implementing a solution using registers instead.


The crashing megaflow has in_port=5,dl_vlan=3. Is this also on br-int?


Sorry, I should have mentioned that the crash dump comes from a previous run different from the one for which I provided dump-flows/show commands output.

The in_port on  the crashing flow is a qvoXXXX port plugged on br-int.



Also, OVS 2.6 is a little bit less aggressive about avoiding recirculation after mpls operations, and I’d be interested to know if your case fails the same way with OVS 2.6?

I didn't succeed in compiling OVS 2.6 on this lab (Trusty).
Is recirculation involved in the crashing flow ?

-Thomas

_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to