Mike, thank you for taking the time to so thoroughly understand what is going 
on. See below for my responses marked as “>>”:

Fred

From: C. M. Heard <he...@pobox.com>
Sent: Monday, November 18, 2024 3:13 PM
To: Templin (US), Fred L <fred.l.temp...@boeing.com>
Cc: Gorry Fairhurst <go...@erg.abdn.ac.uk>; Joe Touch <to...@strayalpha.com>; 
Tom Herbert <t...@herbertland.com>; int-area <int-area@ietf.org>; 6man 
<i...@ietf.org>; TSVWG <ts...@ietf.org>
Subject: Re: [tsvwg] Re: UDP options [was IP Parcels and Advanced Jumbos (AJs)]

Fred,

I did some homework in the last few days, and I would describe your 
characterization of my comments as "under-informed" as being overly charitable 
:-(  My apologies for wasting your time and everyone else's. This 
tutorial<https://www.sipanda.io/post/segmentation-offload-and-protocols-let-s-be-friends>
 from Tom Herbert, along socket API documentation for 
Windows<https://learn.microsoft.com/en-us/windows/win32/winsock/ipproto-udp-socket-options>
 and Linux<https://man7.org/linux/man-pages/man7/udp.7.html>, made it amply 
clear what is going on: GSO and GRO are specialized  implementation techniques. 
In particular, the UDP variants, which are sometimes called USO and URO, allow 
an application to send or receive, in a single API call, a block of J 
datagrams, the first J-1 of which are all the same size L, with the Jth being 
no larger than the others. The sequence of packets that appear on the wire is 
not any different than what would have been sent had the application used J 
separate send API calls. USO and URO can be used independently by the two 
endpoints. When URO is used, the segment size L is attached to the packet's 
metadata when it is passed to the application so that upper layers can deduce 
the boundaries of the original UDP packets. The usage is sketched in Appendix D 
of draft-templin-6man-parcels2.

>> This is all correct so far.

If I (finally) understand this all correctly, the IP Parcels specification 
provides a means to package the sequence of UDP datagrams that would be created 
by the USO API inside of a single IPv4 or IPv6 packet. If that IPv4 or IPv6 
packet needs to be forwarded to a node that does not understand IP Parcels, it 
is converted into the same series of separately transmitted UDP datagrams that 
would be generated on the wire by USO today, except that a Parcel Parameters 
Option is appended to each of those UDP datagrams. The intent is that a 
receiving node that does not understand parcels or the Parcel Parameters Option 
would process those datagrams as it does today. URO should also work as it does 
today, provided that the presence of an options trailer does not interfere with 
URO as presently implemented (which as far as I know is an open question).
>> An important clarification – parcels may only be sent over paths in which 
>> all initial forwarding
>> nodes (possibly up to and including the final destination) recognize the 
>> parcel format. This
>> means that the path needs to be probed in advance to qualify it for parcel 
>> service before any
>> parcels can be sent. If the probe reaches an intermediate forwarding node 
>> that understands
>> parcels but is aware that the next hop does not, that forwarding node 
>> becomes the terminal
>> point for parcel transmissions and must transform any parcels into 
>> individual UDP packets
>> via packetization.

With that being said, I do have some comments about the treatment of UDP 
options in IP Parcels, plus some more general ones:

1.) The plan of placing the UDP options common to all UDP datagrams in the 
parcel in a trailer will surely work; I understand that the two bytes 
immediately preceding the end of the parcel, as indicated by the Parcel Payload 
Length, contain the option field length, and it is not part of the options. But 
it is not necessary to do this. The UDP options could just as easily be placed 
before or after the parcel integrity block. The only reasons UDP options go in 
a trailer in regular UDP datagrams is because there is no other place to put 
them and still be backward compatible with implementations that are unaware of 
UDP options. IP Parcels amount to a new protocol, and the layout of a parcel is 
not constrained by backward compatibility.

>> I get what you are saying, but I don’t like the idea of having a 
>> variable-length UDP options field immediately
>> following the Parcel Integrity Block. I would rather keep UDP options as a 
>> trailer the same as for ordinary
>> UDP/IP packets. Plus, the 2-octet UDP Option Length field is only necessary 
>> for parcels and AJs that
>> exceed 64KB, where adding an extra 2-octet trailer would impart very little 
>> overhead.

2.) If the intent is that IP Parcels for UDP will use the same API as USO, 
there seems to be an implicit assumption that there will be an extension of 
that API that will allow for specification of a set of UDP options common to 
all datagrams in the parcel. As Tom Herbert noted in an earlier message, 
whether or not things will play out this way is an open question. Indeed, as 
far as I can tell, the current UDP options draft (now in AD review) defines 
only one option -- TIME -- that would actually be useful in this context, and 
that option is not one of the ones that are mandatory to implement.

>> Yes, the UDP options would have to be either common to all segments 
>> (datagrams) in the parcel
>> or specific to only one of the segments. So, if we say for example that the 
>> options are specific to
>> the first segment in the parcel that still seems like a reasonable 
>> application of UDP options. If
>> other segments of the parcel really need to include their own specific UDP 
>> options, then they
>> can be packaged as the first segments of separate parcels.

3.) Perhaps I missed it, and I apologize if so, but I didn't see in 
draft-templin-6man-parcels2 what Next Header value would be placed in the IPv6 
extension header immediately preceding the parcel payload area (typically the 
extension header would be the Hop-by-Hop options header containing the IPv6 
Parcel Payload Option, but it could also be a Destination Options header if one 
followed the HbH Options header). That Next Header value should NOT be 6 (TCP) 
or 17 (UDP), because the IPv6 Payload Length is non-zero and the parcel payload 
is not laid out like a conventional TCP or UDP packet but is something else 
altogether, despite containing a notional TCP or UDP header. It is NOT 
sufficient to rely on the IPv6 Parcel Payload Option to let receivers know the 
difference, for a parcel-unaware receiver may well be configured to ignore and 
skip over any HbH Options Header or, if it is configured to process the HbH 
Options header, may not recognize the option and skip over it.

Having a unique Next Header value (or Protocol Number) to identify a parcel 
payload would ensure that a parcel-unaware receiver would not misinterpret a 
parcel as something else. I would strongly recommend that the draft be modified 
to specify this and to include an appropriate request to the IANA. Granted, it 
would be necessary to add something to the Parcel Payload Option or to the 
parcel payload itself to identify the protocol it carries. Note that the RFC 
2675 Jumbo Payload Option did not need this because the IPv6 Payload Length in 
that spec is zero, and receivers who do not implement that option would see an 
empty IPv6 payload and drop the packet.

>> I think there is an important point of clarification here – parcels and AJs 
>> may only be sent over
>> paths that have been pre-qualified to ensure that all forwarding nodes in 
>> the path recognize
>> and correctly process the constructs. There will never be a case where an 
>> intermediate system
>> or final destination is parcel-unaware and skips over the HBH options 
>> header. This allows the
>> HBH option Next Header value to encode TCP or UDP.

4.) Note that comments (1) and (3) above also apply to Advanced Parcels.

>> I think you meant to say “Advanced Jumbos (AJs)”?

5.) Given that the TCP or UDP  Parcel Parameters Option is expendable -- that 
is, correctness will not be sacrificed if it is ignored or omitted -- I need to 
question its utility. Noting that it is different in every packet, Tom's 
tutorial<https://www.sipanda.io/post/segmentation-offload-and-protocols-let-s-be-friends>
 suggests that it would interfere with existing TCP GRO implementations. For 
UDP GRO the question is open whether or not the presence of a UDP options 
trailer (aka non-empty surplus area) of any kind (constant or not) would 
interfere with packet coalescing, but it's a possibility. Should either of 
these be true, we may be better off to omit the Parcel Parameters Option 
altogether.

>> This is a fair point – existing  GRO implementations are already able to 
>> coalesce the UDP
>> datagrams sent by GSO in some fashion and deliver a multi-segment buffer to 
>> the receive
>> side socket buffer. But, there is currently nothing in the datagrams sent by 
>> GRO to indicate
>> an identification for the original multi-segment buffer nor the relative 
>> segment offset in the
>> original multi-segment buffer. This means that GRO could potentially deliver 
>> segments out
>> of their original order, or possibly even deliver  multi-segment buffers 
>> that include a different
>> packaging of segments than was originally intended by the GSO sender. So, 
>> the Parcel
>> Parameters Option addresses these two issues when the GRO node recognizes and
>> correctly processes the option.

Tom Herbert raised the question of compatibility with checksum offload, and I 
shall deal with that in another message.

Thanks and regards.

Mike Heard

On Fri, Nov 15, 2024 at 11:25 AM Templin (US), Fred L 
<fred.l.temp...@boeing.com<mailto:fred.l.temp...@boeing.com>> wrote:
Mike, your statement about not respecting datagram boundaries is incorrect and 
under-informed – that is not what is happening. If you want documentary 
evidence for GSO/GRO, it is found at www.kernel.org<http://www.kernel.org>.

From: C. M. Heard <he...@pobox.com<mailto:he...@pobox.com>>
Sent: Friday, November 15, 2024 10:48 AM
To: Templin (US), Fred L 
<fred.l.temp...@boeing.com<mailto:fred.l.temp...@boeing.com>>
Cc: Gorry Fairhurst <go...@erg.abdn.ac.uk<mailto:go...@erg.abdn.ac.uk>>; Joe 
Touch <to...@strayalpha.com<mailto:to...@strayalpha.com>>; Tom Herbert 
<t...@herbertland.com<mailto:t...@herbertland.com>>; int-area 
<int-area@ietf.org<mailto:int-area@ietf.org>>; 6man 
<i...@ietf.org<mailto:i...@ietf.org>>; TSVWG 
<ts...@ietf.org<mailto:ts...@ietf.org>>
Subject: [EXTERNAL] Re: [tsvwg] Re: UDP options [was IP Parcels and Advanced 
Jumbos (AJs)]

Fred,

Please provide documentary evidence that GSO/GRO implementations send UDP 
packets across the Internet without respecting the datagram boundaries set by 
the original sender and without breaking the applications layered on top of 
them.

Note the word "UDP" in the above.

Mike

On Fri, Nov 15, 2024 at 10:36 AM Templin (US), Fred L 
<fred.l.temp...@boeing.com<mailto:fred.l.temp...@boeing.com>> wrote:
GSO/GRO for UDP are widely deployed and widely used in modern Internetworking. 
There is no published RFC for them (yet), but popular implementations invoke 
them all the time in actual practice. So, the “reference” would be the source 
code of the popular implementations.

Fred

From: C. M. Heard <he...@pobox.com<mailto:he...@pobox.com>>
Sent: Friday, November 15, 2024 10:20 AM
To: Templin (US), Fred L 
<fred.l.temp...@boeing.com<mailto:fred.l.temp...@boeing.com>>
Cc: Gorry Fairhurst <go...@erg.abdn.ac.uk<mailto:go...@erg.abdn.ac.uk>>; Joe 
Touch <to...@strayalpha.com<mailto:to...@strayalpha.com>>; int-area 
<int-area@ietf.org<mailto:int-area@ietf.org>>; 6man 
<i...@ietf.org<mailto:i...@ietf.org>>; TSVWG 
<ts...@ietf.org<mailto:ts...@ietf.org>>
Subject: Re: [tsvwg] Re: UDP options [was IP Parcels and Advanced Jumbos (AJs)]

Fred,

Please provide a reference with evidence for that statement as it applies to 
UDP.

Mike


On Fri, Nov 15, 2024 at 10:00 AM Templin (US), Fred L 
<fred.l.temp...@boeing.com<mailto:fred.l.temp...@boeing.com>> wrote:
Hi Mike,

This is exactly what happens with Generic Segment Offload (GSO) and Generic 
Receive Offload (GRO) in real networks today. After a multi-segment GSO buffer 
is broken into individual IP packets during packetization, the receiver applies 
GRO to restore the multi-segment buffer if possible; otherwise, it delivers the 
individual IP packets to the upper layer. Each individual IP packet is an 
atomic unit that will be understood by upper layers even if it is not restored 
into the original multi-segment buffer originally prepared by GSO. This is the 
way GSO/GRO work today, and IP parcels does not change that.

Fred

From: C. M. Heard <he...@pobox.com<mailto:he...@pobox.com>>
Sent: Friday, November 15, 2024 9:36 AM
To: Templin (US), Fred L 
<fred.l.temp...@boeing.com<mailto:fred.l.temp...@boeing.com>>
Cc: Gorry Fairhurst <go...@erg.abdn.ac.uk<mailto:go...@erg.abdn.ac.uk>>; Joe 
Touch <to...@strayalpha.com<mailto:to...@strayalpha.com>>; int-area 
<int-area@ietf.org<mailto:int-area@ietf.org>>; 6man 
<i...@ietf.org<mailto:i...@ietf.org>>; TSVWG 
<ts...@ietf.org<mailto:ts...@ietf.org>>
Subject: [EXTERNAL] Re: [tsvwg] Re: UDP options [was IP Parcels and Advanced 
Jumbos (AJs)]

EXT email: be mindful of links/attachments.


Fred,

I very strongly disagree  with your statement that it is not an error to "it 
will instead deliver each of the individual IP packets to upper layers without 
restoring the parce."

That amounts to delivering PIECES of the UDP packet sent by the originator to 
the upper layer. This would be exactly equivalent to allowing a receiver that 
does not understand the UDP FRAG option to deliver the payload of each 
individual fragment to the upper layer. The UDP options draft  goes to 
considerable effort to ensure that this does not happen.

There is long-standing precedent that the boundaries of UDP datagrams are 
preserved during transmission across the Internet. Many if not all UDP-based 
protocols depend on that, explicitly or implicitly. I do not understand why 
this point is even considered open for discussion.

Mike

On Fri, Nov 15, 2024 at 8:26 AM Templin (US), Fred L 
<fred.l.temp...@boeing.com<mailto:fred.l.temp...@boeing.com>> wrote:
Hi Mike,

Thank you for looking and commenting. A UDP/IP parcel containing N segments 
that undergoes packetization somewhere along the path will arrive at the final 
destination as N individual IP packets, each containing a Parcel Parameters UDP 
option. If the destination recognizes the option, it will restore the N segment 
parcel within the kernel before delivering the entire parcel as a single unit 
to upper layers. If the destination does not recognize the option, it will 
instead deliver each of the individual IP packets to upper layers without 
restoring the parcel which is not an error. Very significantly, each of the 
individual IP packets can be dealt with as standalone units once packetization 
has been applied; it is just that if the receive-side does not apply 
restoration (i.e., GRO) the performance optimization will be lost at that end. 
So, I don’t think there is any problem to worry about.

Fred Templin

From: C. M. Heard <he...@pobox.com<mailto:he...@pobox.com>>
Sent: Thursday, November 14, 2024 4:55 PM
To: Templin (US), Fred L 
<fred.l.temp...@boeing.com<mailto:fred.l.temp...@boeing.com>>
Cc: Gorry Fairhurst <go...@erg.abdn.ac.uk<mailto:go...@erg.abdn.ac.uk>>; Joe 
Touch <to...@strayalpha.com<mailto:to...@strayalpha.com>>; int-area 
<int-area@ietf.org<mailto:int-area@ietf.org>>; 6man 
<i...@ietf.org<mailto:i...@ietf.org>>; TSVWG 
<ts...@ietf.org<mailto:ts...@ietf.org>>
Subject: Re: [tsvwg] Re: UDP options [was IP Parcels and Advanced Jumbos (AJs)]

Fred and WG participants,

I have finally freed up some cycles to read 
draft-templin-6man-parcels2-14<https://datatracker.ietf.org/doc/html/draft-templin-6man-parcels2-14>,
 and I have found some issues with it that need to be addressed with respect to 
its handling of UDP.

The big one -- if I have correctly understood what I have read -- is that it's 
possible for a single parcel of a parcellated UDP packet to be turned into a 
stand-alone UDP packet (see Section 
7.1<https://datatracker.ietf.org/doc/html/draft-templin-6man-parcels2#name-packetization-over-non-parc>)
 and delivered to an end system as such (see Section 
7.4<https://datatracker.ietf.org/doc/html/draft-templin-6man-parcels2#name-final-destination-restorati>).
 That packet would contain a Parcel Parameters UDP Option to tell the endpoint 
host that the packet is a parcel and not a complete UDP datagram, but the 
option kind is taken from the SAFE option space (KIND = 127; see 
draft-ietf-tsvwg-udp-options#section-10<https://datatracker.ietf.org/doc/html/draft-ietf-tsvwg-udp-options#section-10>).
 Legacy endpoints that do not understand UDP options will ignore that SAFE 
option and will deliver the parcel as if it were a complete UDP datagram. That, 
to my mind, is completely unacceptable. Unlike TCP, which is a byte-stream 
protocol in which segment boundaries have no meaning for the upper layer, UDP 
is a datagram protocol in which message boundaries are meaningful to the upper 
layer. The protocol has a contract with the upper layer to deliver a message as 
it was submitted or not at all. Delivering a parcel in a manner that can be 
misinterpreted as a complete datagram violates that contract.

It is possible to repair this defect by making the Parcel Parameters Option, or 
something with equivalent functionality, into an UNSAFE option. My suggestion 
would be to define an UNSAFE version of the existing FRAG option (see 
draft-ietf-tsvwg-udp-options#section-11.4<https://datatracker.ietf.org/doc/html/draft-ietf-tsvwg-udp-options#section-11.4>)
 -- let's call it UFRAG -- that would allow for packet sizes greater than 
65,535 bytes. The same option could be used to send singleton advanced jumbo 
packets as atomic fragments. This would avoid any need to modify the base UDP 
and UDP Options specifications.

Additionally: during the review of 
draft-ietf-tsvwg-udp-options<https://datatracker.ietf.org/doc/html/draft-ietf-tsvwg-udp-options>,
 Joe Touch correctly pointed out that RFC 
2675<https://datatracker.ietf.org/doc/html/rfc2675> (and its predecessor RFC 
2147<https://datatracker.ietf.org/doc/html/rfc2147>) failed to note that it 
updated RFC 768<https://datatracker.ietf.org/doc/html/rfc768>. Similar concerns 
apply to TCP. If this draft foes forward, it should note that it updates the 
UDP and TCP specifications, and it should get buy-in from TSVWG and TCPM.

Thanks and regards,

Mike Heard





On Sun, Sep 29, 2024 at 3:51 PM C. M. Heard 
<he...@pobox.com<mailto:he...@pobox.com>> wrote:
Fred,

I currently hold the editing pen for the changes to the UDP Options draft that 
have been requested prior to the shepherd report, and my intention is to remain 
silent about how, if at all, IP Parcels and Advanced Jumbos (AJs) will support 
UDP Options.

I'll provide comments on the IP Parcels and Advanced Jumbos work at a later 
date, when I have spare intellectual cycles to fully comprehend the contents of 
draft-templin-6man-parcels2. At this point I must confess that, like Brian, I 
do not understand how a receiver will locate the options trailer in the case of 
an IP Payload Length exceeding 65535. Like Joe, I think it would be better to 
put the options just after the UDP header and make a new UNSAFE option to 
delimit the position where the options end and the user data begins.. But that 
discussion (and the corresponding update to the UDP options draft) can occur 
when it is ripe; IMO that is not the case at this time.

Respectfully,

Mike Heard

On Sun, Sep 29, 2024 at 3:07 PM Templin (US), Fred L 
<Fred.L.Templin=40boeing....@dmarc.ietf.org<mailto:40boeing....@dmarc.ietf.org>>
 wrote:
IP parcels and Advanced Jumbos (AJs) of all sizes ranging from 1 to 2^32 are 
now eligible
for using UDP options. This is just one way in which they offer a better 
service than RFC2675
Jumbograms, but there are also many others.

Joe, you can either note this in your draft or just leave it be and let my 
draft do an
“updates UDP options”.

Thank you - Fred

From: Brian Carpenter 
<brian.e.carpen...@gmail.com<mailto:brian.e.carpen...@gmail.com>>
Sent: Saturday, September 28, 2024 2:20 AM
To: Gorry (erg) <go...@erg.abdn.ac.uk<mailto:go...@erg.abdn.ac.uk>>
Cc: Joe Touch <to...@strayalpha.com<mailto:to...@strayalpha.com>>; Templin 
(US), Fred L <fred.l.temp...@boeing.com<mailto:fred.l.temp...@boeing.com>>; Tim 
Chown <tim.ch...@jisc.ac.uk<mailto:tim.ch...@jisc.ac.uk>>; Internet Area 
<Int-area@ietf.org<mailto:Int-area@ietf.org>>; IPv6 List 
<i...@ietf.org<mailto:i...@ietf.org>>; tsvwg IETF list 
<ts...@ietf.org<mailto:ts...@ietf.org>>
Subject: [EXTERNAL] Re: [tsvwg] Re: UDP options [was IP Parcels and Advanced 
Jumbos (AJs)]

EXT email: be mindful of links/attachments.


That works for me..

(via tiny screen & keyboard)
Regards,
        Brian Carpenter

On Sat, 28 Sept 2024, 19:08 Gorry (erg), 
<go...@erg.abdn.ac.uk<mailto:go...@erg.abdn.ac.uk>> wrote:
See below

> On 28 Sep 2024, at 04:05, Brian E Carpenter 
> <brian.e.carpen...@gmail.com<mailto:brian.e.carpen...@gmail.com>> wrote:
>
> Joe,
> On 28-Sep-24 03:13, to...@strayalpha.com<mailto:to...@strayalpha.com> wrote:
>>>> On Sep 27, 2024, at 7:58 AM, Templin (US), Fred L 
>>>> <Fred.L.Templin=40boeing....@dmarc.ietf.org<mailto:40boeing....@dmarc.ietf.org>>
>>>>  wrote:
>>>
>>>> Indeed. But if sendmsg() and recvmsg() can and do generate RFC2675 
>>>> packets, it means that any discussion of obsoleting RFC2675 should be
>>>> off the table.
>>>
>>> No one that I know of has suggested obsoleting RFC2675 - my documents do 
>>> not say "obsoletes" (nor even "updates”).
>> That approach to UDP jumbo grams is incompatible with UDP options.
>> And yes, there was a proposal to move that RFC to historic:
>> Jones, T., G. Fairhurst, "Change Status of RFC 2675 to Historic," 
>> draft-jones-6man-historic-rfc2675, May 2019.
>> We COULD have a new option with a longer length, but that’s not in our 
>> baseline draft.
>
> Wouldn't that be tricky, because the options follow the whole payload as I 
> understand it? So a JumboUDPgram has to be received in full, however big it 
> is, before the option saying that it's a jumbo can be received and 
> interpreted.
>
> Where the udp-options draft says:
>
>>> The technique has been proposed for deprecation [Jo19].
>
> I think you'd better change it to something like:
>
> The technique is known to be in active use in special situations, so cannot 
> reasonably be deprecated. However, users of this technique cannot 
> simultaneously use UDP options.
>
>    Brian
>
I do not think the I-D needs to say anything about the deployment status of 
jumbograms, that another topic.

I suggest if people wish, we just say that  users of this technique can or 
cannot simultaneously use UDP options.

Gorry
>
>
_______________________________________________
Int-area mailing list -- int-area@ietf.org
To unsubscribe send an email to int-area-le...@ietf.org

Reply via email to