static int __netif_receive_skb_core(struct sk_buff *skb, bool pfmemalloc)
{
struct packet_type *ptype, *pt_prev;
rx_handler_func_t *rx_handler;
struct net_device *orig_dev;
bool deliver_exact = false;
int ret = NET_RX_DROP;
__be16 type;
net_timestamp_check(!netdev_tstamp_prequeue, skb);
trace_netif_receive_skb(skb);
orig_dev = skb->dev;
skb_reset_network_header(skb);
if (!skb_transport_header_was_set(skb))
skb_reset_transport_header(skb);
skb_reset_mac_len(skb);
//使用pt_prev提高效率:未理解
pt_prev = NULL;
#ifdef CONFIG_CORTINA_KERNEL_HOOK
skb->skb_iif = skb->dev->ifindex;
if (skb->protocol == cpu_to_be16(ETH_P_8021Q)) {
/* store the vid for eth1.100 of br0 */
skb->vid = be16_to_cpu(*((unsigned short *)(skb->data))) & VLAN_VID_MASK;
snprintf(skb->br_member_dev_name, IFNAMSIZ+1, "%s.%d", skb->dev->name, skb->vid);
} else {
/* if skb is be
linux网络协议栈__netif_receive_skb_core
于 2021-03-10 11:06:19 首次发布