> On Mar 11, 2024, at 12:42 PM, Brian E Carpenter <[email protected]>
> wrote:
>
> Hi Tommy,
>
> Responses in line:
>
> On 12-Mar-24 04:48, Tommy Pauly wrote:
>> Hi Brian,
>>> On Feb 16, 2024, at 11:53 AM, Brian E Carpenter
>>> <[email protected]> wrote:
>>>
>>> It's good to see this work advancing. I have a few comments:
>>>
>>> 1. Unless I've missed it, the terminology and notation only support IP
>>> addresses in their human-readable form. There are situations where an API
>>> user needs to manipulate addresses as binary objects. (The Python
>>> ipaddress.ip_address class is an example of how to handle this,
>>> with its .packed property.) How does the TAPS API expose this?
>> The IP addresses are not expected to be strings (although a concrete API
>> certainly may offer that option). The type is “defined" here:
>> https://www.ietf.org/archive/id/draft-ietf-taps-interface-25.html#section-1.1-17.5.1
>>
>> <https://www.ietf.org/archive/id/draft-ietf-taps-interface-25.html#section-1.1-17.5.1>
>> And used here:
>> https://www.ietf.org/archive/id/draft-ietf-taps-interface-25.html#section-6.1-11.1.1
>>
>> <https://www.ietf.org/archive/id/draft-ietf-taps-interface-25.html#section-6.1-11.1.1>
>> Note that this is just as an “address” type, not a string.
>> In the concrete API instantiation that we have at Apple, we allow this type
>> to be created either with a data blob or a string:
>> https://developer.apple.com/documentation/network/ipaddress
>> <https://developer.apple.com/documentation/network/ipaddress>
>
> That is fair enough, but in that case the citation in Section 1.1.
> 'Terminology and Notation': "IP Address: An IPv4 or IPv6 address [RFC5952]"
> is very confusing, because you aren't referring to the human-readable format
> in particular. Also, that RFC doesn't define the human-readable format for
> IPv4 addresses.
>
> For IP addresses as an abstraction, I think you need RFC 791 and RFC 4291. Or
> no citation at all.
Good point! Switching those references to RFC 791 and RFC 4291 makes sense
here, I think.
>
> The examples in 6.1. 'Specifying Endpoints' such as
> "RemoteSpecifier.WithIPAddress(192.0.2.21)" have the same problem. At the
> very least, you need to explain that you are using the human-readable format
> for readability, but that it's shorthand.
>
> This argument doesn't apply to WithHostName and WithPort because they are
> intrinsically typed. I see that in other places you use undefined
> abstractions like SourceAddress and GroupAddress and even QUIC. Maybe you
> need to use IPv6Address and IPv4Address, e.g.
> RemoteSpecifier.WithIPAddress(IPv4Address).
Yes, it can be made clear that these are taking the previously defined types,
not necessarily a human-readable format.
>
>>>
>>> 2. The same applies to interface names, which (as described in RFC 4007,
>>> where they are called Zone Identifiers) correspond to underlying interface
>>> indexes (integers). IPv6 addresses are actually {address, interface_index}
>>> 2-tuples - the interface index is not optional, it's just normally
>>> defaulted to zero. I think this property needs to be listed in section 1.1,
>>> not hidden away in section 6.1, with a citation of RFC 4007.
>> I don’t think I agree that an interface identifier needs a top-level type in
>> the API here. While in concrete API instantiations, it is useful to have an
>> interface object or identifier, the nature of the identifier can vary
>> depending on the operating system / platform / language, etc. The “common”
>> type is just a string, as we use it in 6.1, and the exact nature of a more
>> specific type depends on the platform.
>> This is similar to the PvD identification situation, described in
>> https://www.ietf.org/archive/id/draft-ietf-taps-interface-25.html#section-6.2.12-4.
>> The fact that the interface is technically present in an IPv6 address, but
>> defaults to zero, is a good example of how a higher-level API can make that
>> an optional field.
>
> But, and it's a big but, RFC4007 makes the support of a default optional (a
> blunder IMHO) and the result is that only some o/s support a default.
> Crucially, on Linux, you *cannot* default the interface in link-local
> addresses. So in reality, supporting it isn't an option. If you don't support
> it, I don't see how TAPS will actually work for link-local IPv6 addresses on
> a Linux host, even if there is only one interface active.
>
> I can see your argument for not making it a top level type. But
> 'WithInterface("en0")' presents the same issue as
> 'RemoteSpecifier.WithIPAddress(192.0.2.21)'. "en0" should be an abstraction
> such as InterfaceIdentifier.
I would lean towards having the text explain (as it does for PvDs) that this
takes whatever system identifier is present for an interface, be it a string or
integer or strongly-typed object.
Thanks,
Tommy
>
>>>
>>> 3. I realise that this is an abstract API, but for such an ambitious
>>> project, I am quite disappointed that there is no Implementation Status
>>> section per BCP205. How many implementations already exist?
>> As Michael noted, the implementation list is in the implementation draft,
>> which already is past last call, etc:
>> https://www.ietf.org/archive/id/draft-ietf-taps-impl-18.html#name-existing-implementations
>>
>> <https://www.ietf.org/archive/id/draft-ietf-taps-impl-18.html#name-existing-implementations>
>
> Yes, that is perfect.
>
> Rgds
> Brian
>
>> Thanks,
>> Tommy
>>>
>>> Regards
>>> Brian Carpenter
>>>
>>> On 17-Feb-24 03:17, The IESG wrote:
>>>> The IESG has received a request from the Transport Services WG (taps) to
>>>> consider the following document: - 'An Abstract Application Layer Interface
>>>> to Transport Services'
>>>> <draft-ietf-taps-interface-25.txt> as Proposed Standard
>>>> The IESG plans to make a decision in the next few weeks, and solicits final
>>>> comments on this action. Please send substantive comments to the
>>>> [email protected] mailing lists by 2024-03-01. Exceptionally, comments may
>>>> be sent to [email protected] instead. In either case, please retain the
>>>> beginning
>>>> of the Subject line to allow automated sorting.
>>>> Abstract
>>>> This document describes an abstract application programming
>>>> interface, API, to the transport layer that enables the selection of
>>>> transport protocols and network paths dynamically at runtime. This
>>>> API enables faster deployment of new protocols and protocol features
>>>> without requiring changes to the applications. The specified API
>>>> follows the Transport Services architecture by providing
>>>> asynchronous, atomic transmission of messages. It is intended to
>>>> replace the BSD sockets API as the common interface to the transport
>>>> layer, in an environment where endpoints could select from multiple
>>>> network paths and potential transport protocols.
>>>> The file can be obtained via
>>>> https://datatracker.ietf.org/doc/draft-ietf-taps-interface/
>>>> This draft is going for a 2nd IETF last call due to the changes resulted
>>>> during the IESG evaluation. A diff towards the -20 version of this
>>>> document should show the changes since the previous IETF last call.
>>>> No IPR declarations have been submitted directly on this I-D.
>>>> _______________________________________________
>>>> IETF-Announce mailing list
>>>> [email protected]
>>>> https://www.ietf.org/mailman/listinfo/ietf-announce
>>>
>>> _______________________________________________
>>> Taps mailing list
>>> [email protected]
>>> https://www.ietf.org/mailman/listinfo/taps
_______________________________________________
Taps mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/taps