int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, unsigned int vlan_tci, struct napi_gro_fraginfo *info) { struct sk_buff *skb = napi_fraginfo_skb(napi, info); int err = NET_RX_DROP; if (!skb) goto out; if (netpoll_receive_skb(skb)) goto out; err = NET_RX_SUCCESS; switch (vlan_gro_common(napi, grp, vlan_tci, skb)) { case -1: return netif_receive_skb(skb); case 2: err = NET_RX_DROP; /* fall through */ case 1: napi_reuse_skb(napi, skb); break; } out: return err; }
int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, unsigned int vlan_tci, struct sk_buff *skb) { if (netpoll_rx_on(skb)) return vlan_hwaccel_receive_skb(skb, grp, vlan_tci); skb_gro_reset_offset(skb); return napi_skb_finish(vlan_gro_common(napi, grp, vlan_tci, skb), skb); }
int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp, unsigned int vlan_tci) { struct sk_buff *skb = napi_frags_skb(napi); if (!skb) return NET_RX_DROP; if (netpoll_rx_on(skb)) { skb->protocol = eth_type_trans(skb, skb->dev); return vlan_hwaccel_receive_skb(skb, grp, vlan_tci); } return napi_frags_finish(napi, skb, vlan_gro_common(napi, grp, vlan_tci, skb)); }
int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, unsigned int vlan_tci, struct sk_buff *skb) { int err = NET_RX_SUCCESS; if (netpoll_receive_skb(skb)) return NET_RX_DROP; switch (vlan_gro_common(napi, grp, vlan_tci, skb)) { case -1: return netif_receive_skb(skb); case 2: err = NET_RX_DROP; /* fall through */ case 1: kfree_skb(skb); break; } return err; }