Exemplo n.º 1
0
static netdev_tx_t skfp_send_pkt(struct sk_buff *skb,
				       struct net_device *dev)
{
	struct s_smc *smc = netdev_priv(dev);
	skfddi_priv *bp = &smc->os;

	pr_debug(KERN_INFO "skfp_send_pkt\n");

	

	if (!(skb->len >= FDDI_K_LLC_ZLEN && skb->len <= FDDI_K_LLC_LEN)) {
		bp->MacStat.gen.tx_errors++;	
		
		netif_start_queue(dev);
		dev_kfree_skb(skb);
		return NETDEV_TX_OK;	
	}
	if (bp->QueueSkb == 0) {	

		netif_stop_queue(dev);
		return NETDEV_TX_BUSY;
	}
	bp->QueueSkb--;
	skb_queue_tail(&bp->SendSkbQueue, skb);
	send_queued_packets(netdev_priv(dev));
	if (bp->QueueSkb == 0) {
		netif_stop_queue(dev);
	}
	dev->trans_start = jiffies;
	return NETDEV_TX_OK;

}				
Exemplo n.º 2
0
void llc_restart_tx(struct s_smc *smc)
{
	skfddi_priv *bp = &smc->os;

	pr_debug(KERN_INFO "[llc_restart_tx]\n");

	
	spin_unlock(&bp->DriverLock);
	send_queued_packets(smc);
	spin_lock(&bp->DriverLock);
	netif_start_queue(bp->dev);

}				
Exemplo n.º 3
0
void process_arp_reply( struct sr_instance *sr, const uint8_t *packet, unsigned int len, const char *interface)
{

	assert(sr);
	assert(packet);
	assert(interface);

	router_state *rs = get_router_state(sr);

	/* update the arp cache */
	arp_hdr *arp = get_arp_hdr(packet, len);

	lock_arp_cache_wr(rs);
	update_arp_cache(sr, &(arp->arp_sip), arp->arp_sha, 0);
	unlock_arp_cache(rs);

	lock_arp_cache_rd(rs);
	lock_arp_queue_wr(rs);
	send_queued_packets(sr, &(arp->arp_sip), arp->arp_sha);
	unlock_arp_queue(rs);
	unlock_arp_cache(rs);
}