Linux内核开发  - 讨论区

标题:sk_buff的问题

2010年05月30日 星期日 21:26

使用skb_push()增加的长度大于headroom的值,怎么办?

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哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号