diff options
Diffstat (limited to 'net/802/fddi.c')
| -rw-r--r-- | net/802/fddi.c | 66 |
1 files changed, 35 insertions, 31 deletions
diff --git a/net/802/fddi.c b/net/802/fddi.c index ac242a4bc34..9cda40661e0 100644 --- a/net/802/fddi.c +++ b/net/802/fddi.c @@ -15,7 +15,7 @@ * Mark Evans, <evansmp@uhura.aston.ac.uk> * Florian La Roche, <rzsfl@rz.uni-sb.de> * Alan Cox, <gw4pts@gw4pts.ampr.org> - * + * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version @@ -25,13 +25,10 @@ * Alan Cox : New arp/rebuild header * Maciej W. Rozycki : IPv6 support */ - -#include <linux/config.h> + #include <linux/module.h> -#include <asm/system.h> #include <linux/types.h> #include <linux/kernel.h> -#include <linux/sched.h> #include <linux/string.h> #include <linux/mm.h> #include <linux/socket.h> @@ -54,11 +51,11 @@ static int fddi_header(struct sk_buff *skb, struct net_device *dev, unsigned short type, - void *daddr, void *saddr, unsigned len) + const void *daddr, const void *saddr, unsigned int len) { int hl = FDDI_K_SNAP_HLEN; struct fddihdr *fddi; - + if(type != ETH_P_IP && type != ETH_P_IPV6 && type != ETH_P_ARP) hl=FDDI_K_8022_HLEN-3; fddi = (struct fddihdr *)skb_push(skb, hl); @@ -75,7 +72,7 @@ static int fddi_header(struct sk_buff *skb, struct net_device *dev, } /* Set the source and destination hardware addresses */ - + if (saddr != NULL) memcpy(fddi->saddr, saddr, dev->addr_len); else @@ -84,10 +81,10 @@ static int fddi_header(struct sk_buff *skb, struct net_device *dev, if (daddr != NULL) { memcpy(fddi->daddr, daddr, dev->addr_len); - return(hl); + return hl; } - return(-hl); + return -hl; } @@ -96,21 +93,21 @@ static int fddi_header(struct sk_buff *skb, struct net_device *dev, * (or in future other address resolution) has completed on * this sk_buff. We now let ARP fill in the other fields. */ - + static int fddi_rebuild_header(struct sk_buff *skb) { struct fddihdr *fddi = (struct fddihdr *)skb->data; #ifdef CONFIG_INET - if (fddi->hdr.llc_snap.ethertype == __constant_htons(ETH_P_IP)) + if (fddi->hdr.llc_snap.ethertype == htons(ETH_P_IP)) /* Try to get ARP to resolve the header and fill destination address */ return arp_find(fddi->daddr, skb); else -#endif +#endif { printk("%s: Don't know how to resolve type %04X addresses.\n", skb->dev->name, ntohs(fddi->hdr.llc_snap.ethertype)); - return(0); + return 0; } } @@ -121,32 +118,33 @@ static int fddi_rebuild_header(struct sk_buff *skb) * up. It's used to fill in specific skb fields and to set * the proper pointer to the start of packet data (skb->data). */ - + __be16 fddi_type_trans(struct sk_buff *skb, struct net_device *dev) { struct fddihdr *fddi = (struct fddihdr *)skb->data; __be16 type; - + /* * Set mac.raw field to point to FC byte, set data field to point * to start of packet data. Assume 802.2 SNAP frames for now. */ - skb->mac.raw = skb->data; /* point to frame control (FC) */ - + skb->dev = dev; + skb_reset_mac_header(skb); /* point to frame control (FC) */ + if(fddi->hdr.llc_8022_1.dsap==0xe0) { skb_pull(skb, FDDI_K_8022_HLEN-3); - type = __constant_htons(ETH_P_802_2); + type = htons(ETH_P_802_2); } else { skb_pull(skb, FDDI_K_SNAP_HLEN); /* adjust for 21 byte header */ type=fddi->hdr.llc_snap.ethertype; } - + /* Set packet type based on destination address and flag settings */ - + if (*fddi->daddr & 0x01) { if (memcmp(fddi->daddr, dev->broadcast, FDDI_K_ALEN) == 0) @@ -154,7 +152,7 @@ __be16 fddi_type_trans(struct sk_buff *skb, struct net_device *dev) else skb->pkt_type = PACKET_MULTICAST; } - + else if (dev->flags & IFF_PROMISC) { if (memcmp(fddi->daddr, dev->dev_addr, FDDI_K_ALEN)) @@ -163,32 +161,36 @@ __be16 fddi_type_trans(struct sk_buff *skb, struct net_device *dev) /* Assume 802.2 SNAP frames, for now */ - return(type); + return type; } EXPORT_SYMBOL(fddi_type_trans); -static int fddi_change_mtu(struct net_device *dev, int new_mtu) +int fddi_change_mtu(struct net_device *dev, int new_mtu) { if ((new_mtu < FDDI_K_SNAP_HLEN) || (new_mtu > FDDI_K_SNAP_DLEN)) - return(-EINVAL); + return -EINVAL; dev->mtu = new_mtu; - return(0); + return 0; } +EXPORT_SYMBOL(fddi_change_mtu); + +static const struct header_ops fddi_header_ops = { + .create = fddi_header, + .rebuild = fddi_rebuild_header, +}; + static void fddi_setup(struct net_device *dev) { - dev->change_mtu = fddi_change_mtu; - dev->hard_header = fddi_header; - dev->rebuild_header = fddi_rebuild_header; - + dev->header_ops = &fddi_header_ops; dev->type = ARPHRD_FDDI; dev->hard_header_len = FDDI_K_SNAP_HLEN+3; /* Assume 802.2 SNAP hdr len + 3 pad bytes */ dev->mtu = FDDI_K_SNAP_DLEN; /* Assume max payload of 802.2 SNAP frame */ dev->addr_len = FDDI_K_ALEN; dev->tx_queue_len = 100; /* Long queues on FDDI */ dev->flags = IFF_BROADCAST | IFF_MULTICAST; - + memset(dev->broadcast, 0xFF, FDDI_K_ALEN); } @@ -208,3 +210,5 @@ struct net_device *alloc_fddidev(int sizeof_priv) return alloc_netdev(sizeof_priv, "fddi%d", fddi_setup); } EXPORT_SYMBOL(alloc_fddidev); + +MODULE_LICENSE("GPL"); |
