From d8553cd26f566573e2d6441a61df2a284cedafe9 Mon Sep 17 00:00:00 2001 From: Javier Martinez Canillas Date: Wed, 29 Dec 2010 04:56:59 +0100 Subject: snull: add struct netdevice_ops and header_ops --- snull/snull.c | 41 +++++++++++++++++++++++------------------ 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/snull/snull.c b/snull/snull.c index a5b0e08..885a50b 100644 --- a/snull/snull.c +++ b/snull/snull.c @@ -585,8 +585,8 @@ int snull_rebuild_header(struct sk_buff *skb) int snull_header(struct sk_buff *skb, struct net_device *dev, - unsigned short type, void *daddr, void *saddr, - unsigned int len) + unsigned short type, const void *daddr, const void *saddr, + unsigned len) { struct ethhdr *eth = (struct ethhdr *)skb_push(skb,ETH_HLEN); @@ -623,6 +623,22 @@ int snull_change_mtu(struct net_device *dev, int new_mtu) return 0; /* success */ } +static const struct header_ops snull_header_ops = { + .create = snull_header, + .rebuild = snull_rebuild_header +}; + +static const struct net_device_ops snull_netdev_ops = { + .ndo_open = snull_open, + .ndo_stop = snull_release, + .ndo_start_xmit = snull_tx, + .ndo_do_ioctl = snull_ioctl, + .ndo_set_config = snull_config, + .ndo_get_stats = snull_stats, + .ndo_change_mtu = snull_change_mtu, + .ndo_tx_timeout = snull_tx_timeout +}; + /* * The init function (sometimes called probe). * It is invoked by register_netdev() @@ -643,32 +659,21 @@ void snull_init(struct net_device *dev) * hand assignments */ ether_setup(dev); /* assign some of the fields */ - - dev->open = snull_open; - dev->stop = snull_release; - dev->set_config = snull_config; - dev->hard_start_xmit = snull_tx; - dev->do_ioctl = snull_ioctl; - dev->get_stats = snull_stats; - dev->change_mtu = snull_change_mtu; - dev->rebuild_header = snull_rebuild_header; - dev->hard_header = snull_header; - dev->tx_timeout = snull_tx_timeout; dev->watchdog_timeo = timeout; - if (use_napi) { - dev->poll = snull_poll; - dev->weight = 2; - } + dev->netdev_ops = &snull_netdev_ops; + dev->header_ops = &snull_header_ops; /* keep the default flags, just add NOARP */ dev->flags |= IFF_NOARP; dev->features |= NETIF_F_NO_CSUM; - dev->hard_header_cache = NULL; /* Disable caching */ /* * Then, initialize the priv field. This encloses the statistics * and a few private fields. */ priv = netdev_priv(dev); + if (use_napi) { + netif_napi_add(dev, &priv->napi, snull_poll,2); + } memset(priv, 0, sizeof(struct snull_priv)); spin_lock_init(&priv->lock); snull_rx_ints(dev, 1); /* enable receive interrupts */ -- cgit v1.2.1-18-gbd029