Exemplo n.º 1
0
static netdev_tx_t virtnet_xmit(struct sk_buff *skb, struct net_device *dev)
{
	printk("send %d packet.\n",cnt++);
	//对于真实的网卡,把skb里的数据通过网卡发送出去
	netif_stop_queue(dev);//停止该网卡发送队列
	//....................//把skb的数据写入网卡

	emulator_rx_packet(skb,dev);//构造一个假包发出去

	
	dev_kfree_skb(skb);//释放skb
	netif_wake_queue(dev);//数据全部发送出去后,唤醒网卡队列
	
	dev->stats.tx_packets++;
	dev->stats.tx_bytes += skb->len;

	return NETDEV_TX_OK;
}
Exemplo n.º 2
0
static int virt_net_send_packet(struct sk_buff *skb, struct net_device *dev)
{
	static int cnt = 0;
	printk("virt_net_send_packet cnt = %d\n", ++cnt);

	/* 对于真实的网卡, 把skb里的数据通过网卡发送出去 */
	netif_stop_queue(dev); /* 停止该网卡的队列 */
    /* ...... */           /* 把skb的数据写入网卡 */

	/* 构造一个假的sk_buff,上报 */
	emulator_rx_packet(skb, dev);

	dev_kfree_skb (skb);   /* 释放skb */
	netif_wake_queue(dev); /* 数据全部发送出去后,唤醒网卡的队列 */

	/* 更新统计信息 */
	dev->stats.tx_packets++;
	dev->stats.tx_bytes += skb->len;
	
	return 0;
}