我正在尝试在代码中分配一个sk_buff,然后访问其skb->数据区。
我得到一个NULL指针参考。
OpenWRT:障碍破坏者
代码:
( void(foo(args)) , ...);
转储:
我得到以下堆栈跟踪:
struct sk_buff *skb = NULL;
skb = __dev_alloc_skb(2400,GFP_ATOMIC);
if (skb) {
printk("head= %p \n data= %p \n tail= %p\n end= %p\n len= %d\n", skb->head,skb->data,skb->tail,skb->end,skb->len);
memset(skb->data,0,2400);
}
我尝试过使用alloc_skb,dev_alloc_skb。
ath5k使用__dev_alloc_skb()并成功使用目标平台上返回的skb->数据。
skb-> data(data = 00000b20)的值似乎也是相对的。它是否与skb-> head相关。
请帮忙。
由于
答案 0 :(得分:0)
您不需要使用私有方法(从__
开始),使用alloc_skb
或dev_alloc_skb
(对于设备驱动程序,它将自动释放)。
此外,最好将提供的API用于sk_buff
结构的实例,而不是访问私有字段。有关示例,请参阅现有用法:http://lxr.free-electrons.com/ident?i=dev_alloc_skb