tcp: Restore ordering of TCP options for the sake of inter-operability
authorIlpo Järvinen <ilpo.jarvinen@helsinki.fi>
Thu, 23 Oct 2008 21:06:35 +0000 (14:06 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 23 Oct 2008 21:06:35 +0000 (14:06 -0700)
commitfd6149d332973bafa50f03ddb0ea9513e67f4517
tree6f15537b56e2d565bbff797d5c96a98e5cda87ec
parentb63365a2d60268a3988285d6c3c6003d7066f93a
tcp: Restore ordering of TCP options for the sake of inter-operability

This is not our bug! Sadly some devices cannot cope with the change
of TCP option ordering which was a result of the recent rewrite of
the option code (not that there was some particular reason steming
from the rewrite for the reordering) though any ordering of TCP
options is perfectly legal. Thus we restore the original ordering
to allow interoperability with/through such broken devices and add
some warning about this trap. Since the reordering just happened
without any particular reason, this change shouldn't cost us
anything.

There are already couple of known failure reports (within close
proximity of the last release), so the problem might be more
wide-spread than a single device. And other reports which may
be due to the same problem though the symptoms were less obvious.
Analysis of one of the case revealed (with very high probability)
that sack capability cannot be negotiated as the first option
(SYN never got a response).

Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
Reported-by: Aldo Maggi <sentiniate@tiscali.it>
Tested-by: Aldo Maggi <sentiniate@tiscali.it>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/tcp_output.c