2010年05月30日 星期日 23:15
panic ?
net/core/skbuff.c:
void skb_under_panic(struct sk_buff *skb, int sz, void *here)
{
printk(KERN_EMERG "skb_under_panic: text:%p len:%d put:%d head:%p "
"data:%p tail:%#lx end:%#lx dev:%s\n",
here, skb->len, sz, skb->head, skb->data,
(unsigned long)skb->tail, (unsigned long)skb->end,
skb->dev ? skb->dev->name : "<NULL>");
BUG();
}
unsigned char *skb_push(struct sk_buff *skb, unsigned int len)
{
skb->data -= len;
skb->len += len;
if (unlikely(skb->data<skb->head))
skb_under_panic(skb, len, __builtin_return_address(0));
return skb->data;
}
2010年05月31日 星期一 06:23
skb_realloc_headroom()?
skb_copy_expand()?
2010年05月31日 星期一 09:38
@孔建军 对,使用skb_push时,代码在BUG()处报错了……
2010年05月31日 星期一 09:40
@王介 多谢提示,有点思路了。
skb_realloc_headroom(skb, nhr) 将skb的包体重新分配到头部空隙为nhr字节的包缓冲上去
skb_cow(skb, headroom) 当包体的前部空隙小于headroom或者是克隆包时, 重建包缓冲并释放原包引用
Zeuux © 2024
京ICP备05028076号