Adding custom info to TCP Header Options by changing Linux Kernel Source code
I am trying to add a custom information (of size 16-bytes) to TCP Header Options by changing the implementation of function tcp_transmit_skb() in Linux-18.104.22.168/net/ipv4/tcp_output.c In this function, before skb_push is called to claim memory for tcp header, I am increasing the variable tcp_header_size by 16. After the skb_push() I am setting these 16 bytes to the required. But I am facing following problem.
I am testing the modified kernel through a simple file transfer
(using custom written TCP/IP client-server program). Two systems are connected in P2P mode out of which one acts as sender and the other as receiver. The sender runs modified kernel where as receiver runs normal. When I start file transfer it comes to halt after exchange of total 6 packets (SYN, SYN-ACK, SYN-ACK-ACK, 2 data Packets, 1 ACK Packet). Analysis of these packets through a sniffer confirmed that extra bytes were indeed added to TCP Header options. But strangely sender stops sending more data packets after sending 2 data packets. Receiver is acknowledging the 2 data packets which is revealed by presence of ACK packet. But sender still stop transmitting further data.
Any comments are welcome on this. Also please let me know if there is any fix procedure to be followed for modifying TCP Header Options?