netif_receive_skb函数是协议栈报文接收的入口,一般由驱动调用,把报文送入协议栈,4.1.12内核做了对sk的封装,目的是什么没还未搞清楚。
1、netif_receive_skb函数
static inline int netif_receive_skb(struct sk_buff *skb)
{
return netif_receive_skb_sk(skb->sk, skb);
}2、netif_receive_skb_sk函数
int netif_receive_skb_sk(struct sock *sk, struct sk_buff *skb)
{
trace_netif_receive_skb_entry(skb);
return netif_receive_skb_internal(skb);
}3、netif_receive_skb_internal函数
static int netif_receive_skb_internal(struct sk_buff *skb)
{
int ret;
net_timestamp_check(netdev_tstamp_prequeue, skb);
if (skb_defer_rx_timestamp(skb))
return NET_RX_SUCCESS;
rcu_read_lock();
#ifdef CONFIG_RPS
if (static_key_false(&rps_needed)) {
struct rps_dev_flow voidflow, *rflow = &voidflow;
int cpu = get_rps_cpu(skb->dev, skb, &rflow); //支持rps,选择报文处理的CPU
if (cpu >= 0) {
ret = enq

本文详细分析了Linux 4.1.12内核中netif_receive_skb函数在协议栈报文接收过程中的作用,包括对vlan报文的处理、rx_handler的调用、ptype_all和ptype_base的处理,涉及网络抓包、OVS、linux bridge等多个场景。后续将继续深入探讨。
最低0.47元/天 解锁文章
1722

被折叠的 条评论
为什么被折叠?



