[ATM]: [lec] indent, comment and whitespace cleanup [continued]
Signed-off-by: Chas Williams <chas@cmf.nrl.navy.mil> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d44f77466c
commit
1fa9961d63
241
net/atm/lec.c
241
net/atm/lec.c
|
@ -1418,7 +1418,6 @@ static void lane2_associate_ind(struct net_device *dev, u8 *mac_addr,
|
|||
*
|
||||
* lec_arpc.c was added here when making
|
||||
* lane client modular. October 1997
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
|
@ -1429,7 +1428,6 @@ static void lane2_associate_ind(struct net_device *dev, u8 *mac_addr,
|
|||
#include <linux/inetdevice.h>
|
||||
#include <net/route.h>
|
||||
|
||||
|
||||
#if 0
|
||||
#define DPRINTK(format,args...)
|
||||
/*
|
||||
|
@ -1452,8 +1450,7 @@ static void lec_arp_expire_arp(unsigned long data);
|
|||
/*
|
||||
* Initialization of arp-cache
|
||||
*/
|
||||
static void
|
||||
lec_arp_init(struct lec_priv *priv)
|
||||
static void lec_arp_init(struct lec_priv *priv)
|
||||
{
|
||||
unsigned short i;
|
||||
|
||||
|
@ -1468,8 +1465,7 @@ lec_arp_init(struct lec_priv *priv)
|
|||
add_timer(&priv->lec_arp_timer);
|
||||
}
|
||||
|
||||
static void
|
||||
lec_arp_clear_vccs(struct lec_arp_table *entry)
|
||||
static void lec_arp_clear_vccs(struct lec_arp_table *entry)
|
||||
{
|
||||
if (entry->vcc) {
|
||||
struct atm_vcc *vcc = entry->vcc;
|
||||
|
@ -1524,8 +1520,7 @@ lec_arp_add(struct lec_priv *priv, struct lec_arp_table *to_add)
|
|||
* Remove entry from lec_arp_table
|
||||
*/
|
||||
static int
|
||||
lec_arp_remove(struct lec_priv *priv,
|
||||
struct lec_arp_table *to_remove)
|
||||
lec_arp_remove(struct lec_priv *priv, struct lec_arp_table *to_remove)
|
||||
{
|
||||
unsigned short place;
|
||||
struct lec_arp_table *tmp;
|
||||
|
@ -1556,8 +1551,10 @@ lec_arp_remove(struct lec_priv *priv,
|
|||
* ESI_FLUSH_PENDING, ESI_FORWARD_DIRECT
|
||||
*/
|
||||
for (place = 0; place < LEC_ARP_TABLE_SIZE; place++) {
|
||||
for(tmp = priv->lec_arp_tables[place]; tmp != NULL; tmp = tmp->next) {
|
||||
if (memcmp(tmp->atm_addr, to_remove->atm_addr,
|
||||
for (tmp = priv->lec_arp_tables[place]; tmp != NULL;
|
||||
tmp = tmp->next) {
|
||||
if (memcmp
|
||||
(tmp->atm_addr, to_remove->atm_addr,
|
||||
ATM_ESA_LEN) == 0) {
|
||||
remove_vcc = 0;
|
||||
break;
|
||||
|
@ -1577,8 +1574,7 @@ lec_arp_remove(struct lec_priv *priv,
|
|||
}
|
||||
|
||||
#if DEBUG_ARP_TABLE
|
||||
static char*
|
||||
get_status_string(unsigned char st)
|
||||
static char *get_status_string(unsigned char st)
|
||||
{
|
||||
switch (st) {
|
||||
case ESI_UNKNOWN:
|
||||
|
@ -1597,8 +1593,7 @@ get_status_string(unsigned char st)
|
|||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
dump_arp_table(struct lec_priv *priv)
|
||||
static void dump_arp_table(struct lec_priv *priv)
|
||||
{
|
||||
#if DEBUG_ARP_TABLE
|
||||
int i, j, offset;
|
||||
|
@ -1612,7 +1607,6 @@ dump_arp_table(struct lec_priv *priv)
|
|||
(struct lec_arp_table *)priv->lec_no_forward;
|
||||
struct lec_arp_table *mcast_fwds = priv->mcast_fwds;
|
||||
|
||||
|
||||
printk("Dump %p:\n", priv);
|
||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
||||
rulla = lec_arp_tables[i];
|
||||
|
@ -1635,11 +1629,13 @@ dump_arp_table(struct lec_priv *priv)
|
|||
"Vcc vpi:%d vci:%d, Recv_vcc vpi:%d vci:%d Last_used:%lx, Timestamp:%lx, No_tries:%d ",
|
||||
rulla->vcc ? rulla->vcc->vpi : 0,
|
||||
rulla->vcc ? rulla->vcc->vci : 0,
|
||||
rulla->recv_vcc?rulla->recv_vcc->vpi:0,
|
||||
rulla->recv_vcc?rulla->recv_vcc->vci:0,
|
||||
rulla->last_used,
|
||||
rulla->recv_vcc ? rulla->recv_vcc->
|
||||
vpi : 0,
|
||||
rulla->recv_vcc ? rulla->recv_vcc->
|
||||
vci : 0, rulla->last_used,
|
||||
rulla->timestamp, rulla->no_tries);
|
||||
offset+=sprintf(buf+offset,
|
||||
offset +=
|
||||
sprintf(buf + offset,
|
||||
"Flags:%x, Packets_flooded:%x, Status: %s ",
|
||||
rulla->flags, rulla->packets_flooded,
|
||||
get_status_string(rulla->status));
|
||||
|
@ -1749,8 +1745,7 @@ dump_arp_table(struct lec_priv *priv)
|
|||
/*
|
||||
* Destruction of arp-cache
|
||||
*/
|
||||
static void
|
||||
lec_arp_destroy(struct lec_priv *priv)
|
||||
static void lec_arp_destroy(struct lec_priv *priv)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct lec_arp_table *entry, *next;
|
||||
|
@ -1764,7 +1759,8 @@ lec_arp_destroy(struct lec_priv *priv)
|
|||
|
||||
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
||||
for(entry = priv->lec_arp_tables[i]; entry != NULL; entry=next) {
|
||||
for (entry = priv->lec_arp_tables[i]; entry != NULL;
|
||||
entry = next) {
|
||||
next = entry->next;
|
||||
lec_arp_remove(priv, entry);
|
||||
kfree(entry);
|
||||
|
@ -1803,12 +1799,10 @@ lec_arp_destroy(struct lec_priv *priv)
|
|||
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Find entry by mac_address
|
||||
*/
|
||||
static struct lec_arp_table*
|
||||
lec_arp_find(struct lec_priv *priv,
|
||||
static struct lec_arp_table *lec_arp_find(struct lec_priv *priv,
|
||||
unsigned char *mac_addr)
|
||||
{
|
||||
unsigned short place;
|
||||
|
@ -1829,8 +1823,8 @@ lec_arp_find(struct lec_priv *priv,
|
|||
return NULL;
|
||||
}
|
||||
|
||||
static struct lec_arp_table*
|
||||
make_entry(struct lec_priv *priv, unsigned char *mac_addr)
|
||||
static struct lec_arp_table *make_entry(struct lec_priv *priv,
|
||||
unsigned char *mac_addr)
|
||||
{
|
||||
struct lec_arp_table *to_return;
|
||||
|
||||
|
@ -1849,13 +1843,8 @@ make_entry(struct lec_priv *priv, unsigned char *mac_addr)
|
|||
return to_return;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* Arp sent timer expired
|
||||
*
|
||||
*/
|
||||
static void
|
||||
lec_arp_expire_arp(unsigned long data)
|
||||
/* Arp sent timer expired */
|
||||
static void lec_arp_expire_arp(unsigned long data)
|
||||
{
|
||||
struct lec_arp_table *entry;
|
||||
|
||||
|
@ -1865,22 +1854,19 @@ lec_arp_expire_arp(unsigned long data)
|
|||
if (entry->status == ESI_ARP_PENDING) {
|
||||
if (entry->no_tries <= entry->priv->max_retry_count) {
|
||||
if (entry->is_rdesc)
|
||||
send_to_lecd(entry->priv, l_rdesc_arp_xmt, entry->mac_addr, NULL, NULL);
|
||||
send_to_lecd(entry->priv, l_rdesc_arp_xmt,
|
||||
entry->mac_addr, NULL, NULL);
|
||||
else
|
||||
send_to_lecd(entry->priv, l_arp_xmt, entry->mac_addr, NULL, NULL);
|
||||
send_to_lecd(entry->priv, l_arp_xmt,
|
||||
entry->mac_addr, NULL, NULL);
|
||||
entry->no_tries++;
|
||||
}
|
||||
mod_timer(&entry->timer, jiffies + (1 * HZ));
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
* Unknown/unused vcc expire, remove associated entry
|
||||
*
|
||||
*/
|
||||
static void
|
||||
lec_arp_expire_vcc(unsigned long data)
|
||||
/* Unknown/unused vcc expire, remove associated entry */
|
||||
static void lec_arp_expire_vcc(unsigned long data)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct lec_arp_table *to_remove = (struct lec_arp_table *)data;
|
||||
|
@ -1893,7 +1879,8 @@ lec_arp_expire_vcc(unsigned long data)
|
|||
to_remove, priv,
|
||||
to_remove->vcc ? to_remove->recv_vcc->vpi : 0,
|
||||
to_remove->vcc ? to_remove->recv_vcc->vci : 0);
|
||||
DPRINTK("eo:%p nf:%p\n",priv->lec_arp_empty_ones,priv->lec_no_forward);
|
||||
DPRINTK("eo:%p nf:%p\n", priv->lec_arp_empty_ones,
|
||||
priv->lec_no_forward);
|
||||
|
||||
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||
if (to_remove == priv->lec_arp_empty_ones)
|
||||
|
@ -1938,8 +1925,7 @@ lec_arp_expire_vcc(unsigned long data)
|
|||
* to ESI_FORWARD_DIRECT. This causes the flush period to end
|
||||
* regardless of the progress of the flush protocol.
|
||||
*/
|
||||
static void
|
||||
lec_arp_check_expire(unsigned long data)
|
||||
static void lec_arp_check_expire(unsigned long data)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct lec_priv *priv = (struct lec_priv *)data;
|
||||
|
@ -1963,10 +1949,9 @@ lec_arp_check_expire(unsigned long data)
|
|||
|
||||
DPRINTK("About to expire: %lx - %lx > %lx\n",
|
||||
now, entry->last_used, time_to_check);
|
||||
if( time_after(now, entry->last_used+
|
||||
time_to_check) &&
|
||||
!(entry->flags & LEC_PERMANENT_FLAG) &&
|
||||
!(entry->mac_addr[0] & 0x01) ) { /* LANE2: 7.1.20 */
|
||||
if (time_after(now, entry->last_used + time_to_check)
|
||||
&& !(entry->flags & LEC_PERMANENT_FLAG)
|
||||
&& !(entry->mac_addr[0] & 0x01)) { /* LANE2: 7.1.20 */
|
||||
/* Remove entry */
|
||||
DPRINTK("LEC:Entry timed out\n");
|
||||
next = entry->next;
|
||||
|
@ -1979,11 +1964,15 @@ lec_arp_check_expire(unsigned long data)
|
|||
entry->status == ESI_ARP_PENDING)
|
||||
&& time_after_eq(now,
|
||||
entry->timestamp +
|
||||
priv->max_unknown_frame_time)) {
|
||||
priv->
|
||||
max_unknown_frame_time)) {
|
||||
entry->timestamp = jiffies;
|
||||
entry->packets_flooded = 0;
|
||||
if (entry->status == ESI_VC_PENDING)
|
||||
send_to_lecd(priv, l_svc_setup, entry->mac_addr, entry->atm_addr, NULL);
|
||||
send_to_lecd(priv, l_svc_setup,
|
||||
entry->mac_addr,
|
||||
entry->atm_addr,
|
||||
NULL);
|
||||
}
|
||||
if (entry->status == ESI_FLUSH_PENDING
|
||||
&&
|
||||
|
@ -1991,11 +1980,13 @@ lec_arp_check_expire(unsigned long data)
|
|||
priv->path_switching_delay)) {
|
||||
struct sk_buff *skb;
|
||||
|
||||
while ((skb = skb_dequeue(&entry->tx_wait)) != NULL)
|
||||
lec_send(entry->vcc, skb, entry->priv);
|
||||
while ((skb =
|
||||
skb_dequeue(&entry->tx_wait)) !=
|
||||
NULL)
|
||||
lec_send(entry->vcc, skb,
|
||||
entry->priv);
|
||||
entry->last_used = jiffies;
|
||||
entry->status =
|
||||
ESI_FORWARD_DIRECT;
|
||||
entry->status = ESI_FORWARD_DIRECT;
|
||||
}
|
||||
entry = entry->next;
|
||||
}
|
||||
|
@ -2005,13 +1996,14 @@ lec_arp_check_expire(unsigned long data)
|
|||
|
||||
mod_timer(&priv->lec_arp_timer, jiffies + LEC_ARP_REFRESH_INTERVAL);
|
||||
}
|
||||
|
||||
/*
|
||||
* Try to find vcc where mac_address is attached.
|
||||
*
|
||||
*/
|
||||
static struct atm_vcc*
|
||||
lec_arp_resolve(struct lec_priv *priv, unsigned char *mac_to_find,
|
||||
int is_rdesc, struct lec_arp_table **ret_entry)
|
||||
static struct atm_vcc *lec_arp_resolve(struct lec_priv *priv,
|
||||
unsigned char *mac_to_find, int is_rdesc,
|
||||
struct lec_arp_table **ret_entry)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct lec_arp_table *entry;
|
||||
|
@ -2042,29 +2034,35 @@ lec_arp_resolve(struct lec_priv *priv, unsigned char *mac_to_find,
|
|||
found = entry->vcc;
|
||||
goto out;
|
||||
}
|
||||
/* If the LE_ARP cache entry is still pending, reset count to 0
|
||||
/*
|
||||
* If the LE_ARP cache entry is still pending, reset count to 0
|
||||
* so another LE_ARP request can be made for this frame.
|
||||
*/
|
||||
if (entry->status == ESI_ARP_PENDING) {
|
||||
entry->no_tries = 0;
|
||||
}
|
||||
/* Data direct VC not yet set up, check to see if the unknown
|
||||
frame count is greater than the limit. If the limit has
|
||||
not been reached, allow the caller to send packet to
|
||||
BUS. */
|
||||
/*
|
||||
* Data direct VC not yet set up, check to see if the unknown
|
||||
* frame count is greater than the limit. If the limit has
|
||||
* not been reached, allow the caller to send packet to
|
||||
* BUS.
|
||||
*/
|
||||
if (entry->status != ESI_FLUSH_PENDING &&
|
||||
entry->packets_flooded<priv->maximum_unknown_frame_count) {
|
||||
entry->packets_flooded <
|
||||
priv->maximum_unknown_frame_count) {
|
||||
entry->packets_flooded++;
|
||||
DPRINTK("LEC_ARP: Flooding..\n");
|
||||
found = priv->mcast_vcc;
|
||||
goto out;
|
||||
}
|
||||
/* We got here because entry->status == ESI_FLUSH_PENDING
|
||||
/*
|
||||
* We got here because entry->status == ESI_FLUSH_PENDING
|
||||
* or BUS flood limit was reached for an entry which is
|
||||
* in ESI_ARP_PENDING or ESI_VC_PENDING state.
|
||||
*/
|
||||
*ret_entry = entry;
|
||||
DPRINTK("lec: entry->status %d entry->vcc %p\n", entry->status, entry->vcc);
|
||||
DPRINTK("lec: entry->status %d entry->vcc %p\n", entry->status,
|
||||
entry->vcc);
|
||||
found = NULL;
|
||||
} else {
|
||||
/* No matching entry was found */
|
||||
|
@ -2082,7 +2080,8 @@ lec_arp_resolve(struct lec_priv *priv, unsigned char *mac_to_find,
|
|||
entry->last_used = entry->timestamp = jiffies;
|
||||
entry->is_rdesc = is_rdesc;
|
||||
if (entry->is_rdesc)
|
||||
send_to_lecd(priv, l_rdesc_arp_xmt, mac_to_find, NULL, NULL);
|
||||
send_to_lecd(priv, l_rdesc_arp_xmt, mac_to_find, NULL,
|
||||
NULL);
|
||||
else
|
||||
send_to_lecd(priv, l_arp_xmt, mac_to_find, NULL, NULL);
|
||||
entry->timer.expires = jiffies + (1 * HZ);
|
||||
|
@ -2107,7 +2106,8 @@ lec_addr_delete(struct lec_priv *priv, unsigned char *atm_addr,
|
|||
DPRINTK("lec_addr_delete\n");
|
||||
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
||||
for(entry = priv->lec_arp_tables[i]; entry != NULL; entry = next) {
|
||||
for (entry = priv->lec_arp_tables[i]; entry != NULL;
|
||||
entry = next) {
|
||||
next = entry->next;
|
||||
if (!memcmp(atm_addr, entry->atm_addr, ATM_ESA_LEN)
|
||||
&& (permanent ||
|
||||
|
@ -2143,7 +2143,8 @@ lec_arp_update(struct lec_priv *priv, unsigned char *mac_addr,
|
|||
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||
entry = lec_arp_find(priv, mac_addr);
|
||||
if (entry == NULL && targetless_le_arp)
|
||||
goto out; /* LANE2: ignore targetless LE_ARPs for which
|
||||
goto out; /*
|
||||
* LANE2: ignore targetless LE_ARPs for which
|
||||
* we have no entry in the cache. 7.1.30
|
||||
*/
|
||||
if (priv->lec_arp_empty_ones) {
|
||||
|
@ -2204,8 +2205,7 @@ lec_arp_update(struct lec_priv *priv, unsigned char *mac_addr,
|
|||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
||||
for (tmp = priv->lec_arp_tables[i]; tmp; tmp = tmp->next) {
|
||||
if (entry != tmp &&
|
||||
!memcmp(tmp->atm_addr, atm_addr,
|
||||
ATM_ESA_LEN)) {
|
||||
!memcmp(tmp->atm_addr, atm_addr, ATM_ESA_LEN)) {
|
||||
/* Vcc to this host exists */
|
||||
if (tmp->status > ESI_VC_PENDING) {
|
||||
/*
|
||||
|
@ -2224,10 +2224,10 @@ lec_arp_update(struct lec_priv *priv, unsigned char *mac_addr,
|
|||
entry->flags |= LEC_REMOTE_FLAG;
|
||||
else
|
||||
entry->flags &= ~LEC_REMOTE_FLAG;
|
||||
if (entry->status == ESI_ARP_PENDING ||
|
||||
entry->status == ESI_UNKNOWN) {
|
||||
if (entry->status == ESI_ARP_PENDING || entry->status == ESI_UNKNOWN) {
|
||||
entry->status = ESI_VC_PENDING;
|
||||
send_to_lecd(priv, l_svc_setup, entry->mac_addr, atm_addr, NULL);
|
||||
send_to_lecd(priv, l_svc_setup, entry->mac_addr, atm_addr,
|
||||
NULL);
|
||||
}
|
||||
DPRINTK("After update2\n");
|
||||
dump_arp_table(priv);
|
||||
|
@ -2273,9 +2273,13 @@ lec_vcc_added(struct lec_priv *priv, struct atmlec_ioc *ioc_data,
|
|||
priv->mcast_fwds = entry;
|
||||
goto out;
|
||||
} else if (ioc_data->receive == 1) {
|
||||
/* Vcc which we don't want to make default vcc, attach it
|
||||
anyway. */
|
||||
DPRINTK("LEC_ARP:Attaching data direct, not default :%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\n",
|
||||
/*
|
||||
* Vcc which we don't want to make default vcc,
|
||||
* attach it anyway.
|
||||
*/
|
||||
DPRINTK
|
||||
("LEC_ARP:Attaching data direct, not default: "
|
||||
"%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\n",
|
||||
ioc_data->atm_addr[0], ioc_data->atm_addr[1],
|
||||
ioc_data->atm_addr[2], ioc_data->atm_addr[3],
|
||||
ioc_data->atm_addr[4], ioc_data->atm_addr[5],
|
||||
|
@ -2302,7 +2306,9 @@ lec_vcc_added(struct lec_priv *priv, struct atmlec_ioc *ioc_data,
|
|||
dump_arp_table(priv);
|
||||
goto out;
|
||||
}
|
||||
DPRINTK("LEC_ARP:Attaching data direct, default:%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\n",
|
||||
DPRINTK
|
||||
("LEC_ARP:Attaching data direct, default: "
|
||||
"%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x\n",
|
||||
ioc_data->atm_addr[0], ioc_data->atm_addr[1],
|
||||
ioc_data->atm_addr[2], ioc_data->atm_addr[3],
|
||||
ioc_data->atm_addr[4], ioc_data->atm_addr[5],
|
||||
|
@ -2314,13 +2320,16 @@ lec_vcc_added(struct lec_priv *priv, struct atmlec_ioc *ioc_data,
|
|||
ioc_data->atm_addr[16], ioc_data->atm_addr[17],
|
||||
ioc_data->atm_addr[18], ioc_data->atm_addr[19]);
|
||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
||||
for (entry = priv->lec_arp_tables[i]; entry; entry=entry->next) {
|
||||
if (memcmp(ioc_data->atm_addr, entry->atm_addr,
|
||||
for (entry = priv->lec_arp_tables[i]; entry;
|
||||
entry = entry->next) {
|
||||
if (memcmp
|
||||
(ioc_data->atm_addr, entry->atm_addr,
|
||||
ATM_ESA_LEN) == 0) {
|
||||
DPRINTK("LEC_ARP: Attaching data direct\n");
|
||||
DPRINTK("Currently -> Vcc: %d, Rvcc:%d\n",
|
||||
entry->vcc ? entry->vcc->vci : 0,
|
||||
entry->recv_vcc?entry->recv_vcc->vci:0);
|
||||
entry->recv_vcc ? entry->recv_vcc->
|
||||
vci : 0);
|
||||
found_entry = 1;
|
||||
del_timer(&entry->timer);
|
||||
entry->vcc = vcc;
|
||||
|
@ -2342,15 +2351,17 @@ lec_vcc_added(struct lec_priv *priv, struct atmlec_ioc *ioc_data,
|
|||
#endif
|
||||
}
|
||||
} else {
|
||||
/* They were forming a connection
|
||||
to us, and we to them. Our
|
||||
ATM address is numerically lower
|
||||
than theirs, so we make connection
|
||||
we formed into default VCC (8.1.11).
|
||||
Connection they made gets torn
|
||||
down. This might confuse some
|
||||
clients. Can be changed if
|
||||
someone reports trouble... */
|
||||
/*
|
||||
* They were forming a connection
|
||||
* to us, and we to them. Our
|
||||
* ATM address is numerically lower
|
||||
* than theirs, so we make connection
|
||||
* we formed into default VCC (8.1.11).
|
||||
* Connection they made gets torn
|
||||
* down. This might confuse some
|
||||
* clients. Can be changed if
|
||||
* someone reports trouble...
|
||||
*/
|
||||
;
|
||||
}
|
||||
}
|
||||
|
@ -2361,8 +2372,10 @@ lec_vcc_added(struct lec_priv *priv, struct atmlec_ioc *ioc_data,
|
|||
dump_arp_table(priv);
|
||||
goto out;
|
||||
}
|
||||
/* Not found, snatch address from first data packet that arrives from
|
||||
this vcc */
|
||||
/*
|
||||
* Not found, snatch address from first data packet that arrives
|
||||
* from this vcc
|
||||
*/
|
||||
entry = make_entry(priv, bus_mac);
|
||||
if (!entry)
|
||||
goto out;
|
||||
|
@ -2382,8 +2395,7 @@ out:
|
|||
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
||||
}
|
||||
|
||||
static void
|
||||
lec_flush_complete(struct lec_priv *priv, unsigned long tran_id)
|
||||
static void lec_flush_complete(struct lec_priv *priv, unsigned long tran_id)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct lec_arp_table *entry;
|
||||
|
@ -2392,12 +2404,14 @@ lec_flush_complete(struct lec_priv *priv, unsigned long tran_id)
|
|||
DPRINTK("LEC:lec_flush_complete %lx\n", tran_id);
|
||||
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
||||
for (entry = priv->lec_arp_tables[i]; entry; entry=entry->next) {
|
||||
if (entry->flush_tran_id == tran_id &&
|
||||
entry->status == ESI_FLUSH_PENDING) {
|
||||
for (entry = priv->lec_arp_tables[i]; entry;
|
||||
entry = entry->next) {
|
||||
if (entry->flush_tran_id == tran_id
|
||||
&& entry->status == ESI_FLUSH_PENDING) {
|
||||
struct sk_buff *skb;
|
||||
|
||||
while ((skb = skb_dequeue(&entry->tx_wait)) != NULL)
|
||||
while ((skb =
|
||||
skb_dequeue(&entry->tx_wait)) != NULL)
|
||||
lec_send(entry->vcc, skb, entry->priv);
|
||||
entry->status = ESI_FORWARD_DIRECT;
|
||||
DPRINTK("LEC_ARP: Flushed\n");
|
||||
|
@ -2418,20 +2432,23 @@ lec_set_flush_tran_id(struct lec_priv *priv,
|
|||
|
||||
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++)
|
||||
for(entry = priv->lec_arp_tables[i]; entry; entry=entry->next)
|
||||
for (entry = priv->lec_arp_tables[i]; entry;
|
||||
entry = entry->next)
|
||||
if (!memcmp(atm_addr, entry->atm_addr, ATM_ESA_LEN)) {
|
||||
entry->flush_tran_id = tran_id;
|
||||
DPRINTK("Set flush transaction id to %lx for %p\n",tran_id,entry);
|
||||
DPRINTK
|
||||
("Set flush transaction id to %lx for %p\n",
|
||||
tran_id, entry);
|
||||
}
|
||||
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
||||
}
|
||||
|
||||
static int
|
||||
lec_mcast_make(struct lec_priv *priv, struct atm_vcc *vcc)
|
||||
static int lec_mcast_make(struct lec_priv *priv, struct atm_vcc *vcc)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned char mac_addr[] = {
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
||||
};
|
||||
struct lec_arp_table *to_add;
|
||||
struct lec_vcc_priv *vpriv;
|
||||
int err = 0;
|
||||
|
@ -2463,8 +2480,7 @@ out:
|
|||
return err;
|
||||
}
|
||||
|
||||
static void
|
||||
lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc)
|
||||
static void lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct lec_arp_table *entry, *next;
|
||||
|
@ -2494,8 +2510,7 @@ lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc)
|
|||
lec_arp_clear_vccs(entry);
|
||||
del_timer(&entry->timer);
|
||||
kfree(entry);
|
||||
}
|
||||
else { /* put it back to the list */
|
||||
} else { /* put it back to the list */
|
||||
entry->next = priv->lec_arp_empty_ones;
|
||||
priv->lec_arp_empty_ones = entry;
|
||||
}
|
||||
|
@ -2510,8 +2525,7 @@ lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc)
|
|||
lec_arp_clear_vccs(entry);
|
||||
del_timer(&entry->timer);
|
||||
kfree(entry);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
entry->next = priv->lec_no_forward;
|
||||
priv->lec_no_forward = entry;
|
||||
}
|
||||
|
@ -2526,8 +2540,7 @@ lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc)
|
|||
lec_arp_clear_vccs(entry);
|
||||
/* No timer, LANEv2 7.1.20 and 2.3.5.3 */
|
||||
kfree(entry);
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
entry->next = priv->mcast_fwds;
|
||||
priv->mcast_fwds = entry;
|
||||
}
|
||||
|
@ -2549,7 +2562,8 @@ lec_arp_check_empties(struct lec_priv *priv,
|
|||
#ifdef CONFIG_TR
|
||||
struct lecdatahdr_8025 *tr_hdr = (struct lecdatahdr_8025 *)skb->data;
|
||||
|
||||
if (priv->is_trdev) src = tr_hdr->h_source;
|
||||
if (priv->is_trdev)
|
||||
src = tr_hdr->h_source;
|
||||
else
|
||||
#endif
|
||||
src = hdr->h_source;
|
||||
|
@ -2593,4 +2607,5 @@ lec_arp_check_empties(struct lec_priv *priv,
|
|||
out:
|
||||
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
||||
}
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
|
Loading…
Reference in New Issue