Hi Iljitsch,
1. An extension header or destination option 2. "stolen bits" 3. Port numbers 4. The flow label
I'm very much opposed to 1. because I think SOMEONE has to care about the overhead/payload ratio. Don't forget we're already moving from 20 bytes for IPv4 to 40 bytes for IPv6. Then there is TCP which is another 20 bytes, the timestamp option that many OSes ALWAYS use regardless of whether it's appropriate (12 bytes) and of course lower layer overhead. If you look at the web for instance you'll see that *many* pages use a plethora of 0.1 KB images. It costs several kilobytes in mostly HTTP overhead to request those images.
But it's not just the overhead. The problem is that adding bytes to the packet increases the work that must be done per packet. This is also very bad.
(BTW using 128 bits or even 64 is way too many as you can't have lookup tables this large. 4 to 6 bytes would be more in line with 8 more bytes in the header.)...
Then there is the flow label. This is pretty much an optimization of case 3, with two added bonusses: the flow label can be found in a fixed place in the packet, and it applies to all transports.
As I said before, the only thing needed to make the flow label usable for this, and without taking away from its other uses, is avoid reusing flow labels for sessions with an unknown shim6 status.
Regards, marcelo
For known non-shim sessions the current rules apply and for known shim sessions the current rules also apply except that the full address sets for both ends must be considered one address for flow label selection purposes. Yes, this is a little more work but it's per session rather than per packet so it's not so bad.