Thread (1 message) 1 message, 1 author, 2016-01-07

Re: [PATCH net 0/2] vxlan: Set a large MTU on ovs-created vxlan devices

From: Thomas Graf <hidden>
Date: 2016-01-07 18:40:42

On 01/07/16 at 06:50pm, Hannes Frederic Sowa wrote:
On 07.01.2016 18:21, Thomas Graf wrote:
quoted
On 01/07/16 at 08:35am, Jesse Gross wrote:
quoted
On Thu, Jan 7, 2016 at 3:49 AM, Thomas Graf [off-list ref] wrote:
quoted
A simple start could be to add a new return code for > MTU drops in
the dev_queue_xmit() path and check for NET_XMIT_DROP_MTU in
ovs_vport_send() and emit proper ICMPs.
That could be interesting. The problem in the past was making sure
that ICMPs that are generated fit in the virtual network appropriately
- right addresses, etc. This requires either spoofing addresses or
some additional knowledge about the topology that we don't currently
have in the kernel.
Are you worried about emitting an ICMP with a source which is not
a local host address?
We have uRPF enabled for IPv4 by default on all kernels. Thus if we generate
an IPv4 ICMP packet back with an error message it must have a source address
which the receiving kernel considers valid. Valid means that sending to the
source address would have used the same outgoing interface the ICMP error
came in from.
Agreed. I think this is given though as we would reverse the addresses
as icmp_send() already does:

        saddr = iph->daddr;
quoted
Can't we just use icmp_send() in the context of the inner header and
feed it to the flow table to send it back? It should be the same as
for ip_forward().
The bridge's ip address often has no valid path as seen from the end host
system receiving the icmp error, because the openvswitch is not really part
of the L3 forwarding chain.
I don't think the IP of the bridge ever comes into play. It shouldn't.
I'm not even sure what could be considered the address of the bridge
;-)
Faking the address from the packet (e.g. using the destination address of
the original packet) will make traceroute go nuts.
I think you are worried about an ICMP error from a hop which does not
decrement TTL. I think that's a good point and I think we should only
send an ICMP error if the TTL is decremented in the action list of
the flow for which we have seen a MTU based drop (or TTL=0).

I don't really see a difference between ip_forward(), some
sophisticated tc action or OVS. As soon as they decremented TTL and
perform L3 forwarding, then they should send out ICMP errors to allow
for proper PMTU.
Normally ethernet devices don't return icmp error messages. E.g. broken
jumbo frame configuration just leads to silent packet loss because the
packet is discarded before a router can handle it. Thus it would be best in
case of local ovs installation if the error is already transported back to
the client application via the network call stack. This might be very
difficult in case we enqueue the packet to a backlog queue and reschedule
softirqs. Probably we need some way of faking source addresses from bridges
now.... :/
I think the major complications comes from the assumption that OVS is
a bridge. This is not necessarily the case as stated above. If a flow
is doing L3 forwarding, we should send ICMPs as expected from a
router.
_______________________________________________
dev mailing list
dev@openvswitch.org
http://openvswitch.org/mailman/listinfo/dev
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help