static inline struct sk_buff *skb_peek_tail(const struct sk_buff_head *list_) { struct sk_buff *skb = list_->prev;//获取到头部节点的前一个,即是尾部开始节点 if (skb == (struct sk_buff *)list_)//判断是否是只有一个头节点的队列 skb = NULL; return skb; } 3.3 元素弹出操作 __skb...
result = __skb_dequeue_tail(list);spin_unlock_irqrestore(&list->lock, flags);returnresult; }staticinlinestructsk_buff*__skb_dequeue_tail(structsk_buff_head*list) {structsk_buff*skb =skb_peek_tail(list);if(skb) __skb_unlink(skb, list);returnskb; }staticinlinestructsk_buff*skb_peek_ta...
[SK_BUFF]: Introduce skb_transport_header(skb) Browse files Browse the repository at this point in the history For the places where we need a pointer to the transport header, it is still legal to touch skb->h.raw directly if just adding to, subtracting from or setting it to another...