Hi Eduard, >> - links NEVER *generate* ICMPs >> - routers and hosts *generate* ICMPs > Why virtual link could not send ICMP PTB (like on a physical link)?
The short answer (IMHO) is "yes, but the host or router generates the ICMP PTB." There's a subtle distinction here that better supports the link-attached-to-host case, where an ICMP PTB may be counterproductive. Starting with a router case, suppose that a large packet arrives at a router whose forwarding table determines that the next hop is a virtual link that encapsulates the packet to send in a tunnel. The router checks the MTU for that virtual link (tunnel EMTU_R), determines that the packet is too large to send, and the router generates an ICMP PTB to report that. This works the same way for a physical link that just sends the packet (MTU that is checked is that of the physical link) – in both cases the router generates an ICMP PTB based on link (interface) information before attempting to send the packet on that link. The host case enables a host device driver or network stack to deal with this situation without forcing an ICMP PTB to be generated and parsed. Starting with the physical link case – attempting to send a packet that's too large for the NIC to send generates an error that propagates back up the host network stack – forcing generation of an ICMP PTB in this case may be counterproductive. Exactly where that error is generated may depend on how the network stack and NIC are implemented – the error could originate from the NIC itself, the NIC device driver, or a higher layer of the network stack that checks the link MTU before the packet is handed off to the NIC device driver. For a software encapsulation implementation of a virtual link, the MTU (tunnel EMTU_R) gets checked at or above the network stack layer that does the encapsulation. If there's a software router embedded in the host (e.g., virtual switch with IP forwarding functionality), that router could generate an ICMP PTB based on the error or on directly checking the link MTU. Thanks, --David From: Int-area <[email protected]> On Behalf Of Vasilenko Eduard Sent: Wednesday, March 24, 2021 4:05 PM To: Joseph Touch Cc: [email protected]; int-area Subject: Re: [Int-area] Proxy function for PTB messages on the tunnel end [EXTERNAL EMAIL] Hi Joseph, You have presented below (and in many other messages) a long list of policies (extensive usage of “SHOULD”, “NEVER”, “MUST”) That are new – would change how current tunnels operate And are not justified by any reasoning. It is religion, not technology. Why virtual link could not send ICMP PTB (like on a physical link)? Just because… it is “unsolicited”. But one moment – any other PTB is unsolicited too - It is an event. You have not answered any of my questions – you continue to promote the solution from the draft-ietf-intarea-tunnels putting some excerpts in a different order. PS: I am especially sorry that draft-ietf-intarea-tunnels would scrape the best tunneling RFC that we have for IPv6. RFC 2473 was really good. Eduard From: Joseph Touch [mailto:[email protected]] Sent: Wednesday, March 24, 2021 10:01 PM To: Vasilenko Eduard <[email protected]<mailto:[email protected]>> Cc: [email protected]<mailto:[email protected]>; int-area <[email protected]<mailto:[email protected]>> Subject: Re: Proxy function for PTB messages on the tunnel end Two points: On Mar 24, 2021, at 7:59 AM, Vasilenko Eduard <[email protected]<mailto:[email protected]>> wrote: It would invalidate all tunneling implementations. It is not compatible with any one of them. PMTUD is killed. Revolution. PMTUD is effectively dead, so if you’re worried about it, you’re 20+ years too late - as per the RFCs I’ve already cited. All complaints against RFC 2473 are minor (if right), Except this one that is definitely wrong: o Tunnel ingress issues ICMPs This is a violation of RFC792 and 8200; the ICMPs issued are that of routers, not links. If the ingress is at the source host, these ICMPs would come from a device that is not a router. ICMP PTB is very important to deliver to the traffic source. I’m saying something very specific: - tunnels are links - links NEVER *genenerate* ICMPs - routers and hosts *generate* ICMPs based on what happens inside them, e.g,, to their processes and links So the question is “under what conditions does a link cause a router/host to generate an ICMP?” There should be no unsolicited ICMPs, i.e., routers/hosts NEVER generate ICMPs unless in reaction to a packet being sent or received. PTB means “I cannot send the packet over this link”. Not path - link. There is no PTB for a path; the assumption is that one link of a path that fails will send the ICMPs back to the source. For a tunnel, when can it NOT send a packet? - only when that packet is larger than the tunnel EMTU_R (i.e., egress received max, reassembled if reassembly is supported) A packet that can be fragmented and traverse a tunnel is not too big. It’s “bigger than you might like” or “bigger than desired”, but there is no ICMP to indicate that sort of ‘soft’ (non failure) error. So what should happen: - tunnels ingress should know and update (if changing) the tunnel EMTU_R value - routers/hosts should use EMTU_R as the tunnel MTU again, because the tunnel path MTU is a preference; the tunnel EMTU_R is the actual strict limit - routers/hosts sending packets over a tunnel generate ICMP PTBs as needed again, the router/host generates the message, not the tunnel ingress this happens when the router/host tries to send a packet over out that tunnel interface that is larger than the tunnel MTU So this all works, as long as ICMPs are relayed. Draft-tunnels does not deprecate this behavior. It describes it and explains why this is the correct behavior. Tunnel ingresses that relay PTBs inside are broken; they fail in ways they do not need to. That is the true error. Joe
_______________________________________________ Int-area mailing list [email protected] https://www.ietf.org/mailman/listinfo/int-area
