黎明748 发表于 2014-03-28 15:21

求问pskb_may_pull

static inline int pskb_may_pull(struct sk_buff *skb, unsigned int len)
{
        if (likely(len <= skb_headlen(skb)))
                return 1;
        if (unlikely(len > skb->len))
                return 0;
        return __pskb_pull_tail(skb, len-skb_headlen(skb)) != NULL;
}

什么情况才能执行到return __pskb_pull_tail(skb, len-skb_headlen(skb)) != NULL;

jiufei19 发表于 2014-04-07 21:24

本帖最后由 jiufei19 于 2014-04-07 21:26 编辑

回复 1# 黎明748


    要执行那一句,则代码上看,就是要求被测试的那个len满足如下条件

   1、len比此skb的主buffer区域的数据大,且
   2、len又要小于或等于此skb的数据总长度

   因此,换句话讲,就是满足:len比skb的主buffer大且小于或等于skb的总长度。而一个skb的数据可能包括3个部分:主buffer区、page区、frag_list区

黎明748 发表于 2014-04-24 00:11

谢谢回复 2# jiufei19


   
页: [1]
查看完整版本: 求问pskb_may_pull