日期:2014-05-16  浏览次数:20608 次

构造数据包的问题
C/C++ code

sock_alloc_send_skb(sk,    alloclen + hh_len + 15,    (flags & MSG_DONTWAIT), &err);


代码摘自linux-2.6.34/net/ipv4/icmp.c,为传送到IP的数据包分配skb空间时,第二个参数表示要分配的大小,alloclen + hhlen + 15,这里hh_len是以太网报头长,alloclen是报文内容长度,最后加上15。
前两个理解,alloclen + hh_len就是报文长,最后的15字节怎么理解?

之前我理解可能是要16字节对齐,这里先补上15Bytes,后面做size & ~15操作。但实际上并没有,在sock_alloc_send_skb()分配是会做字节对齐,但已经考虑了补位,(size+32)& ~31。

到底怎么解释呢

------解决方案--------------------
预留空间?