/** * rmnet_bridge_handler() - Bridge related functionality * * Return: * - RX_HANDLER_CONSUMED in all cases */ static rx_handler_result_t rmnet_bridge_handler(struct sk_buff *skb, struct rmnet_logical_ep_conf_s *ep) { if (!ep->egress_dev) { LOGD("Missing egress device for packet arriving on %s", skb->dev->name); rmnet_kfree_skb(skb, RMNET_STATS_SKBFREE_BRDG_NO_EGRESS); } else { rmnet_egress_handler(skb, ep); } return RX_HANDLER_CONSUMED; }
static netdev_tx_t rmnet_vnd_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct rmnet_priv *priv; priv = netdev_priv(dev); if (priv->local_ep.egress_dev) { rmnet_egress_handler(skb, &priv->local_ep); } else { dev->stats.tx_dropped++; kfree_skb(skb); } return NETDEV_TX_OK; }
static netdev_tx_t rmnet_vnd_start_xmit(struct sk_buff *skb, struct net_device *dev) { struct rmnet_vnd_private_s *dev_conf; dev_conf = (struct rmnet_vnd_private_s *) netdev_priv(dev); if (dev_conf->local_ep.egress_dev) { if (dev_conf->qos_mode) rmnet_vnd_add_qos_header(skb, dev); rmnet_egress_handler(skb, &dev_conf->local_ep); } else { dev->stats.tx_dropped++; kfree_skb(skb); } return NETDEV_TX_OK; }