1 #include <linux/kernel.h>
2 #include <linux/netdevice.h>
3 #include <linux/etherdevice.h>
4 #include <linux/rcupdate.h>
9 static int dp_dev_do_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
11 printk("xxx_do_ioctl called\n");
15 static struct net_device_stats *dp_dev_get_stats(struct net_device *dev)
17 struct datapath *dp = netdev_priv(dev);
21 int dp_dev_xmit(struct sk_buff *skb, struct net_device *dev)
23 struct datapath *dp = netdev_priv(dev);
25 printk("xxx dp_dev_xmit not implemented yet!\n");
28 printk("xxx_xmit called send to dp_frame_hook\n");
30 rcu_read_lock(); /* xxx Only for 2.4 kernels? */
31 fwd_port_input(dp->chain, skb, OFPP_LOCAL);
32 rcu_read_unlock(); /* xxx Only for 2.4 kernels? */
37 static int dp_dev_open(struct net_device *dev)
39 netif_start_queue(dev);
43 static void dp_dev_set_multicast_list(struct net_device *dev)
45 printk("xxx_set_multi called\n");
48 static int dp_dev_stop(struct net_device *dev)
50 netif_stop_queue(dev);
54 int dp_dev_setup(struct net_device *dev)
58 strncpy(dev->name, "of%d", IFNAMSIZ);
59 err = dev_alloc_name(dev, dev->name);
63 dev->do_ioctl = dp_dev_do_ioctl;
64 dev->get_stats = dp_dev_get_stats;
65 dev->hard_start_xmit = dp_dev_xmit;
66 dev->open = dp_dev_open;
67 dev->set_multicast_list = dp_dev_set_multicast_list;
68 dev->stop = dp_dev_stop;
69 dev->tx_queue_len = 0;
70 dev->set_mac_address = NULL;
72 dev->flags = IFF_BROADCAST | IFF_NOARP | IFF_MULTICAST;
74 random_ether_addr(dev->dev_addr);
77 return register_netdevice(dev);