- 论坛徽章:
- 0
|
回复 4# Godbach
非常感谢您的回复: 构建TCP的首部是在tcp_transmit_skb函数中,下面是他的一个小片段
static int tcp_transmit_skb(struct sock *sk, struct sk_buff *skb, int clone_it, gfp_t gfp_mask)
{
const struct inet_connection_sock *icsk = inet_csk(sk);
struct inet_sock *inet;
struct tcp_sock *tp;
struct tcp_skb_cb *tcb;
struct tcp_out_options opts;
unsigned tcp_options_size, tcp_header_size;
struct tcp_md5sig_key *md5;
struct tcphdr *th;
int err;
.....
.....
/* Build TCP header and checksum it. */
th = tcp_hdr(skb);
th->source = inet->inet_sport;
th->dest = inet->inet_dport;
th->seq = htonl(tcb->seq);
th->ack_seq = htonl(tp->rcv_nxt);
if(mouFlag!=true)
*(((__be16 *)th) + 6) = htons(((tcp_header_size >> 2) << 12) |
tcb->flags);
else{
unsigned short addflag = 8192;
*(((__be16 *)th) + 6) = htons(((tcp_header_size >> 2) << 12) |addflag
tcb->flags);
}
我在TCP首部 存放首部长度后面的保留部分置为 1 ,我定义了一个unsigned short 的addflag变量
看这样可以吗?我担心编译完之后会出现崩溃,大家帮我把把关谢谢了!
另外请教一下:tcp_header_size 定义是unsigned类型的,在linux内核中不知道他的长度,我在VC6.0中
打印了他的长度是4个字节的,我不清楚我定义的addflag有没有问题,内核中改动我是比较小心的....
望大家指点一下,非常谢谢。
|
|