[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: skb_put() causes the system to loop
hello Samarth ....
First of all, you said you attached your code, but where is it? if you
think it is too big, you can simply post it somewhere on Web and write
down the exact URL so we can take a look...
OK, I'll try to lend some ideas....
> I am working on linux kernel 2.6.13.4. I am trying to append some
> data along with the tcp acknowledgement packet.In the tcp_send_ack ()
> function I have modified the function as follows.
>
> 1)
> buff = alloc_skb(2*MAX_TCP_HEADER, GFP_ATOMIC);
OK, I see you are doubling the allocated buffer, what did you put there?
> 2)
> unsigned char *data = skb_put(buff,MAX_TCP_HEADER);
Again, you are extending the used area of the buffer...what data did you
put there?
> I have added a printk statement in the beginning of the function to
> inform me whenever the function is called. However after doing the
> above mentioned changes and on recompiling the kernel , my system
> keeps looping within the tcp_send_ack () function. ( The
> /var/log/messages were full of my printk
> statements)
perhaps if you post your modification (maybe as patch file and then sent
gzipped?) we can help you better. IMHO, my really raw guess, you are
extending the buffer but you are inserting meaningless data. This data
is then received by the other socket endpoint but is seen as non ack
data. The result? IIRC, the sender is expected to send and send again
until it sends the expected data, that is the correct ack packet
So, in short word, IMHO, you are sending correct ack+wrong data = wrong
data as a whole...
hope it helps...and please send the code (patch preferred against
original tcp_output.c, you are modifying this file, right?) so we can
help further.
regards
Mulyadi
--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive: http://mail.nl.linux.org/kernelnewbies/
FAQ: http://kernelnewbies.org/faq/