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

Re: state loss detection



Iljitsch van Beijnum wrote:
Hi,

It just occurred to me that the state loss problem may not be as intractable as we thought.

FWIW I don't think it is intractable. An error message "no shim6 context" and 8 or so protocol numbers is all that's needed to do this without any byte overhead in the shim6 data packets.


The problem is that when (for instance) a host taking part in the shim6 protocol reboots, and it sees shimmed packets when it gets back on its feet again, it gets confused. If the packets that are rewritten by the shim only have their addresses rewritten, the checksum on those packets will be invalid, the packet will be dropped and the source host doesn't get to hear about it so the failure won't be detected until there is a timeout.

However, as I wrote in a draft a while ago, it may be a good idea to rewrite the checksum too, in order to avoid confusing firewalls and the like unnecessarily, and to maintain compatibility with NICs that do checksum offloading. (Although I'm not familiar with ones that do this for IPv6.)

I see a few problems with this:
1) The transport checksum no longer protects against packet misdelivery to another IP address. Thus in the odd case that the shim6 state has been lost, but there is some transport state which matches the IP address fields and port numbers, the packet will potentially be accepted by the transport (subject to sequence number checks in the case of TCP).


2) Rewriting the transport checksum is hard when the packet is protected by IPsec. It is "just" an implementation chore in the normal case of a host doing shim6, but if you ever want to have shim6 proxies/middleboxes (to help with a transition to shim6) then this becomes intractable.

3) Transport protocols unknown to the shim6 implementor (could be implemented in some unrelated kernel patch, or in user space using raw sockets) would need to trigger a shim6 state refresh in this case. But the implementor of that (user level?) transport protocol might not be aware of shim6.

   Erik