Hi Pekka,
Approach one: Annotate ULIDs with locators
^ v | | ULIDs (annotated with locators) +----------+ | shim6 | +----------+ | | ^ v Locators (and only locators)
In outgoing packets, the optional locator annotation could indicate the locators that the transport prefers to use, if they are available according to the shim6 knowledge. In incoming packets, the locator annotation indicates the locators as found in the incoming packets. ULIDs that don't understand the annotations continue to function according to the current "theory".
Approach two: Send locators up but annotate them with ULIDs
^ v | | Locators (annotated with ULIDs) +----------+ | shim6 | +----------+ | | ^ v Locators (and only locators)
While the information content here is the same as in the previous case, the difference lies in what transports see by default. This might work better with unmodified or minimally modified multi-homing aware transports, such as SCTP and DCCP.
The architecturally guiding principle in this is to keep IP only aware of the plain set of locators associated with each ULID, the required encapsulation/marking information (such as the flow label), and nothing else. Annotating the ULIDs with locators (or vice versa) allows more capable transport protocols to keep track of them and associate path-related parameters such as RTT, bandwidth estimate, etc, separately with each locator pair. This allows the transport-related functionality to remain located at the transport layer. At the same time, any changes in the locator set need to be secured only at the shim layer, i.e. only once per each ULID pair rather than separately for each transport connection.
In addition to this basic mechanism, some transport may need to figure out the complete set of locators available. However, are there any other functions that would be needed? For example, if the transport can give outgoing locators as hints to the shim-layer, it does not need to tell the shim-layer to deprecate any locators even though it suspects that some of they may not work any more. Indeed, telling shim to prefer some over others may be dangerous since different locator pairs may work for different transports, due to the Internet not being fully transparent any more.
Hence, my question is if the transport are likely to need anything else than the following:
- both ULIDs and locators in incoming packets
- ability to define locators for outgoing packets
- what happens if the locators are not available any
more? Host-internal ICMP-like response?
- ability to get the full set of locators related to a given ULID Anything else?
Regards, marcelo
One other practical problem here is to figure out how to make this all work with high speed servers, which are likely to have IP and TCP implemented with firmware at the NIC. (Kudos to Christian for pointing this out.)
--Pekka Nikander