linux-2.6.22中API结构体的变化


主要是昨天在搞Hacking Linux Network Stack的时候,发现里面的代码,不能够在2.6.22下编译通过,并且提示找不到nh这个成员,我猜想一定是结构体发生了变化。查看/include/linux/skbuff.h发现没有了原先的联合h,nh和mac。

union {
struct tcphdr *th;
struct udphdr *uh;
struct icmphdr *icmph;
struct igmphdr *igmph;
struct iphdr *ipiph;
struct ipv6hdr *ipv6h;
unsigned char *raw;
} h;

union {
struct iphdr *iph;
struct ipv6hdr *ipv6h;
struct arphdr *arph;
unsigned char *raw;
} nh;

union {
unsigned char *raw;
} mac;

换成了
sk_buff_data_t transport_header;
sk_buff_data_t network_header;
sk_buff_data_t mac_header;

本身我并不是很支持联合的使用,即使它能够节省内存,但是实际运行时候还是有一定的时空开销的。这一改变将会导致很多程序不能够在2.6.22下使用,比如VMWare;几乎所有的网卡驱动需要打patch。感觉从2.6.18之后的变化比较大,看Kernel还是选择2.6.18比较合适。

另外,ktime替换掉了jiffies,这也算是网络部分改变比较大的一个地方了。

相关内容