[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Second shim




El 12/10/2005, a las 11:55, Iljitsch van Beijnum escribió:

I had a conversation with Tony Hain and Daniel Karrenberg yesterday, where we discussed the issues with the shim and very short-lived sessions such as single packet UDP request/reply interactions.

This ties in with the "failure of the initially chosen locators" issue that we talked about. I think it was Daniel who brought up the need for a "second shim" that sits between the application and the transport protocol that could handle this need.

I think that makes a lot of sense. The current shim is all about keeping ULP sessions flowing within the constraint of keeping the ULIDs stable. But in a single packet interaction there is no need to keep ULIDs "stable": you can just try different source/dest addresses and retry the transaction until it works.

I think the current presumption is that the application itself would do this. However, for what the shim as it is now _does_ do, the idea is that the shim's activities are completely hidden from applications and ULPs. So it makes sense to consider the possibilities of allowing current applications using current APIs to survive initial failures.

I'm not talking about single packet UDP stuff anymore: for our purposes, a TCP connection establishment is pretty much also an exchange of a handful of packets. It's only after the session establishes and the application starts sending/receiving data that TCP and the like are constrained by the requirement that the addresses remain stable. However, at this point the shim as currently intended can take over so that's not a problem.

It would work as follows. The "second shim" intercepts session establishement requests (bind(), connect() and the like) along with the sending of UDP packets (sendto(), sendmsg()). The second shim then first tries the requested action using the addresses supplied by the application and/or RFC 3484 address selection mechanisms. When this action times out, the second shim looks up additional addresses (see below) and tries all source/dest combinations until something works. At that point the whole thing is handed back to the calling application and the second shim gets out of the way.


First of all, i think it is important to exactly identify the scenario that we are considering. I can see two scenarios here: - Scenario 1: the host that is initiating the communication supports some multihoming specific mechanisms but the peer is just a legacy IPv6 host (no special multihoming support) - Scenario 2: both hosts involved in the communication support multihoming specific mechanisms (like the second shim that you are talking about)

In scenario 1, the ULID and the locator used for the communication need to be the same since the peer does not support the translation, so, using a different ULID that the locator used would break things. In this case, what we need would be the upgraded RFC3484 which would allow to cycle through different source addresses.
However, i would like to note some part of RFC3484:

   The application might also specify a source address
   with bind(), but often the source address is left unspecified.
   Therefore the network layer does often choose a source address from
   several alternatives.
...
   Separately, the IPv6 network layer will use the source address
   selection algorithm when an application or upper-layer has not
   specified a source address.

So this basically says that in very common scenarios, is actually the IP layer that selects the source address. In this case, then it would be possible to build additional mechanisms within the IP layer that when a packet with unspecified source address is received, it tries different source addresses and uses the one that seems to be working (we still need to understand what does "seems to be working means though..)

I mean, that updated RFC3484 could provide enhanced mechanisms to perform source address selection when the application leaves the source address unspecified, that would allow to try multiple source addresses Perhaps this mechanisms would also work for legacy hosts (hosts that don't support the updated RFC3484) sicne it will only require support from the initiating host, that should try multiple source addresses

This behavior would be transparent for ulp as long as they don't specify the source address. If the source address is specified, then the app should cycle through different source and destination addresses. This seems to be coherent with the fact that the app is specifying the source address

In the second scenario, is what i understood that we called API on steroids in the interim meeting, where the app asks to connect with a given ulid and the shim will ask the resolver for the additional addresses that the resolver obtained for that particular query, and tries to connect using different locators, but keeping the same ULID. This would cope with some failures but we need to keep in mind that different addresses associated with a given FQDN may belong to different hosts. this means that the shim needs to ask if the alternative locator used belongs to the same host that the used ULID Actually, this is not good as it may seem, because maybe, it is possible that there are no working locators for that particular ULID, but that other addresses that are asociated with the same FQDN but that belong to a different host (hence cannot be used as locatros for the selected ULID) are working In this case, it would be the application that needs to retry with a different ULID; but in this case, the shim could inform about which ulid to try first since it already knows which ones are working.

So, as we talked in the interim meeting, i guess that what is needed is:

- Updated RFC3484 to deal with legacy hosts and to cope with apps that left the source address unspecified
- API on steroids, to deal with apps that want to keep  the ulid fixed
- signaling from the shim to the ulp so that when the ulid selected is not working, information about which combinatiosn are working is passed

regards, marcelo