[NET] 802: Fix whitespace errors.
Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
66efc5a7e3
Коммит
9afa0949ee
24
net/802/fc.c
24
net/802/fc.c
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* NET3: Fibre Channel device handling subroutines
|
* NET3: Fibre Channel device handling subroutines
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
* as published by the Free Software Foundation; either version
|
* as published by the Free Software Foundation; either version
|
||||||
|
@ -31,18 +31,18 @@
|
||||||
#include <net/arp.h>
|
#include <net/arp.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Put the headers on a Fibre Channel packet.
|
* Put the headers on a Fibre Channel packet.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int fc_header(struct sk_buff *skb, struct net_device *dev,
|
static int fc_header(struct sk_buff *skb, struct net_device *dev,
|
||||||
unsigned short type,
|
unsigned short type,
|
||||||
void *daddr, void *saddr, unsigned len)
|
void *daddr, void *saddr, unsigned len)
|
||||||
{
|
{
|
||||||
struct fch_hdr *fch;
|
struct fch_hdr *fch;
|
||||||
int hdr_len;
|
int hdr_len;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add the 802.2 SNAP header if IP as the IPv4 code calls
|
* Add the 802.2 SNAP header if IP as the IPv4 code calls
|
||||||
* dev->hard_header directly.
|
* dev->hard_header directly.
|
||||||
*/
|
*/
|
||||||
if (type == ETH_P_IP || type == ETH_P_ARP)
|
if (type == ETH_P_IP || type == ETH_P_ARP)
|
||||||
|
@ -60,7 +60,7 @@ static int fc_header(struct sk_buff *skb, struct net_device *dev,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hdr_len = sizeof(struct fch_hdr);
|
hdr_len = sizeof(struct fch_hdr);
|
||||||
fch = (struct fch_hdr *)skb_push(skb, hdr_len);
|
fch = (struct fch_hdr *)skb_push(skb, hdr_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(saddr)
|
if(saddr)
|
||||||
|
@ -68,20 +68,20 @@ static int fc_header(struct sk_buff *skb, struct net_device *dev,
|
||||||
else
|
else
|
||||||
memcpy(fch->saddr,dev->dev_addr,dev->addr_len);
|
memcpy(fch->saddr,dev->dev_addr,dev->addr_len);
|
||||||
|
|
||||||
if(daddr)
|
if(daddr)
|
||||||
{
|
{
|
||||||
memcpy(fch->daddr,daddr,dev->addr_len);
|
memcpy(fch->daddr,daddr,dev->addr_len);
|
||||||
return(hdr_len);
|
return(hdr_len);
|
||||||
}
|
}
|
||||||
return -hdr_len;
|
return -hdr_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A neighbour discovery of some species (eg arp) has completed. We
|
* A neighbour discovery of some species (eg arp) has completed. We
|
||||||
* can now send the packet.
|
* can now send the packet.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int fc_rebuild_header(struct sk_buff *skb)
|
static int fc_rebuild_header(struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct fch_hdr *fch=(struct fch_hdr *)skb->data;
|
struct fch_hdr *fch=(struct fch_hdr *)skb->data;
|
||||||
struct fcllc *fcllc=(struct fcllc *)(skb->data+sizeof(struct fch_hdr));
|
struct fcllc *fcllc=(struct fcllc *)(skb->data+sizeof(struct fch_hdr));
|
||||||
|
@ -100,7 +100,7 @@ static void fc_setup(struct net_device *dev)
|
||||||
{
|
{
|
||||||
dev->hard_header = fc_header;
|
dev->hard_header = fc_header;
|
||||||
dev->rebuild_header = fc_rebuild_header;
|
dev->rebuild_header = fc_rebuild_header;
|
||||||
|
|
||||||
dev->type = ARPHRD_IEEE802;
|
dev->type = ARPHRD_IEEE802;
|
||||||
dev->hard_header_len = FC_HLEN;
|
dev->hard_header_len = FC_HLEN;
|
||||||
dev->mtu = 2024;
|
dev->mtu = 2024;
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
* Mark Evans, <evansmp@uhura.aston.ac.uk>
|
* Mark Evans, <evansmp@uhura.aston.ac.uk>
|
||||||
* Florian La Roche, <rzsfl@rz.uni-sb.de>
|
* Florian La Roche, <rzsfl@rz.uni-sb.de>
|
||||||
* Alan Cox, <gw4pts@gw4pts.ampr.org>
|
* Alan Cox, <gw4pts@gw4pts.ampr.org>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
* as published by the Free Software Foundation; either version
|
* as published by the Free Software Foundation; either version
|
||||||
|
@ -25,7 +25,7 @@
|
||||||
* Alan Cox : New arp/rebuild header
|
* Alan Cox : New arp/rebuild header
|
||||||
* Maciej W. Rozycki : IPv6 support
|
* Maciej W. Rozycki : IPv6 support
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/module.h>
|
#include <linux/module.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
@ -57,7 +57,7 @@ static int fddi_header(struct sk_buff *skb, struct net_device *dev,
|
||||||
{
|
{
|
||||||
int hl = FDDI_K_SNAP_HLEN;
|
int hl = FDDI_K_SNAP_HLEN;
|
||||||
struct fddihdr *fddi;
|
struct fddihdr *fddi;
|
||||||
|
|
||||||
if(type != ETH_P_IP && type != ETH_P_IPV6 && type != ETH_P_ARP)
|
if(type != ETH_P_IP && type != ETH_P_IPV6 && type != ETH_P_ARP)
|
||||||
hl=FDDI_K_8022_HLEN-3;
|
hl=FDDI_K_8022_HLEN-3;
|
||||||
fddi = (struct fddihdr *)skb_push(skb, hl);
|
fddi = (struct fddihdr *)skb_push(skb, hl);
|
||||||
|
@ -74,7 +74,7 @@ static int fddi_header(struct sk_buff *skb, struct net_device *dev,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the source and destination hardware addresses */
|
/* Set the source and destination hardware addresses */
|
||||||
|
|
||||||
if (saddr != NULL)
|
if (saddr != NULL)
|
||||||
memcpy(fddi->saddr, saddr, dev->addr_len);
|
memcpy(fddi->saddr, saddr, dev->addr_len);
|
||||||
else
|
else
|
||||||
|
@ -95,7 +95,7 @@ static int fddi_header(struct sk_buff *skb, struct net_device *dev,
|
||||||
* (or in future other address resolution) has completed on
|
* (or in future other address resolution) has completed on
|
||||||
* this sk_buff. We now let ARP fill in the other fields.
|
* this sk_buff. We now let ARP fill in the other fields.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int fddi_rebuild_header(struct sk_buff *skb)
|
static int fddi_rebuild_header(struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct fddihdr *fddi = (struct fddihdr *)skb->data;
|
struct fddihdr *fddi = (struct fddihdr *)skb->data;
|
||||||
|
@ -105,7 +105,7 @@ static int fddi_rebuild_header(struct sk_buff *skb)
|
||||||
/* Try to get ARP to resolve the header and fill destination address */
|
/* Try to get ARP to resolve the header and fill destination address */
|
||||||
return arp_find(fddi->daddr, skb);
|
return arp_find(fddi->daddr, skb);
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
printk("%s: Don't know how to resolve type %04X addresses.\n",
|
printk("%s: Don't know how to resolve type %04X addresses.\n",
|
||||||
skb->dev->name, ntohs(fddi->hdr.llc_snap.ethertype));
|
skb->dev->name, ntohs(fddi->hdr.llc_snap.ethertype));
|
||||||
|
@ -120,19 +120,19 @@ static int fddi_rebuild_header(struct sk_buff *skb)
|
||||||
* up. It's used to fill in specific skb fields and to set
|
* up. It's used to fill in specific skb fields and to set
|
||||||
* the proper pointer to the start of packet data (skb->data).
|
* the proper pointer to the start of packet data (skb->data).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
__be16 fddi_type_trans(struct sk_buff *skb, struct net_device *dev)
|
__be16 fddi_type_trans(struct sk_buff *skb, struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct fddihdr *fddi = (struct fddihdr *)skb->data;
|
struct fddihdr *fddi = (struct fddihdr *)skb->data;
|
||||||
__be16 type;
|
__be16 type;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Set mac.raw field to point to FC byte, set data field to point
|
* 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.
|
* to start of packet data. Assume 802.2 SNAP frames for now.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
skb->mac.raw = skb->data; /* point to frame control (FC) */
|
skb->mac.raw = skb->data; /* point to frame control (FC) */
|
||||||
|
|
||||||
if(fddi->hdr.llc_8022_1.dsap==0xe0)
|
if(fddi->hdr.llc_8022_1.dsap==0xe0)
|
||||||
{
|
{
|
||||||
skb_pull(skb, FDDI_K_8022_HLEN-3);
|
skb_pull(skb, FDDI_K_8022_HLEN-3);
|
||||||
|
@ -143,9 +143,9 @@ __be16 fddi_type_trans(struct sk_buff *skb, struct net_device *dev)
|
||||||
skb_pull(skb, FDDI_K_SNAP_HLEN); /* adjust for 21 byte header */
|
skb_pull(skb, FDDI_K_SNAP_HLEN); /* adjust for 21 byte header */
|
||||||
type=fddi->hdr.llc_snap.ethertype;
|
type=fddi->hdr.llc_snap.ethertype;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set packet type based on destination address and flag settings */
|
/* Set packet type based on destination address and flag settings */
|
||||||
|
|
||||||
if (*fddi->daddr & 0x01)
|
if (*fddi->daddr & 0x01)
|
||||||
{
|
{
|
||||||
if (memcmp(fddi->daddr, dev->broadcast, FDDI_K_ALEN) == 0)
|
if (memcmp(fddi->daddr, dev->broadcast, FDDI_K_ALEN) == 0)
|
||||||
|
@ -153,7 +153,7 @@ __be16 fddi_type_trans(struct sk_buff *skb, struct net_device *dev)
|
||||||
else
|
else
|
||||||
skb->pkt_type = PACKET_MULTICAST;
|
skb->pkt_type = PACKET_MULTICAST;
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (dev->flags & IFF_PROMISC)
|
else if (dev->flags & IFF_PROMISC)
|
||||||
{
|
{
|
||||||
if (memcmp(fddi->daddr, dev->dev_addr, FDDI_K_ALEN))
|
if (memcmp(fddi->daddr, dev->dev_addr, FDDI_K_ALEN))
|
||||||
|
@ -187,7 +187,7 @@ static void fddi_setup(struct net_device *dev)
|
||||||
dev->addr_len = FDDI_K_ALEN;
|
dev->addr_len = FDDI_K_ALEN;
|
||||||
dev->tx_queue_len = 100; /* Long queues on FDDI */
|
dev->tx_queue_len = 100; /* Long queues on FDDI */
|
||||||
dev->flags = IFF_BROADCAST | IFF_MULTICAST;
|
dev->flags = IFF_BROADCAST | IFF_MULTICAST;
|
||||||
|
|
||||||
memset(dev->broadcast, 0xFF, FDDI_K_ALEN);
|
memset(dev->broadcast, 0xFF, FDDI_K_ALEN);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -39,7 +39,7 @@
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Create the HIPPI MAC header for an arbitrary protocol layer
|
* Create the HIPPI MAC header for an arbitrary protocol layer
|
||||||
*
|
*
|
||||||
* saddr=NULL means use device source address
|
* saddr=NULL means use device source address
|
||||||
* daddr=NULL means leave destination address (eg unresolved arp)
|
* daddr=NULL means leave destination address (eg unresolved arp)
|
||||||
|
@ -104,8 +104,8 @@ static int hippi_rebuild_header(struct sk_buff *skb)
|
||||||
/*
|
/*
|
||||||
* Only IP is currently supported
|
* Only IP is currently supported
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(hip->snap.ethertype != __constant_htons(ETH_P_IP))
|
if(hip->snap.ethertype != __constant_htons(ETH_P_IP))
|
||||||
{
|
{
|
||||||
printk(KERN_DEBUG "%s: unable to resolve type %X addresses.\n",skb->dev->name,ntohs(hip->snap.ethertype));
|
printk(KERN_DEBUG "%s: unable to resolve type %X addresses.\n",skb->dev->name,ntohs(hip->snap.ethertype));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -122,11 +122,11 @@ static int hippi_rebuild_header(struct sk_buff *skb)
|
||||||
/*
|
/*
|
||||||
* Determine the packet's protocol ID.
|
* Determine the packet's protocol ID.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
__be16 hippi_type_trans(struct sk_buff *skb, struct net_device *dev)
|
__be16 hippi_type_trans(struct sk_buff *skb, struct net_device *dev)
|
||||||
{
|
{
|
||||||
struct hippi_hdr *hip;
|
struct hippi_hdr *hip;
|
||||||
|
|
||||||
hip = (struct hippi_hdr *) skb->data;
|
hip = (struct hippi_hdr *) skb->data;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -173,10 +173,10 @@ static int hippi_neigh_setup_dev(struct net_device *dev, struct neigh_parms *p)
|
||||||
{
|
{
|
||||||
/* Never send broadcast/multicast ARP messages */
|
/* Never send broadcast/multicast ARP messages */
|
||||||
p->mcast_probes = 0;
|
p->mcast_probes = 0;
|
||||||
|
|
||||||
/* In IPv6 unicast probes are valid even on NBMA,
|
/* In IPv6 unicast probes are valid even on NBMA,
|
||||||
* because they are encapsulated in normal IPv6 protocol.
|
* because they are encapsulated in normal IPv6 protocol.
|
||||||
* Should be a generic flag.
|
* Should be a generic flag.
|
||||||
*/
|
*/
|
||||||
if (p->tbl->family != AF_INET6)
|
if (p->tbl->family != AF_INET6)
|
||||||
p->ucast_probes = 0;
|
p->ucast_probes = 0;
|
||||||
|
@ -193,7 +193,7 @@ static void hippi_setup(struct net_device *dev)
|
||||||
dev->hard_header_parse = NULL;
|
dev->hard_header_parse = NULL;
|
||||||
dev->hard_header_cache = NULL;
|
dev->hard_header_cache = NULL;
|
||||||
dev->header_cache_update = NULL;
|
dev->header_cache_update = NULL;
|
||||||
dev->neigh_setup = hippi_neigh_setup_dev;
|
dev->neigh_setup = hippi_neigh_setup_dev;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We don't support HIPPI `ARP' for the time being, and probably
|
* We don't support HIPPI `ARP' for the time being, and probably
|
||||||
|
@ -210,9 +210,9 @@ static void hippi_setup(struct net_device *dev)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* HIPPI doesn't support broadcast+multicast and we only use
|
* HIPPI doesn't support broadcast+multicast and we only use
|
||||||
* static ARP tables. ARP is disabled by hippi_neigh_setup_dev.
|
* static ARP tables. ARP is disabled by hippi_neigh_setup_dev.
|
||||||
*/
|
*/
|
||||||
dev->flags = 0;
|
dev->flags = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -117,7 +117,7 @@ module_exit(snap_exit);
|
||||||
*/
|
*/
|
||||||
struct datalink_proto *register_snap_client(unsigned char *desc,
|
struct datalink_proto *register_snap_client(unsigned char *desc,
|
||||||
int (*rcvfunc)(struct sk_buff *,
|
int (*rcvfunc)(struct sk_buff *,
|
||||||
struct net_device *,
|
struct net_device *,
|
||||||
struct packet_type *,
|
struct packet_type *,
|
||||||
struct net_device *))
|
struct net_device *))
|
||||||
{
|
{
|
||||||
|
|
136
net/802/tr.c
136
net/802/tr.c
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* NET3: Token ring device handling subroutines
|
* NET3: Token ring device handling subroutines
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
* as published by the Free Software Foundation; either version
|
* as published by the Free Software Foundation; either version
|
||||||
|
@ -12,7 +12,7 @@
|
||||||
* 22 Jun 98 Paul Norton <p.norton@computer.org> Rearranged
|
* 22 Jun 98 Paul Norton <p.norton@computer.org> Rearranged
|
||||||
* tr_header and tr_type_trans to handle passing IPX SNAP and
|
* tr_header and tr_type_trans to handle passing IPX SNAP and
|
||||||
* 802.2 through the correct layers. Eliminated tr_reformat.
|
* 802.2 through the correct layers. Eliminated tr_reformat.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <asm/uaccess.h>
|
#include <asm/uaccess.h>
|
||||||
|
@ -45,7 +45,7 @@ static void rif_check_expire(unsigned long dummy);
|
||||||
/*
|
/*
|
||||||
* Each RIF entry we learn is kept this way
|
* Each RIF entry we learn is kept this way
|
||||||
*/
|
*/
|
||||||
|
|
||||||
struct rif_cache {
|
struct rif_cache {
|
||||||
unsigned char addr[TR_ALEN];
|
unsigned char addr[TR_ALEN];
|
||||||
int iface;
|
int iface;
|
||||||
|
@ -62,7 +62,7 @@ struct rif_cache {
|
||||||
* We hash the RIF cache 32 ways. We do after all have to look it
|
* We hash the RIF cache 32 ways. We do after all have to look it
|
||||||
* up a lot.
|
* up a lot.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct rif_cache *rif_table[RIF_TABLE_SIZE];
|
static struct rif_cache *rif_table[RIF_TABLE_SIZE];
|
||||||
|
|
||||||
static DEFINE_SPINLOCK(rif_lock);
|
static DEFINE_SPINLOCK(rif_lock);
|
||||||
|
@ -71,7 +71,7 @@ static DEFINE_SPINLOCK(rif_lock);
|
||||||
/*
|
/*
|
||||||
* Garbage disposal timer.
|
* Garbage disposal timer.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static struct timer_list rif_timer;
|
static struct timer_list rif_timer;
|
||||||
|
|
||||||
int sysctl_tr_rif_timeout = 60*10*HZ;
|
int sysctl_tr_rif_timeout = 60*10*HZ;
|
||||||
|
@ -96,16 +96,16 @@ static inline unsigned long rif_hash(const unsigned char *addr)
|
||||||
* Put the headers on a token ring packet. Token ring source routing
|
* Put the headers on a token ring packet. Token ring source routing
|
||||||
* makes this a little more exciting than on ethernet.
|
* makes this a little more exciting than on ethernet.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int tr_header(struct sk_buff *skb, struct net_device *dev,
|
static int tr_header(struct sk_buff *skb, struct net_device *dev,
|
||||||
unsigned short type,
|
unsigned short type,
|
||||||
void *daddr, void *saddr, unsigned len)
|
void *daddr, void *saddr, unsigned len)
|
||||||
{
|
{
|
||||||
struct trh_hdr *trh;
|
struct trh_hdr *trh;
|
||||||
int hdr_len;
|
int hdr_len;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Add the 802.2 SNAP header if IP as the IPv4/IPv6 code calls
|
* Add the 802.2 SNAP header if IP as the IPv4/IPv6 code calls
|
||||||
* dev->hard_header directly.
|
* dev->hard_header directly.
|
||||||
*/
|
*/
|
||||||
if (type == ETH_P_IP || type == ETH_P_IPV6 || type == ETH_P_ARP)
|
if (type == ETH_P_IP || type == ETH_P_IPV6 || type == ETH_P_ARP)
|
||||||
|
@ -123,7 +123,7 @@ static int tr_header(struct sk_buff *skb, struct net_device *dev,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hdr_len = sizeof(struct trh_hdr);
|
hdr_len = sizeof(struct trh_hdr);
|
||||||
trh = (struct trh_hdr *)skb_push(skb, hdr_len);
|
trh = (struct trh_hdr *)skb_push(skb, hdr_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
trh->ac=AC;
|
trh->ac=AC;
|
||||||
|
@ -137,8 +137,8 @@ static int tr_header(struct sk_buff *skb, struct net_device *dev,
|
||||||
/*
|
/*
|
||||||
* Build the destination and then source route the frame
|
* Build the destination and then source route the frame
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(daddr)
|
if(daddr)
|
||||||
{
|
{
|
||||||
memcpy(trh->daddr,daddr,dev->addr_len);
|
memcpy(trh->daddr,daddr,dev->addr_len);
|
||||||
tr_source_route(skb,trh,dev);
|
tr_source_route(skb,trh,dev);
|
||||||
|
@ -147,13 +147,13 @@ static int tr_header(struct sk_buff *skb, struct net_device *dev,
|
||||||
|
|
||||||
return -hdr_len;
|
return -hdr_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A neighbour discovery of some species (eg arp) has completed. We
|
* A neighbour discovery of some species (eg arp) has completed. We
|
||||||
* can now send the packet.
|
* can now send the packet.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int tr_rebuild_header(struct sk_buff *skb)
|
static int tr_rebuild_header(struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
struct trh_hdr *trh=(struct trh_hdr *)skb->data;
|
struct trh_hdr *trh=(struct trh_hdr *)skb->data;
|
||||||
struct trllc *trllc=(struct trllc *)(skb->data+sizeof(struct trh_hdr));
|
struct trllc *trllc=(struct trllc *)(skb->data+sizeof(struct trh_hdr));
|
||||||
|
@ -162,7 +162,7 @@ static int tr_rebuild_header(struct sk_buff *skb)
|
||||||
/*
|
/*
|
||||||
* FIXME: We don't yet support IPv6 over token rings
|
* FIXME: We don't yet support IPv6 over token rings
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(trllc->ethertype != htons(ETH_P_IP)) {
|
if(trllc->ethertype != htons(ETH_P_IP)) {
|
||||||
printk("tr_rebuild_header: Don't know how to resolve type %04X addresses ?\n", ntohs(trllc->ethertype));
|
printk("tr_rebuild_header: Don't know how to resolve type %04X addresses ?\n", ntohs(trllc->ethertype));
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -172,39 +172,39 @@ static int tr_rebuild_header(struct sk_buff *skb)
|
||||||
if(arp_find(trh->daddr, skb)) {
|
if(arp_find(trh->daddr, skb)) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
tr_source_route(skb,trh,dev);
|
tr_source_route(skb,trh,dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Some of this is a bit hackish. We intercept RIF information
|
* Some of this is a bit hackish. We intercept RIF information
|
||||||
* used for source routing. We also grab IP directly and don't feed
|
* used for source routing. We also grab IP directly and don't feed
|
||||||
* it via SNAP.
|
* it via SNAP.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
__be16 tr_type_trans(struct sk_buff *skb, struct net_device *dev)
|
__be16 tr_type_trans(struct sk_buff *skb, struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
|
||||||
struct trh_hdr *trh=(struct trh_hdr *)skb->data;
|
struct trh_hdr *trh=(struct trh_hdr *)skb->data;
|
||||||
struct trllc *trllc;
|
struct trllc *trllc;
|
||||||
unsigned riflen=0;
|
unsigned riflen=0;
|
||||||
|
|
||||||
skb->mac.raw = skb->data;
|
skb->mac.raw = skb->data;
|
||||||
|
|
||||||
if(trh->saddr[0] & TR_RII)
|
if(trh->saddr[0] & TR_RII)
|
||||||
riflen = (ntohs(trh->rcf) & TR_RCF_LEN_MASK) >> 8;
|
riflen = (ntohs(trh->rcf) & TR_RCF_LEN_MASK) >> 8;
|
||||||
|
|
||||||
trllc = (struct trllc *)(skb->data+sizeof(struct trh_hdr)-TR_MAXRIFLEN+riflen);
|
trllc = (struct trllc *)(skb->data+sizeof(struct trh_hdr)-TR_MAXRIFLEN+riflen);
|
||||||
|
|
||||||
skb_pull(skb,sizeof(struct trh_hdr)-TR_MAXRIFLEN+riflen);
|
skb_pull(skb,sizeof(struct trh_hdr)-TR_MAXRIFLEN+riflen);
|
||||||
|
|
||||||
if(*trh->daddr & 0x80)
|
if(*trh->daddr & 0x80)
|
||||||
{
|
{
|
||||||
if(!memcmp(trh->daddr,dev->broadcast,TR_ALEN))
|
if(!memcmp(trh->daddr,dev->broadcast,TR_ALEN))
|
||||||
skb->pkt_type=PACKET_BROADCAST;
|
skb->pkt_type=PACKET_BROADCAST;
|
||||||
else
|
else
|
||||||
skb->pkt_type=PACKET_MULTICAST;
|
skb->pkt_type=PACKET_MULTICAST;
|
||||||
|
@ -213,7 +213,7 @@ __be16 tr_type_trans(struct sk_buff *skb, struct net_device *dev)
|
||||||
{
|
{
|
||||||
skb->pkt_type=PACKET_MULTICAST;
|
skb->pkt_type=PACKET_MULTICAST;
|
||||||
}
|
}
|
||||||
else if(dev->flags & IFF_PROMISC)
|
else if(dev->flags & IFF_PROMISC)
|
||||||
{
|
{
|
||||||
if(memcmp(trh->daddr, dev->dev_addr, TR_ALEN))
|
if(memcmp(trh->daddr, dev->dev_addr, TR_ALEN))
|
||||||
skb->pkt_type=PACKET_OTHERHOST;
|
skb->pkt_type=PACKET_OTHERHOST;
|
||||||
|
@ -221,10 +221,10 @@ __be16 tr_type_trans(struct sk_buff *skb, struct net_device *dev)
|
||||||
|
|
||||||
if ((skb->pkt_type != PACKET_BROADCAST) &&
|
if ((skb->pkt_type != PACKET_BROADCAST) &&
|
||||||
(skb->pkt_type != PACKET_MULTICAST))
|
(skb->pkt_type != PACKET_MULTICAST))
|
||||||
tr_add_rif_info(trh,dev) ;
|
tr_add_rif_info(trh,dev) ;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Strip the SNAP header from ARP packets since we don't
|
* Strip the SNAP header from ARP packets since we don't
|
||||||
* pass them through to the 802.2/SNAP layers.
|
* pass them through to the 802.2/SNAP layers.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
@ -241,32 +241,32 @@ __be16 tr_type_trans(struct sk_buff *skb, struct net_device *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* We try to do source routing...
|
* We try to do source routing...
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void tr_source_route(struct sk_buff *skb,struct trh_hdr *trh,struct net_device *dev)
|
void tr_source_route(struct sk_buff *skb,struct trh_hdr *trh,struct net_device *dev)
|
||||||
{
|
{
|
||||||
int slack;
|
int slack;
|
||||||
unsigned int hash;
|
unsigned int hash;
|
||||||
struct rif_cache *entry;
|
struct rif_cache *entry;
|
||||||
unsigned char *olddata;
|
unsigned char *olddata;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
static const unsigned char mcast_func_addr[]
|
static const unsigned char mcast_func_addr[]
|
||||||
= {0xC0,0x00,0x00,0x04,0x00,0x00};
|
= {0xC0,0x00,0x00,0x04,0x00,0x00};
|
||||||
|
|
||||||
spin_lock_irqsave(&rif_lock, flags);
|
spin_lock_irqsave(&rif_lock, flags);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Broadcasts are single route as stated in RFC 1042
|
* Broadcasts are single route as stated in RFC 1042
|
||||||
*/
|
*/
|
||||||
if( (!memcmp(&(trh->daddr[0]),&(dev->broadcast[0]),TR_ALEN)) ||
|
if( (!memcmp(&(trh->daddr[0]),&(dev->broadcast[0]),TR_ALEN)) ||
|
||||||
(!memcmp(&(trh->daddr[0]),&(mcast_func_addr[0]), TR_ALEN)) )
|
(!memcmp(&(trh->daddr[0]),&(mcast_func_addr[0]), TR_ALEN)) )
|
||||||
{
|
{
|
||||||
trh->rcf=htons((((sizeof(trh->rcf)) << 8) & TR_RCF_LEN_MASK)
|
trh->rcf=htons((((sizeof(trh->rcf)) << 8) & TR_RCF_LEN_MASK)
|
||||||
| TR_RCF_FRAME2K | TR_RCF_LIMITED_BROADCAST);
|
| TR_RCF_FRAME2K | TR_RCF_LIMITED_BROADCAST);
|
||||||
trh->saddr[0]|=TR_RII;
|
trh->saddr[0]|=TR_RII;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
hash = rif_hash(trh->daddr);
|
hash = rif_hash(trh->daddr);
|
||||||
/*
|
/*
|
||||||
|
@ -277,7 +277,7 @@ void tr_source_route(struct sk_buff *skb,struct trh_hdr *trh,struct net_device *
|
||||||
/*
|
/*
|
||||||
* If we found an entry we can route the frame.
|
* If we found an entry we can route the frame.
|
||||||
*/
|
*/
|
||||||
if(entry)
|
if(entry)
|
||||||
{
|
{
|
||||||
#if TR_SR_DEBUG
|
#if TR_SR_DEBUG
|
||||||
printk("source routing for %02X:%02X:%02X:%02X:%02X:%02X\n",trh->daddr[0],
|
printk("source routing for %02X:%02X:%02X:%02X:%02X:%02X\n",trh->daddr[0],
|
||||||
|
@ -287,7 +287,7 @@ printk("source routing for %02X:%02X:%02X:%02X:%02X:%02X\n",trh->daddr[0],
|
||||||
{
|
{
|
||||||
trh->rcf=entry->rcf;
|
trh->rcf=entry->rcf;
|
||||||
memcpy(&trh->rseg[0],&entry->rseg[0],8*sizeof(unsigned short));
|
memcpy(&trh->rseg[0],&entry->rseg[0],8*sizeof(unsigned short));
|
||||||
trh->rcf^=htons(TR_RCF_DIR_BIT);
|
trh->rcf^=htons(TR_RCF_DIR_BIT);
|
||||||
trh->rcf&=htons(0x1fff); /* Issam Chehab <ichehab@madge1.demon.co.uk> */
|
trh->rcf&=htons(0x1fff); /* Issam Chehab <ichehab@madge1.demon.co.uk> */
|
||||||
|
|
||||||
trh->saddr[0]|=TR_RII;
|
trh->saddr[0]|=TR_RII;
|
||||||
|
@ -301,14 +301,14 @@ printk("source routing for %02X:%02X:%02X:%02X:%02X:%02X\n",trh->daddr[0],
|
||||||
}
|
}
|
||||||
entry->last_used=jiffies;
|
entry->last_used=jiffies;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Without the information we simply have to shout
|
* Without the information we simply have to shout
|
||||||
* on the wire. The replies should rapidly clean this
|
* on the wire. The replies should rapidly clean this
|
||||||
* situation up.
|
* situation up.
|
||||||
*/
|
*/
|
||||||
trh->rcf=htons((((sizeof(trh->rcf)) << 8) & TR_RCF_LEN_MASK)
|
trh->rcf=htons((((sizeof(trh->rcf)) << 8) & TR_RCF_LEN_MASK)
|
||||||
| TR_RCF_FRAME2K | TR_RCF_LIMITED_BROADCAST);
|
| TR_RCF_FRAME2K | TR_RCF_LIMITED_BROADCAST);
|
||||||
trh->saddr[0]|=TR_RII;
|
trh->saddr[0]|=TR_RII;
|
||||||
#if TR_SR_DEBUG
|
#if TR_SR_DEBUG
|
||||||
|
@ -320,7 +320,7 @@ printk("source routing for %02X:%02X:%02X:%02X:%02X:%02X\n",trh->daddr[0],
|
||||||
/* Compress the RIF here so we don't have to do it in the driver(s) */
|
/* Compress the RIF here so we don't have to do it in the driver(s) */
|
||||||
if (!(trh->saddr[0] & 0x80))
|
if (!(trh->saddr[0] & 0x80))
|
||||||
slack = 18;
|
slack = 18;
|
||||||
else
|
else
|
||||||
slack = 18 - ((ntohs(trh->rcf) & TR_RCF_LEN_MASK)>>8);
|
slack = 18 - ((ntohs(trh->rcf) & TR_RCF_LEN_MASK)>>8);
|
||||||
olddata = skb->data;
|
olddata = skb->data;
|
||||||
spin_unlock_irqrestore(&rif_lock, flags);
|
spin_unlock_irqrestore(&rif_lock, flags);
|
||||||
|
@ -333,7 +333,7 @@ printk("source routing for %02X:%02X:%02X:%02X:%02X:%02X\n",trh->daddr[0],
|
||||||
* We have learned some new RIF information for our source
|
* We have learned some new RIF information for our source
|
||||||
* routing.
|
* routing.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev)
|
static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev)
|
||||||
{
|
{
|
||||||
unsigned int hash, rii_p = 0;
|
unsigned int hash, rii_p = 0;
|
||||||
|
@ -343,29 +343,29 @@ static void tr_add_rif_info(struct trh_hdr *trh, struct net_device *dev)
|
||||||
|
|
||||||
spin_lock_irqsave(&rif_lock, flags);
|
spin_lock_irqsave(&rif_lock, flags);
|
||||||
saddr0 = trh->saddr[0];
|
saddr0 = trh->saddr[0];
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Firstly see if the entry exists
|
* Firstly see if the entry exists
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(trh->saddr[0] & TR_RII)
|
if(trh->saddr[0] & TR_RII)
|
||||||
{
|
{
|
||||||
trh->saddr[0]&=0x7f;
|
trh->saddr[0]&=0x7f;
|
||||||
if (((ntohs(trh->rcf) & TR_RCF_LEN_MASK) >> 8) > 2)
|
if (((ntohs(trh->rcf) & TR_RCF_LEN_MASK) >> 8) > 2)
|
||||||
{
|
{
|
||||||
rii_p = 1;
|
rii_p = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
hash = rif_hash(trh->saddr);
|
hash = rif_hash(trh->saddr);
|
||||||
for(entry=rif_table[hash];entry && memcmp(&(entry->addr[0]),&(trh->saddr[0]),TR_ALEN);entry=entry->next);
|
for(entry=rif_table[hash];entry && memcmp(&(entry->addr[0]),&(trh->saddr[0]),TR_ALEN);entry=entry->next);
|
||||||
|
|
||||||
if(entry==NULL)
|
if(entry==NULL)
|
||||||
{
|
{
|
||||||
#if TR_SR_DEBUG
|
#if TR_SR_DEBUG
|
||||||
printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
|
printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
|
||||||
trh->saddr[0],trh->saddr[1],trh->saddr[2],
|
trh->saddr[0],trh->saddr[1],trh->saddr[2],
|
||||||
trh->saddr[3],trh->saddr[4],trh->saddr[5],
|
trh->saddr[3],trh->saddr[4],trh->saddr[5],
|
||||||
ntohs(trh->rcf));
|
ntohs(trh->rcf));
|
||||||
#endif
|
#endif
|
||||||
/*
|
/*
|
||||||
|
@ -377,7 +377,7 @@ printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
|
||||||
*/
|
*/
|
||||||
entry=kmalloc(sizeof(struct rif_cache),GFP_ATOMIC);
|
entry=kmalloc(sizeof(struct rif_cache),GFP_ATOMIC);
|
||||||
|
|
||||||
if(!entry)
|
if(!entry)
|
||||||
{
|
{
|
||||||
printk(KERN_DEBUG "tr.c: Couldn't malloc rif cache entry !\n");
|
printk(KERN_DEBUG "tr.c: Couldn't malloc rif cache entry !\n");
|
||||||
spin_unlock_irqrestore(&rif_lock, flags);
|
spin_unlock_irqrestore(&rif_lock, flags);
|
||||||
|
@ -400,13 +400,13 @@ printk("adding rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
|
||||||
{
|
{
|
||||||
entry->local_ring = 1;
|
entry->local_ring = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else /* Y. Tahara added */
|
else /* Y. Tahara added */
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Update existing entries
|
* Update existing entries
|
||||||
*/
|
*/
|
||||||
if (!entry->local_ring)
|
if (!entry->local_ring)
|
||||||
if (entry->rcf != (trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK)) &&
|
if (entry->rcf != (trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK)) &&
|
||||||
!(trh->rcf & htons(TR_RCF_BROADCAST_MASK)))
|
!(trh->rcf & htons(TR_RCF_BROADCAST_MASK)))
|
||||||
{
|
{
|
||||||
|
@ -417,9 +417,9 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
|
||||||
ntohs(trh->rcf));
|
ntohs(trh->rcf));
|
||||||
#endif
|
#endif
|
||||||
entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK);
|
entry->rcf = trh->rcf & htons((unsigned short)~TR_RCF_BROADCAST_MASK);
|
||||||
memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short));
|
memcpy(&(entry->rseg[0]),&(trh->rseg[0]),8*sizeof(unsigned short));
|
||||||
}
|
}
|
||||||
entry->last_used=jiffies;
|
entry->last_used=jiffies;
|
||||||
}
|
}
|
||||||
trh->saddr[0]=saddr0; /* put the routing indicator back for tcpdump */
|
trh->saddr[0]=saddr0; /* put the routing indicator back for tcpdump */
|
||||||
spin_unlock_irqrestore(&rif_lock, flags);
|
spin_unlock_irqrestore(&rif_lock, flags);
|
||||||
|
@ -429,16 +429,16 @@ printk("updating rif_entry: addr:%02X:%02X:%02X:%02X:%02X:%02X rcf:%04X\n",
|
||||||
* Scan the cache with a timer and see what we need to throw out.
|
* Scan the cache with a timer and see what we need to throw out.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void rif_check_expire(unsigned long dummy)
|
static void rif_check_expire(unsigned long dummy)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
unsigned long flags, next_interval = jiffies + sysctl_tr_rif_timeout/2;
|
unsigned long flags, next_interval = jiffies + sysctl_tr_rif_timeout/2;
|
||||||
|
|
||||||
spin_lock_irqsave(&rif_lock, flags);
|
spin_lock_irqsave(&rif_lock, flags);
|
||||||
|
|
||||||
for(i =0; i < RIF_TABLE_SIZE; i++) {
|
for(i =0; i < RIF_TABLE_SIZE; i++) {
|
||||||
struct rif_cache *entry, **pentry;
|
struct rif_cache *entry, **pentry;
|
||||||
|
|
||||||
pentry = rif_table+i;
|
pentry = rif_table+i;
|
||||||
while((entry=*pentry) != NULL) {
|
while((entry=*pentry) != NULL) {
|
||||||
unsigned long expires
|
unsigned long expires
|
||||||
|
@ -455,7 +455,7 @@ static void rif_check_expire(unsigned long dummy)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock_irqrestore(&rif_lock, flags);
|
spin_unlock_irqrestore(&rif_lock, flags);
|
||||||
|
|
||||||
mod_timer(&rif_timer, next_interval);
|
mod_timer(&rif_timer, next_interval);
|
||||||
|
@ -466,7 +466,7 @@ static void rif_check_expire(unsigned long dummy)
|
||||||
* Generate the /proc/net information for the token ring RIF
|
* Generate the /proc/net information for the token ring RIF
|
||||||
* routing.
|
* routing.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef CONFIG_PROC_FS
|
#ifdef CONFIG_PROC_FS
|
||||||
|
|
||||||
static struct rif_cache *rif_get_idx(loff_t pos)
|
static struct rif_cache *rif_get_idx(loff_t pos)
|
||||||
|
@ -475,7 +475,7 @@ static struct rif_cache *rif_get_idx(loff_t pos)
|
||||||
struct rif_cache *entry;
|
struct rif_cache *entry;
|
||||||
loff_t off = 0;
|
loff_t off = 0;
|
||||||
|
|
||||||
for(i = 0; i < RIF_TABLE_SIZE; i++)
|
for(i = 0; i < RIF_TABLE_SIZE; i++)
|
||||||
for(entry = rif_table[i]; entry; entry = entry->next) {
|
for(entry = rif_table[i]; entry; entry = entry->next) {
|
||||||
if (off == pos)
|
if (off == pos)
|
||||||
return entry;
|
return entry;
|
||||||
|
@ -504,7 +504,7 @@ static void *rif_seq_next(struct seq_file *seq, void *v, loff_t *pos)
|
||||||
goto scan;
|
goto scan;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ent->next)
|
if (ent->next)
|
||||||
return ent->next;
|
return ent->next;
|
||||||
|
|
||||||
i = rif_hash(ent->addr);
|
i = rif_hash(ent->addr);
|
||||||
|
@ -541,13 +541,13 @@ static int rif_seq_show(struct seq_file *seq, void *v)
|
||||||
ttl/HZ);
|
ttl/HZ);
|
||||||
|
|
||||||
if (entry->local_ring)
|
if (entry->local_ring)
|
||||||
seq_puts(seq, "local\n");
|
seq_puts(seq, "local\n");
|
||||||
else {
|
else {
|
||||||
|
|
||||||
seq_printf(seq, "%04X", ntohs(entry->rcf));
|
seq_printf(seq, "%04X", ntohs(entry->rcf));
|
||||||
rcf_len = ((ntohs(entry->rcf) & TR_RCF_LEN_MASK)>>8)-2;
|
rcf_len = ((ntohs(entry->rcf) & TR_RCF_LEN_MASK)>>8)-2;
|
||||||
if (rcf_len)
|
if (rcf_len)
|
||||||
rcf_len >>= 1;
|
rcf_len >>= 1;
|
||||||
for(j = 1; j < rcf_len; j++) {
|
for(j = 1; j < rcf_len; j++) {
|
||||||
if(j==1) {
|
if(j==1) {
|
||||||
segment=ntohs(entry->rseg[j-1])>>4;
|
segment=ntohs(entry->rseg[j-1])>>4;
|
||||||
|
@ -559,7 +559,7 @@ static int rif_seq_show(struct seq_file *seq, void *v)
|
||||||
}
|
}
|
||||||
seq_putc(seq, '\n');
|
seq_putc(seq, '\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -591,7 +591,7 @@ static void tr_setup(struct net_device *dev)
|
||||||
/*
|
/*
|
||||||
* Configure and register
|
* Configure and register
|
||||||
*/
|
*/
|
||||||
|
|
||||||
dev->hard_header = tr_header;
|
dev->hard_header = tr_header;
|
||||||
dev->rebuild_header = tr_rebuild_header;
|
dev->rebuild_header = tr_rebuild_header;
|
||||||
|
|
||||||
|
@ -600,7 +600,7 @@ static void tr_setup(struct net_device *dev)
|
||||||
dev->mtu = 2000;
|
dev->mtu = 2000;
|
||||||
dev->addr_len = TR_ALEN;
|
dev->addr_len = TR_ALEN;
|
||||||
dev->tx_queue_len = 100; /* Long queues on tr */
|
dev->tx_queue_len = 100; /* Long queues on tr */
|
||||||
|
|
||||||
memset(dev->broadcast,0xFF, TR_ALEN);
|
memset(dev->broadcast,0xFF, TR_ALEN);
|
||||||
|
|
||||||
/* New-style flags. */
|
/* New-style flags. */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче