Lines Matching refs:skb
96 int (*read)(struct iss_net_private *lp, struct sk_buff **skb);
97 int (*write)(struct iss_net_private *lp, struct sk_buff **skb);
98 unsigned short (*protocol)(struct sk_buff *skb);
181 struct sk_buff *ether_adjust_skb(struct sk_buff *skb, int extra)
183 if ((skb != NULL) && (skb_tailroom(skb) < extra)) {
186 skb2 = skb_copy_expand(skb, 0, extra, GFP_ATOMIC);
187 dev_kfree_skb(skb);
188 skb = skb2;
190 if (skb != NULL)
191 skb_put(skb, extra);
193 return skb;
277 static int tuntap_read (struct iss_net_private *lp, struct sk_buff **skb) in tuntap_read() argument
280 *skb = ether_adjust_skb(*skb, ETH_HEADER_OTHER); in tuntap_read()
281 if (*skb == NULL) in tuntap_read()
286 (*skb)->data, (*skb)->dev->mtu + ETH_HEADER_OTHER); in tuntap_read()
289 static int tuntap_write (struct iss_net_private *lp, struct sk_buff **skb) in tuntap_write() argument
291 return simc_write(lp->tp.info.tuntap.fd, (*skb)->data, (*skb)->len); in tuntap_write()
294 unsigned short tuntap_protocol(struct sk_buff *skb) in tuntap_protocol() argument
296 return eth_type_trans(skb, skb->dev); in tuntap_protocol()
370 struct sk_buff *skb; in iss_net_rx() local
379 if ((skb = dev_alloc_skb(dev->mtu + 2 + ETH_HEADER_OTHER)) == NULL) { in iss_net_rx()
384 skb_reserve(skb, 2); in iss_net_rx()
388 skb->dev = dev; in iss_net_rx()
389 skb_reset_mac_header(skb); in iss_net_rx()
390 pkt_len = lp->tp.read(lp, &skb); in iss_net_rx()
391 skb_put(skb, pkt_len); in iss_net_rx()
394 skb_trim(skb, pkt_len); in iss_net_rx()
395 skb->protocol = lp->tp.protocol(skb); in iss_net_rx()
397 lp->stats.rx_bytes += skb->len; in iss_net_rx()
400 netif_rx_ni(skb); in iss_net_rx()
403 kfree_skb(skb); in iss_net_rx()
516 static int iss_net_start_xmit(struct sk_buff *skb, struct net_device *dev) in iss_net_start_xmit() argument
525 len = lp->tp.write(lp, &skb); in iss_net_start_xmit()
527 if (len == skb->len) { in iss_net_start_xmit()
529 lp->stats.tx_bytes += skb->len; in iss_net_start_xmit()
547 dev_kfree_skb(skb); in iss_net_start_xmit()