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

Re: Design decisions made at the interim SHIM6 WG meeting



On 27-okt-2005, at 18:17, marcelo bagnulo braun wrote:

It's important that the wg participants that weren't at the interim meeting determine the merit of all of these points themselves so the wg can come to rough consensus rather than just say "well most people that were in Amsterdam agreed so it must be the right decision".

absolutely agree

but we do agree that most people that were in amsterdam agreed on this points, right?

I assume the people in Amsterdam agreed if they didn't say anything to the contrary...

What RFC does is two things:

1. select source and destination addresses
2. tell application programmers to cycle through all destination addresses

kind of agree...
i would say that rfc3484 does:
- it passes an ordered list of destiantion addresses to the app and requires that the app should cycle through all of them until finds one that is reachable - it selects a source address for a given destiantion address when the app does not select one

Actually, looking over the RFC very quickly, it doesn't look like RFC 3484 requires applications to cycle through all available (destination) addresses.

Most IPv4 applications don't cycle through all destination addresses, and a significant number of IPv6 applications doesn't either. I don't see applications cycle through all source/dest pairs because that's very hard to do right.

not really understand what is the part that you think it is hard....

Specifying an address with bind() is of course not problematic. The trouble is maintaining an up to date list of available addresses in the system. Since this list is subject to change applications would have to query all available addresses prior to any TCP session establishments and the like. Also, when the application has this list of addresses, it somehow needs to go back to the system to have RFC 3484 policies applied to the source/dest pairs.

I think we could have 3 approaches (which can be complementary i.e. does not have to be one or the other)
- first approach is to let the app take care of everything
  i.e. inform the app about all src and dst address and let
  the app try all the possible combinations.
  This is the minimum change to rfc3484 bis, i.e. state that
  apps SHOULD retry with all possible src,dst pairs
  A possible optimization for this, would be that the rfc3484
  delivers an ordered list of address pairs (similar than current
  rfc3484 delivers a ordered list of dst address, the rfc3484bis
  would deliver to the app an ordered list of address pairs (based
  on rules for prefering one address pair over the other)
  [an alternative to this that would be more compatible with current
  rfc3484 would that for a given dst address, rfc3484bis would
  provide an ordered list or src addresses for this dst address]

I suppose this is possible although I don't find it very desireable.

If applications have to be changed anyway, why not come up with an API that REALLY solves all of this?

- a second approach would be similar to the current case where the
  app does not select the src address. In this case, the rfc3484bis
  src address selection mechanism would need to use a different
  src address each time the apps retries.

Yes, this is absolutely essential because consistently selecting a non-working address is the worst possible outcome.

  In this case the responsible for retrying is still the app, and
  the app needs to be informed that it needs to retry several
  times with the same dst address, so that the rfc3484bis would
  use different src address for this dst address. In order to
  do this we could define an notification at the api level
  to allow rfc3484bis mechanisms to inform the app that no more
  src addresses are available to retry with and that we will be
  recycling to ones that have already been tried (so that the
  app can give up or use a different dst address)

Also API + application changes...

- a third approach would be to allow rfc3484bis to handle
  retrials itself when the src address is left unspecified by the app
  In this case, when an app tries to open a socket with an
  unspecified src address, rfc3484bis would try to send packets with
  different src addresses until it finds one that it is working.

Right.

And the next logical step is to do the same thing for the destination address.

  the main difficulty is how rfc3484bis can determine that
  a src address is working

For TCP it's simple: connect() fails = retry with a different address.

For UDP a packet coming back with src addr as dest addr, src port as dst port etc is a reasonable indication that things are going well.

Now, this third approach is at best very debatable.
I think that the first two approaches make sense and that it would be useful to incoporate information about incoming address pairs as a hint to select outgoing address pairs that are working.

Is RFC 3484 ipv6 wg domain? In that case I think we may want to see what that wg has to say. I suspect they'll be less than thrilled with API/applications.

[suppressing shim header]

As I've explained before: this can be exceedingly simple. We just need signalling message, or a field in an existing signalling message, so that a host can tell its correspondent that it doesn't want to see the shim header for packets with rewritten addresses within this context. If the sender simply honors this option then we're done in the base spec.

i guess that the point is that we don't want to include this bit unless we know that we know how to make this extension work in a simple way

:-)

How about this: I'll write the draft about how this would work in practice (i.e., when a host can demultiplex without the shim header) and after that we make the final decision?

this works perfectly for me

Great.

(also i would be glad to work in the draft with you if you want)

Ok I'll contact you when I have my initial thoughts laid out.

* Adopt HIP parameter format for options; HIP parameter format
       defines length in bytes but guarantees 64-bit alignment.


I don't want this alignment. It wastes space, it's an implementation headache and it buys us nothing.

i think that this is a small price to pay to allow future convergence with hip that is anther protocol somehow related with shim6

No, I don't see how this makes sense. It just makes the decision making much more complex as the needs of two different mechanisms must be aligned first.

not sure i understand what you mean here...
in the meeting we agreed that this is basically all that was to be done in order to provide hip compatibility (no other consderations will be made w.r.t. hip compatibility afaiu)

The problem here is that now the protocol layout is limited by the requirements of both HIP and shim, and if either of these requires some change, there must be extensive negotiations to maintain compatibility.

I think compatibility with regard to how the two work together is much more important than sharing the same basic header format.

 This means the context id must be carried along everywhere.

not sure what you mean by everywhere...
packets do you mean?

Everywhere in the IP stack.

One place where this is inconvenient is between the application, that specifies certain ToS requirements, and the shim. The transport protocol that sits in the middle must now somehow "color" all packets with the right context information so the shim knows what to do with the packet. IIRC there are also signalling complexities.

right but this is what it seems that apps want, right? the capability of selecting the locator pair to be used for carrying the traffic (at least this is what i understood this was all about)

Wouldn't it make more sense to do this by selecting ULIDs rather than by selecting locators? This has the added advantage that it also works regardless of whether the shim is available.

i think that 10 sec was just a value that was somehow appropriate.. i don't have a problem with 15 or 20 secs neither...

I have no problem with 10 as long as this doesn't require sending packets every 3 seconds, and I don't see why it would have to.