aboutsummaryrefslogtreecommitdiffstats
path: root/net/rose/rose_dev.c
diff options
context:
space:
mode:
authorStephen Hemminger <shemminger@linux-foundation.org>2007-10-09 04:40:57 -0400
committerDavid S. Miller <davem@sunset.davemloft.net>2007-10-10 19:52:52 -0400
commit3b04ddde02cf1b6f14f2697da5c20eca5715017f (patch)
tree9da1341a5a399a507b5ea6bf5a3047506b8d8f8f /net/rose/rose_dev.c
parentb95cce3576813ac3f86bafa6b5daaaaf7574b0fe (diff)
[NET]: Move hardware header operations out of netdevice.
Since hardware header operations are part of the protocol class not the device instance, make them into a separate object and save memory. Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/rose/rose_dev.c')
-rw-r--r--net/rose/rose_dev.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/net/rose/rose_dev.c b/net/rose/rose_dev.c
index 8d88795dc663..1b6741f1d746 100644
--- a/net/rose/rose_dev.c
+++ b/net/rose/rose_dev.c
@@ -35,8 +35,9 @@
35#include <net/ax25.h> 35#include <net/ax25.h>
36#include <net/rose.h> 36#include <net/rose.h>
37 37
38static int rose_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, 38static int rose_header(struct sk_buff *skb, struct net_device *dev,
39 void *daddr, void *saddr, unsigned len) 39 unsigned short type,
40 const void *daddr, const void *saddr, unsigned len)
40{ 41{
41 unsigned char *buff = skb_push(skb, ROSE_MIN_LEN + 2); 42 unsigned char *buff = skb_push(skb, ROSE_MIN_LEN + 2);
42 43
@@ -148,6 +149,11 @@ static struct net_device_stats *rose_get_stats(struct net_device *dev)
148 return netdev_priv(dev); 149 return netdev_priv(dev);
149} 150}
150 151
152static const struct header_ops rose_header_ops = {
153 .create = rose_header,
154 .rebuild= rose_rebuild_header,
155};
156
151void rose_setup(struct net_device *dev) 157void rose_setup(struct net_device *dev)
152{ 158{
153 dev->mtu = ROSE_MAX_PACKET_SIZE - 2; 159 dev->mtu = ROSE_MAX_PACKET_SIZE - 2;
@@ -155,11 +161,10 @@ void rose_setup(struct net_device *dev)
155 dev->open = rose_open; 161 dev->open = rose_open;
156 dev->stop = rose_close; 162 dev->stop = rose_close;
157 163
158 dev->hard_header = rose_header; 164 dev->header_ops = &rose_header_ops;
159 dev->hard_header_len = AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + ROSE_MIN_LEN; 165 dev->hard_header_len = AX25_BPQ_HEADER_LEN + AX25_MAX_HEADER_LEN + ROSE_MIN_LEN;
160 dev->addr_len = ROSE_ADDR_LEN; 166 dev->addr_len = ROSE_ADDR_LEN;
161 dev->type = ARPHRD_ROSE; 167 dev->type = ARPHRD_ROSE;
162 dev->rebuild_header = rose_rebuild_header;
163 dev->set_mac_address = rose_set_mac_address; 168 dev->set_mac_address = rose_set_mac_address;
164 169
165 /* New-style flags. */ 170 /* New-style flags. */