diff options
| author | Stephen Hemminger <shemminger@linux-foundation.org> | 2007-10-09 04:40:57 -0400 |
|---|---|---|
| committer | David S. Miller <davem@sunset.davemloft.net> | 2007-10-10 19:52:52 -0400 |
| commit | 3b04ddde02cf1b6f14f2697da5c20eca5715017f (patch) | |
| tree | 9da1341a5a399a507b5ea6bf5a3047506b8d8f8f /net/802 | |
| parent | b95cce3576813ac3f86bafa6b5daaaaf7574b0fe (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/802')
| -rw-r--r-- | net/802/fc.c | 11 | ||||
| -rw-r--r-- | net/802/fddi.c | 10 | ||||
| -rw-r--r-- | net/802/hippi.c | 16 | ||||
| -rw-r--r-- | net/802/tr.c | 15 |
4 files changed, 33 insertions, 19 deletions
diff --git a/net/802/fc.c b/net/802/fc.c index 675d9ba8e591..cb3475ea6fda 100644 --- a/net/802/fc.c +++ b/net/802/fc.c | |||
| @@ -35,7 +35,7 @@ | |||
| 35 | 35 | ||
| 36 | static int fc_header(struct sk_buff *skb, struct net_device *dev, | 36 | static int fc_header(struct sk_buff *skb, struct net_device *dev, |
| 37 | unsigned short type, | 37 | unsigned short type, |
| 38 | void *daddr, void *saddr, unsigned len) | 38 | const void *daddr, const void *saddr, unsigned len) |
| 39 | { | 39 | { |
| 40 | struct fch_hdr *fch; | 40 | struct fch_hdr *fch; |
| 41 | int hdr_len; | 41 | int hdr_len; |
| @@ -95,11 +95,14 @@ static int fc_rebuild_header(struct sk_buff *skb) | |||
| 95 | #endif | 95 | #endif |
| 96 | } | 96 | } |
| 97 | 97 | ||
| 98 | static const struct header_ops fc_header_ops = { | ||
| 99 | .create = fc_header, | ||
| 100 | .rebuild = fc_rebuild_header, | ||
| 101 | }; | ||
| 102 | |||
| 98 | static void fc_setup(struct net_device *dev) | 103 | static void fc_setup(struct net_device *dev) |
| 99 | { | 104 | { |
| 100 | dev->hard_header = fc_header; | 105 | dev->header_ops = &fc_header_ops; |
| 101 | dev->rebuild_header = fc_rebuild_header; | ||
| 102 | |||
| 103 | dev->type = ARPHRD_IEEE802; | 106 | dev->type = ARPHRD_IEEE802; |
| 104 | dev->hard_header_len = FC_HLEN; | 107 | dev->hard_header_len = FC_HLEN; |
| 105 | dev->mtu = 2024; | 108 | dev->mtu = 2024; |
diff --git a/net/802/fddi.c b/net/802/fddi.c index 91dde41b5481..0549317b9356 100644 --- a/net/802/fddi.c +++ b/net/802/fddi.c | |||
| @@ -52,7 +52,7 @@ | |||
| 52 | 52 | ||
| 53 | static int fddi_header(struct sk_buff *skb, struct net_device *dev, | 53 | static int fddi_header(struct sk_buff *skb, struct net_device *dev, |
| 54 | unsigned short type, | 54 | unsigned short type, |
| 55 | void *daddr, void *saddr, unsigned len) | 55 | const void *daddr, const void *saddr, unsigned len) |
| 56 | { | 56 | { |
| 57 | int hl = FDDI_K_SNAP_HLEN; | 57 | int hl = FDDI_K_SNAP_HLEN; |
| 58 | struct fddihdr *fddi; | 58 | struct fddihdr *fddi; |
| @@ -175,11 +175,15 @@ static int fddi_change_mtu(struct net_device *dev, int new_mtu) | |||
| 175 | return(0); | 175 | return(0); |
| 176 | } | 176 | } |
| 177 | 177 | ||
| 178 | static const struct header_ops fddi_header_ops = { | ||
| 179 | .create = fddi_header, | ||
| 180 | .rebuild = fddi_rebuild_header, | ||
| 181 | }; | ||
| 182 | |||
| 178 | static void fddi_setup(struct net_device *dev) | 183 | static void fddi_setup(struct net_device *dev) |
| 179 | { | 184 | { |
| 180 | dev->change_mtu = fddi_change_mtu; | 185 | dev->change_mtu = fddi_change_mtu; |
| 181 | dev->hard_header = fddi_header; | 186 | dev->header_ops = &fddi_header_ops; |
| 182 | dev->rebuild_header = fddi_rebuild_header; | ||
| 183 | 187 | ||
| 184 | dev->type = ARPHRD_FDDI; | 188 | dev->type = ARPHRD_FDDI; |
| 185 | dev->hard_header_len = FDDI_K_SNAP_HLEN+3; /* Assume 802.2 SNAP hdr len + 3 pad bytes */ | 189 | dev->hard_header_len = FDDI_K_SNAP_HLEN+3; /* Assume 802.2 SNAP hdr len + 3 pad bytes */ |
diff --git a/net/802/hippi.c b/net/802/hippi.c index 87ffc12b6891..e35dc1e0915d 100644 --- a/net/802/hippi.c +++ b/net/802/hippi.c | |||
| @@ -45,8 +45,8 @@ | |||
| 45 | */ | 45 | */ |
| 46 | 46 | ||
| 47 | static int hippi_header(struct sk_buff *skb, struct net_device *dev, | 47 | static int hippi_header(struct sk_buff *skb, struct net_device *dev, |
| 48 | unsigned short type, void *daddr, void *saddr, | 48 | unsigned short type, |
| 49 | unsigned len) | 49 | const void *daddr, const void *saddr, unsigned len) |
| 50 | { | 50 | { |
| 51 | struct hippi_hdr *hip = (struct hippi_hdr *)skb_push(skb, HIPPI_HLEN); | 51 | struct hippi_hdr *hip = (struct hippi_hdr *)skb_push(skb, HIPPI_HLEN); |
| 52 | struct hippi_cb *hcb = (struct hippi_cb *) skb->cb; | 52 | struct hippi_cb *hcb = (struct hippi_cb *) skb->cb; |
| @@ -182,16 +182,18 @@ static int hippi_neigh_setup_dev(struct net_device *dev, struct neigh_parms *p) | |||
| 182 | return 0; | 182 | return 0; |
| 183 | } | 183 | } |
| 184 | 184 | ||
| 185 | static const struct header_ops hippi_header_ops = { | ||
| 186 | .create = hippi_header, | ||
| 187 | .rebuild = hippi_rebuild_header, | ||
| 188 | }; | ||
| 189 | |||
| 190 | |||
| 185 | static void hippi_setup(struct net_device *dev) | 191 | static void hippi_setup(struct net_device *dev) |
| 186 | { | 192 | { |
| 187 | dev->set_multicast_list = NULL; | 193 | dev->set_multicast_list = NULL; |
| 188 | dev->change_mtu = hippi_change_mtu; | 194 | dev->change_mtu = hippi_change_mtu; |
| 189 | dev->hard_header = hippi_header; | 195 | dev->header_ops = &hippi_header_ops; |
| 190 | dev->rebuild_header = hippi_rebuild_header; | ||
| 191 | dev->set_mac_address = hippi_mac_addr; | 196 | dev->set_mac_address = hippi_mac_addr; |
| 192 | dev->hard_header_parse = NULL; | ||
| 193 | dev->hard_header_cache = NULL; | ||
| 194 | dev->header_cache_update = NULL; | ||
| 195 | dev->neigh_setup = hippi_neigh_setup_dev; | 197 | dev->neigh_setup = hippi_neigh_setup_dev; |
| 196 | 198 | ||
| 197 | /* | 199 | /* |
diff --git a/net/802/tr.c b/net/802/tr.c index aa3c2e936abc..a2bd0f2e3af8 100644 --- a/net/802/tr.c +++ b/net/802/tr.c | |||
| @@ -100,7 +100,7 @@ static inline unsigned long rif_hash(const unsigned char *addr) | |||
| 100 | 100 | ||
| 101 | static int tr_header(struct sk_buff *skb, struct net_device *dev, | 101 | static int tr_header(struct sk_buff *skb, struct net_device *dev, |
| 102 | unsigned short type, | 102 | unsigned short type, |
| 103 | void *daddr, void *saddr, unsigned len) | 103 | const void *daddr, const void *saddr, unsigned len) |
| 104 | { | 104 | { |
| 105 | struct trh_hdr *trh; | 105 | struct trh_hdr *trh; |
| 106 | int hdr_len; | 106 | int hdr_len; |
| @@ -142,7 +142,7 @@ static int tr_header(struct sk_buff *skb, struct net_device *dev, | |||
| 142 | if(daddr) | 142 | if(daddr) |
| 143 | { | 143 | { |
| 144 | memcpy(trh->daddr,daddr,dev->addr_len); | 144 | memcpy(trh->daddr,daddr,dev->addr_len); |
| 145 | tr_source_route(skb,trh,dev); | 145 | tr_source_route(skb, trh, dev); |
| 146 | return(hdr_len); | 146 | return(hdr_len); |
| 147 | } | 147 | } |
| 148 | 148 | ||
| @@ -247,7 +247,8 @@ __be16 tr_type_trans(struct sk_buff *skb, struct net_device *dev) | |||
| 247 | * We try to do source routing... | 247 | * We try to do source routing... |
| 248 | */ | 248 | */ |
| 249 | 249 | ||
| 250 | void tr_source_route(struct sk_buff *skb,struct trh_hdr *trh,struct net_device *dev) | 250 | void tr_source_route(struct sk_buff *skb,struct trh_hdr *trh, |
| 251 | struct net_device *dev) | ||
| 251 | { | 252 | { |
| 252 | int slack; | 253 | int slack; |
| 253 | unsigned int hash; | 254 | unsigned int hash; |
| @@ -592,14 +593,18 @@ static const struct file_operations rif_seq_fops = { | |||
| 592 | 593 | ||
| 593 | #endif | 594 | #endif |
| 594 | 595 | ||
| 596 | static const struct header_ops tr_header_ops = { | ||
| 597 | .create = tr_header, | ||
| 598 | .rebuild= tr_rebuild_header, | ||
| 599 | }; | ||
| 600 | |||
| 595 | static void tr_setup(struct net_device *dev) | 601 | static void tr_setup(struct net_device *dev) |
| 596 | { | 602 | { |
| 597 | /* | 603 | /* |
| 598 | * Configure and register | 604 | * Configure and register |
| 599 | */ | 605 | */ |
| 600 | 606 | ||
| 601 | dev->hard_header = tr_header; | 607 | dev->header_ops = &tr_header_ops; |
| 602 | dev->rebuild_header = tr_rebuild_header; | ||
| 603 | 608 | ||
| 604 | dev->type = ARPHRD_IEEE802_TR; | 609 | dev->type = ARPHRD_IEEE802_TR; |
| 605 | dev->hard_header_len = TR_HLEN; | 610 | dev->hard_header_len = TR_HLEN; |
