#include #include #include #include static struct net_device *my_net; #if 0 static irqreturn_t my_net_isr(int irq, void *dev_id, struct pt_regs *regs) { struct net_device *dev = (struct net_device *)dev_id; struct sk_buff *skb; int packet_length=0; // wird aus der HW ausgelesen struct net_device_stats *stats = dev->priv; if( receive_interrupt() ) { skb = dev_alloc_skb( packet_length ); if( skb == NULL ) { printk( KERN_ERR "alloc_skb failed\n"); return IRQ_HANDLED; } // Daten von der HW in den SKB kopieren. skb->protocol = eth_type_trans( skb, dev ); stats->rx_packets++; stats->rx_bytes += packet_length; dev->last_rx = jiffies; netif_rx( skb ); } return IRQ_HANDLED; } #endif static int my_net_send(struct sk_buff *skb, struct net_device *dev) { struct net_device_stats *stats = dev->priv; //netdev_priv(dev); kfree_skb( skb ); dev->trans_start = jiffies; stats->tx_bytes += skb->len; stats->tx_packets++; return 0; } static int my_net_open(struct net_device *dev) { netif_start_queue(dev); return 0; } static int my_net_close(struct net_device *dev) { netif_stop_queue(dev); return 0; } static struct net_device_stats *my_net_get_stats( struct net_device *dev ) { return dev->priv; } static void __init my_net_setup( struct net_device *dev ) { ether_setup(dev); dev->open = my_net_open; dev->stop = my_net_close; dev->hard_start_xmit= my_net_send; dev->get_stats = my_net_get_stats; dev->flags |= IFF_NOARP; } static int __init net_init(void) { if( (my_net=alloc_netdev(sizeof(struct net_device_stats), "net%d",my_net_setup))==NULL ) return -ENOMEM; return register_netdev(my_net); } static void __exit net_exit(void) { unregister_netdev(my_net); free_netdev(my_net); } module_init( net_init ); module_exit( net_exit ); MODULE_LICENSE("GPL");