/** Finalizes setting up the SKB and delivers it * * We first pass the incoming frame to WLP substack for verification. It * may also be a WLP association frame in which case WLP will take over the * processing. If WLP does not take it over it will still verify it, if the * frame is invalid the skb will be freed by WLP and we will not continue * parsing. * */ static void i1480u_skb_deliver(struct i1480u *i1480u) { int should_parse; struct net_device *net_dev = i1480u->net_dev; struct device *dev = &i1480u->usb_iface->dev; d_printf(6, dev, "RX delivered pre skb(%p), %u bytes\n", i1480u->rx_skb, i1480u->rx_skb->len); d_dump(7, dev, i1480u->rx_skb->data, i1480u->rx_skb->len); should_parse = wlp_receive_frame(dev, &i1480u->wlp, i1480u->rx_skb, &i1480u->rx_srcaddr); if (!should_parse) goto out; i1480u->rx_skb->protocol = eth_type_trans(i1480u->rx_skb, net_dev); d_printf(5, dev, "RX delivered skb(%p), %u bytes\n", i1480u->rx_skb, i1480u->rx_skb->len); d_dump(7, dev, i1480u->rx_skb->data, i1480u->rx_skb->len > 72 ? 72 : i1480u->rx_skb->len); i1480u->stats.rx_packets++; i1480u->stats.rx_bytes += i1480u->rx_untd_pkt_size; net_dev->last_rx = jiffies; /* FIXME: flow control: check netif_rx() retval */ netif_rx(i1480u->rx_skb); /* deliver */ out: i1480u->rx_skb = NULL; i1480u->rx_untd_pkt_size = 0; }
/* Finalizes setting up the SKB and delivers it * * We first pass the incoming frame to WLP substack for verification. It * may also be a WLP association frame in which case WLP will take over the * processing. If WLP does not take it over it will still verify it, if the * frame is invalid the skb will be freed by WLP and we will not continue * parsing. * */ static void i1480u_skb_deliver(struct i1480u *i1480u) { int should_parse; struct net_device *net_dev = i1480u->net_dev; struct device *dev = &i1480u->usb_iface->dev; should_parse = wlp_receive_frame(dev, &i1480u->wlp, i1480u->rx_skb, &i1480u->rx_srcaddr); if (!should_parse) goto out; i1480u->rx_skb->protocol = eth_type_trans(i1480u->rx_skb, net_dev); net_dev->stats.rx_packets++; net_dev->stats.rx_bytes += i1480u->rx_untd_pkt_size; netif_rx(i1480u->rx_skb); /* deliver */ out: i1480u->rx_skb = NULL; i1480u->rx_untd_pkt_size = 0; }