关于 SKB序列号的小笔记
为了修改TCP协议,现在遇到了要改动tcp分组的序列号,但是只是在tcp_sendmsg函数中找到了SKB的end_seq 一直没有找到seq
不清楚在那里初始化了,就跟踪了分配SKB的函数sk_stream_alloc_skb()还是没有找到,最后在函数skb_entail中找到:
static inline void skb_entail(struct sock *sk, struct sk_buff *skb)
{struct tcp_sock *tp = tcp_sk(sk);struct tcp_skb_cb *tcb = TCP_SKB_CB(skb);skb->csum = 0;tcb->seq = tcb->end_seq = tp->write_seq;tcb->flags = TCPHDR_ACK;tcb->sacked = 0;skb_header_release(skb);tcp_add_write_queue_tail(sk, skb);sk->sk_wmem_queued += skb->truesize;sk_mem_charge(sk, skb->truesize);if (tp->nonagle & TCP_NAGLE_PUSH)tp->nonagle &= ~TCP_NAGLE_PUSH;
}
烦恼忧愁不用追,吃点好的别嫌贵,