Hello,
I have developed a small patch for the TCP code in 2.6.19 and it works
flawlessly. A couple of days ago I decided to make it compatible with
2.6.22.5 and have stumbled upon a problem I cannot solve.
In 2.6.19 it seems that all packets (at least the ones my patch work
with) are linear, while they are non-linear in 2.6.22.5. I have searched
through the code (focusing on tcp_sendmsg) to try to figure out what
happens, but can't find any differences that would explain this. Does
anyone know what might be the cause and if there is an easy way to
return to linear skbs (unless that is totally stupid)? Currently I used
the skb_linearize(skb) on all fragmentet packets, which is not nice.
Both kernels are vanilla kernels with the patch applied, and I used
OpenSuse with 2.6.19 and Ubuntu with 2.6.22.5 (but I guess that
shouldn't matter in this case).
The reason this is a problem is that I copy data between SKBs, and in
2.6.19 I have used memcpy for this purpose (which of course does not
work when the skb is non-linear). I have look at the way they do it in
the else-part of the large if-test in tcp_sendmsg and the
skb_copy_bits-function, but the first one looks very complex and I don't
quite understand how to use the last one. Does anyone have any easier to
understand examples or explanations on how to copy data from one
non-linear skb to another?
Thanks.
-Kristian
--
To unsubscribe from this list: send an email with
"unsubscribe kernelnewbies" to ecartis@xxxxxxxxxxxx
Please read the FAQ at http://kernelnewbies.org/FAQ