[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:
committed by
David S. Miller
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
|
* lec_arpc.c was added here when making
|
||||||
* lane client modular. October 1997
|
* lane client modular. October 1997
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/types.h>
|
#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 <linux/inetdevice.h>
|
||||||
#include <net/route.h>
|
#include <net/route.h>
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
#define DPRINTK(format,args...)
|
#define DPRINTK(format,args...)
|
||||||
/*
|
/*
|
||||||
@@ -1452,8 +1450,7 @@ static void lec_arp_expire_arp(unsigned long data);
|
|||||||
/*
|
/*
|
||||||
* Initialization of arp-cache
|
* Initialization of arp-cache
|
||||||
*/
|
*/
|
||||||
static void
|
static void lec_arp_init(struct lec_priv *priv)
|
||||||
lec_arp_init(struct lec_priv *priv)
|
|
||||||
{
|
{
|
||||||
unsigned short i;
|
unsigned short i;
|
||||||
|
|
||||||
@@ -1468,8 +1465,7 @@ lec_arp_init(struct lec_priv *priv)
|
|||||||
add_timer(&priv->lec_arp_timer);
|
add_timer(&priv->lec_arp_timer);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void lec_arp_clear_vccs(struct lec_arp_table *entry)
|
||||||
lec_arp_clear_vccs(struct lec_arp_table *entry)
|
|
||||||
{
|
{
|
||||||
if (entry->vcc) {
|
if (entry->vcc) {
|
||||||
struct atm_vcc *vcc = 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
|
* Remove entry from lec_arp_table
|
||||||
*/
|
*/
|
||||||
static int
|
static int
|
||||||
lec_arp_remove(struct lec_priv *priv,
|
lec_arp_remove(struct lec_priv *priv, struct lec_arp_table *to_remove)
|
||||||
struct lec_arp_table *to_remove)
|
|
||||||
{
|
{
|
||||||
unsigned short place;
|
unsigned short place;
|
||||||
struct lec_arp_table *tmp;
|
struct lec_arp_table *tmp;
|
||||||
@@ -1556,8 +1551,10 @@ lec_arp_remove(struct lec_priv *priv,
|
|||||||
* ESI_FLUSH_PENDING, ESI_FORWARD_DIRECT
|
* ESI_FLUSH_PENDING, ESI_FORWARD_DIRECT
|
||||||
*/
|
*/
|
||||||
for (place = 0; place < LEC_ARP_TABLE_SIZE; place++) {
|
for (place = 0; place < LEC_ARP_TABLE_SIZE; place++) {
|
||||||
for(tmp = priv->lec_arp_tables[place]; tmp != NULL; tmp = tmp->next) {
|
for (tmp = priv->lec_arp_tables[place]; tmp != NULL;
|
||||||
if (memcmp(tmp->atm_addr, to_remove->atm_addr,
|
tmp = tmp->next) {
|
||||||
|
if (memcmp
|
||||||
|
(tmp->atm_addr, to_remove->atm_addr,
|
||||||
ATM_ESA_LEN) == 0) {
|
ATM_ESA_LEN) == 0) {
|
||||||
remove_vcc = 0;
|
remove_vcc = 0;
|
||||||
break;
|
break;
|
||||||
@@ -1577,8 +1574,7 @@ lec_arp_remove(struct lec_priv *priv,
|
|||||||
}
|
}
|
||||||
|
|
||||||
#if DEBUG_ARP_TABLE
|
#if DEBUG_ARP_TABLE
|
||||||
static char*
|
static char *get_status_string(unsigned char st)
|
||||||
get_status_string(unsigned char st)
|
|
||||||
{
|
{
|
||||||
switch (st) {
|
switch (st) {
|
||||||
case ESI_UNKNOWN:
|
case ESI_UNKNOWN:
|
||||||
@@ -1597,8 +1593,7 @@ get_status_string(unsigned char st)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void
|
static void dump_arp_table(struct lec_priv *priv)
|
||||||
dump_arp_table(struct lec_priv *priv)
|
|
||||||
{
|
{
|
||||||
#if DEBUG_ARP_TABLE
|
#if DEBUG_ARP_TABLE
|
||||||
int i, j, offset;
|
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 *)priv->lec_no_forward;
|
||||||
struct lec_arp_table *mcast_fwds = priv->mcast_fwds;
|
struct lec_arp_table *mcast_fwds = priv->mcast_fwds;
|
||||||
|
|
||||||
|
|
||||||
printk("Dump %p:\n", priv);
|
printk("Dump %p:\n", priv);
|
||||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
||||||
rulla = lec_arp_tables[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 ",
|
"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->vpi : 0,
|
||||||
rulla->vcc ? rulla->vcc->vci : 0,
|
rulla->vcc ? rulla->vcc->vci : 0,
|
||||||
rulla->recv_vcc?rulla->recv_vcc->vpi:0,
|
rulla->recv_vcc ? rulla->recv_vcc->
|
||||||
rulla->recv_vcc?rulla->recv_vcc->vci:0,
|
vpi : 0,
|
||||||
rulla->last_used,
|
rulla->recv_vcc ? rulla->recv_vcc->
|
||||||
|
vci : 0, rulla->last_used,
|
||||||
rulla->timestamp, rulla->no_tries);
|
rulla->timestamp, rulla->no_tries);
|
||||||
offset+=sprintf(buf+offset,
|
offset +=
|
||||||
|
sprintf(buf + offset,
|
||||||
"Flags:%x, Packets_flooded:%x, Status: %s ",
|
"Flags:%x, Packets_flooded:%x, Status: %s ",
|
||||||
rulla->flags, rulla->packets_flooded,
|
rulla->flags, rulla->packets_flooded,
|
||||||
get_status_string(rulla->status));
|
get_status_string(rulla->status));
|
||||||
@@ -1749,8 +1745,7 @@ dump_arp_table(struct lec_priv *priv)
|
|||||||
/*
|
/*
|
||||||
* Destruction of arp-cache
|
* Destruction of arp-cache
|
||||||
*/
|
*/
|
||||||
static void
|
static void lec_arp_destroy(struct lec_priv *priv)
|
||||||
lec_arp_destroy(struct lec_priv *priv)
|
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct lec_arp_table *entry, *next;
|
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);
|
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
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;
|
next = entry->next;
|
||||||
lec_arp_remove(priv, entry);
|
lec_arp_remove(priv, entry);
|
||||||
kfree(entry);
|
kfree(entry);
|
||||||
@@ -1803,12 +1799,10 @@ lec_arp_destroy(struct lec_priv *priv)
|
|||||||
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Find entry by mac_address
|
* Find entry by mac_address
|
||||||
*/
|
*/
|
||||||
static struct lec_arp_table*
|
static struct lec_arp_table *lec_arp_find(struct lec_priv *priv,
|
||||||
lec_arp_find(struct lec_priv *priv,
|
|
||||||
unsigned char *mac_addr)
|
unsigned char *mac_addr)
|
||||||
{
|
{
|
||||||
unsigned short place;
|
unsigned short place;
|
||||||
@@ -1829,8 +1823,8 @@ lec_arp_find(struct lec_priv *priv,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct lec_arp_table*
|
static struct lec_arp_table *make_entry(struct lec_priv *priv,
|
||||||
make_entry(struct lec_priv *priv, unsigned char *mac_addr)
|
unsigned char *mac_addr)
|
||||||
{
|
{
|
||||||
struct lec_arp_table *to_return;
|
struct lec_arp_table *to_return;
|
||||||
|
|
||||||
@@ -1849,13 +1843,8 @@ make_entry(struct lec_priv *priv, unsigned char *mac_addr)
|
|||||||
return to_return;
|
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;
|
struct lec_arp_table *entry;
|
||||||
|
|
||||||
@@ -1865,22 +1854,19 @@ lec_arp_expire_arp(unsigned long data)
|
|||||||
if (entry->status == ESI_ARP_PENDING) {
|
if (entry->status == ESI_ARP_PENDING) {
|
||||||
if (entry->no_tries <= entry->priv->max_retry_count) {
|
if (entry->no_tries <= entry->priv->max_retry_count) {
|
||||||
if (entry->is_rdesc)
|
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
|
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++;
|
entry->no_tries++;
|
||||||
}
|
}
|
||||||
mod_timer(&entry->timer, jiffies + (1 * HZ));
|
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;
|
unsigned long flags;
|
||||||
struct lec_arp_table *to_remove = (struct lec_arp_table *)data;
|
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, priv,
|
||||||
to_remove->vcc ? to_remove->recv_vcc->vpi : 0,
|
to_remove->vcc ? to_remove->recv_vcc->vpi : 0,
|
||||||
to_remove->vcc ? to_remove->recv_vcc->vci : 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);
|
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||||
if (to_remove == priv->lec_arp_empty_ones)
|
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
|
* to ESI_FORWARD_DIRECT. This causes the flush period to end
|
||||||
* regardless of the progress of the flush protocol.
|
* regardless of the progress of the flush protocol.
|
||||||
*/
|
*/
|
||||||
static void
|
static void lec_arp_check_expire(unsigned long data)
|
||||||
lec_arp_check_expire(unsigned long data)
|
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct lec_priv *priv = (struct lec_priv *)data;
|
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",
|
DPRINTK("About to expire: %lx - %lx > %lx\n",
|
||||||
now, entry->last_used, time_to_check);
|
now, entry->last_used, time_to_check);
|
||||||
if( time_after(now, entry->last_used+
|
if (time_after(now, entry->last_used + time_to_check)
|
||||||
time_to_check) &&
|
&& !(entry->flags & LEC_PERMANENT_FLAG)
|
||||||
!(entry->flags & LEC_PERMANENT_FLAG) &&
|
&& !(entry->mac_addr[0] & 0x01)) { /* LANE2: 7.1.20 */
|
||||||
!(entry->mac_addr[0] & 0x01) ) { /* LANE2: 7.1.20 */
|
|
||||||
/* Remove entry */
|
/* Remove entry */
|
||||||
DPRINTK("LEC:Entry timed out\n");
|
DPRINTK("LEC:Entry timed out\n");
|
||||||
next = entry->next;
|
next = entry->next;
|
||||||
@@ -1979,11 +1964,15 @@ lec_arp_check_expire(unsigned long data)
|
|||||||
entry->status == ESI_ARP_PENDING)
|
entry->status == ESI_ARP_PENDING)
|
||||||
&& time_after_eq(now,
|
&& time_after_eq(now,
|
||||||
entry->timestamp +
|
entry->timestamp +
|
||||||
priv->max_unknown_frame_time)) {
|
priv->
|
||||||
|
max_unknown_frame_time)) {
|
||||||
entry->timestamp = jiffies;
|
entry->timestamp = jiffies;
|
||||||
entry->packets_flooded = 0;
|
entry->packets_flooded = 0;
|
||||||
if (entry->status == ESI_VC_PENDING)
|
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
|
if (entry->status == ESI_FLUSH_PENDING
|
||||||
&&
|
&&
|
||||||
@@ -1991,11 +1980,13 @@ lec_arp_check_expire(unsigned long data)
|
|||||||
priv->path_switching_delay)) {
|
priv->path_switching_delay)) {
|
||||||
struct sk_buff *skb;
|
struct sk_buff *skb;
|
||||||
|
|
||||||
while ((skb = skb_dequeue(&entry->tx_wait)) != NULL)
|
while ((skb =
|
||||||
lec_send(entry->vcc, skb, entry->priv);
|
skb_dequeue(&entry->tx_wait)) !=
|
||||||
|
NULL)
|
||||||
|
lec_send(entry->vcc, skb,
|
||||||
|
entry->priv);
|
||||||
entry->last_used = jiffies;
|
entry->last_used = jiffies;
|
||||||
entry->status =
|
entry->status = ESI_FORWARD_DIRECT;
|
||||||
ESI_FORWARD_DIRECT;
|
|
||||||
}
|
}
|
||||||
entry = entry->next;
|
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);
|
mod_timer(&priv->lec_arp_timer, jiffies + LEC_ARP_REFRESH_INTERVAL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Try to find vcc where mac_address is attached.
|
* Try to find vcc where mac_address is attached.
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
static struct atm_vcc*
|
static struct atm_vcc *lec_arp_resolve(struct lec_priv *priv,
|
||||||
lec_arp_resolve(struct lec_priv *priv, unsigned char *mac_to_find,
|
unsigned char *mac_to_find, int is_rdesc,
|
||||||
int is_rdesc, struct lec_arp_table **ret_entry)
|
struct lec_arp_table **ret_entry)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct lec_arp_table *entry;
|
struct lec_arp_table *entry;
|
||||||
@@ -2042,29 +2034,35 @@ lec_arp_resolve(struct lec_priv *priv, unsigned char *mac_to_find,
|
|||||||
found = entry->vcc;
|
found = entry->vcc;
|
||||||
goto out;
|
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.
|
* so another LE_ARP request can be made for this frame.
|
||||||
*/
|
*/
|
||||||
if (entry->status == ESI_ARP_PENDING) {
|
if (entry->status == ESI_ARP_PENDING) {
|
||||||
entry->no_tries = 0;
|
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
|
* Data direct VC not yet set up, check to see if the unknown
|
||||||
not been reached, allow the caller to send packet to
|
* frame count is greater than the limit. If the limit has
|
||||||
BUS. */
|
* not been reached, allow the caller to send packet to
|
||||||
|
* BUS.
|
||||||
|
*/
|
||||||
if (entry->status != ESI_FLUSH_PENDING &&
|
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++;
|
entry->packets_flooded++;
|
||||||
DPRINTK("LEC_ARP: Flooding..\n");
|
DPRINTK("LEC_ARP: Flooding..\n");
|
||||||
found = priv->mcast_vcc;
|
found = priv->mcast_vcc;
|
||||||
goto out;
|
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
|
* or BUS flood limit was reached for an entry which is
|
||||||
* in ESI_ARP_PENDING or ESI_VC_PENDING state.
|
* in ESI_ARP_PENDING or ESI_VC_PENDING state.
|
||||||
*/
|
*/
|
||||||
*ret_entry = entry;
|
*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;
|
found = NULL;
|
||||||
} else {
|
} else {
|
||||||
/* No matching entry was found */
|
/* 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->last_used = entry->timestamp = jiffies;
|
||||||
entry->is_rdesc = is_rdesc;
|
entry->is_rdesc = is_rdesc;
|
||||||
if (entry->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
|
else
|
||||||
send_to_lecd(priv, l_arp_xmt, mac_to_find, NULL, NULL);
|
send_to_lecd(priv, l_arp_xmt, mac_to_find, NULL, NULL);
|
||||||
entry->timer.expires = jiffies + (1 * HZ);
|
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");
|
DPRINTK("lec_addr_delete\n");
|
||||||
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
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;
|
next = entry->next;
|
||||||
if (!memcmp(atm_addr, entry->atm_addr, ATM_ESA_LEN)
|
if (!memcmp(atm_addr, entry->atm_addr, ATM_ESA_LEN)
|
||||||
&& (permanent ||
|
&& (permanent ||
|
||||||
@@ -2143,7 +2143,8 @@ lec_arp_update(struct lec_priv *priv, unsigned char *mac_addr,
|
|||||||
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||||
entry = lec_arp_find(priv, mac_addr);
|
entry = lec_arp_find(priv, mac_addr);
|
||||||
if (entry == NULL && targetless_le_arp)
|
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
|
* we have no entry in the cache. 7.1.30
|
||||||
*/
|
*/
|
||||||
if (priv->lec_arp_empty_ones) {
|
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 (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
||||||
for (tmp = priv->lec_arp_tables[i]; tmp; tmp = tmp->next) {
|
for (tmp = priv->lec_arp_tables[i]; tmp; tmp = tmp->next) {
|
||||||
if (entry != tmp &&
|
if (entry != tmp &&
|
||||||
!memcmp(tmp->atm_addr, atm_addr,
|
!memcmp(tmp->atm_addr, atm_addr, ATM_ESA_LEN)) {
|
||||||
ATM_ESA_LEN)) {
|
|
||||||
/* Vcc to this host exists */
|
/* Vcc to this host exists */
|
||||||
if (tmp->status > ESI_VC_PENDING) {
|
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;
|
entry->flags |= LEC_REMOTE_FLAG;
|
||||||
else
|
else
|
||||||
entry->flags &= ~LEC_REMOTE_FLAG;
|
entry->flags &= ~LEC_REMOTE_FLAG;
|
||||||
if (entry->status == ESI_ARP_PENDING ||
|
if (entry->status == ESI_ARP_PENDING || entry->status == ESI_UNKNOWN) {
|
||||||
entry->status == ESI_UNKNOWN) {
|
|
||||||
entry->status = ESI_VC_PENDING;
|
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");
|
DPRINTK("After update2\n");
|
||||||
dump_arp_table(priv);
|
dump_arp_table(priv);
|
||||||
@@ -2273,9 +2273,13 @@ lec_vcc_added(struct lec_priv *priv, struct atmlec_ioc *ioc_data,
|
|||||||
priv->mcast_fwds = entry;
|
priv->mcast_fwds = entry;
|
||||||
goto out;
|
goto out;
|
||||||
} else if (ioc_data->receive == 1) {
|
} else if (ioc_data->receive == 1) {
|
||||||
/* Vcc which we don't want to make default vcc, attach it
|
/*
|
||||||
anyway. */
|
* Vcc which we don't want to make default vcc,
|
||||||
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",
|
* 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[0], ioc_data->atm_addr[1],
|
||||||
ioc_data->atm_addr[2], ioc_data->atm_addr[3],
|
ioc_data->atm_addr[2], ioc_data->atm_addr[3],
|
||||||
ioc_data->atm_addr[4], ioc_data->atm_addr[5],
|
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);
|
dump_arp_table(priv);
|
||||||
goto out;
|
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[0], ioc_data->atm_addr[1],
|
||||||
ioc_data->atm_addr[2], ioc_data->atm_addr[3],
|
ioc_data->atm_addr[2], ioc_data->atm_addr[3],
|
||||||
ioc_data->atm_addr[4], ioc_data->atm_addr[5],
|
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[16], ioc_data->atm_addr[17],
|
||||||
ioc_data->atm_addr[18], ioc_data->atm_addr[19]);
|
ioc_data->atm_addr[18], ioc_data->atm_addr[19]);
|
||||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
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;
|
||||||
if (memcmp(ioc_data->atm_addr, entry->atm_addr,
|
entry = entry->next) {
|
||||||
|
if (memcmp
|
||||||
|
(ioc_data->atm_addr, entry->atm_addr,
|
||||||
ATM_ESA_LEN) == 0) {
|
ATM_ESA_LEN) == 0) {
|
||||||
DPRINTK("LEC_ARP: Attaching data direct\n");
|
DPRINTK("LEC_ARP: Attaching data direct\n");
|
||||||
DPRINTK("Currently -> Vcc: %d, Rvcc:%d\n",
|
DPRINTK("Currently -> Vcc: %d, Rvcc:%d\n",
|
||||||
entry->vcc ? entry->vcc->vci : 0,
|
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;
|
found_entry = 1;
|
||||||
del_timer(&entry->timer);
|
del_timer(&entry->timer);
|
||||||
entry->vcc = vcc;
|
entry->vcc = vcc;
|
||||||
@@ -2342,15 +2351,17 @@ lec_vcc_added(struct lec_priv *priv, struct atmlec_ioc *ioc_data,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* They were forming a connection
|
/*
|
||||||
to us, and we to them. Our
|
* They were forming a connection
|
||||||
ATM address is numerically lower
|
* to us, and we to them. Our
|
||||||
than theirs, so we make connection
|
* ATM address is numerically lower
|
||||||
we formed into default VCC (8.1.11).
|
* than theirs, so we make connection
|
||||||
Connection they made gets torn
|
* we formed into default VCC (8.1.11).
|
||||||
down. This might confuse some
|
* Connection they made gets torn
|
||||||
clients. Can be changed if
|
* down. This might confuse some
|
||||||
someone reports trouble... */
|
* 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);
|
dump_arp_table(priv);
|
||||||
goto out;
|
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);
|
entry = make_entry(priv, bus_mac);
|
||||||
if (!entry)
|
if (!entry)
|
||||||
goto out;
|
goto out;
|
||||||
@@ -2382,8 +2395,7 @@ out:
|
|||||||
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void lec_flush_complete(struct lec_priv *priv, unsigned long tran_id)
|
||||||
lec_flush_complete(struct lec_priv *priv, unsigned long tran_id)
|
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct lec_arp_table *entry;
|
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);
|
DPRINTK("LEC:lec_flush_complete %lx\n", tran_id);
|
||||||
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++) {
|
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;
|
||||||
if (entry->flush_tran_id == tran_id &&
|
entry = entry->next) {
|
||||||
entry->status == ESI_FLUSH_PENDING) {
|
if (entry->flush_tran_id == tran_id
|
||||||
|
&& entry->status == ESI_FLUSH_PENDING) {
|
||||||
struct sk_buff *skb;
|
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);
|
lec_send(entry->vcc, skb, entry->priv);
|
||||||
entry->status = ESI_FORWARD_DIRECT;
|
entry->status = ESI_FORWARD_DIRECT;
|
||||||
DPRINTK("LEC_ARP: Flushed\n");
|
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);
|
spin_lock_irqsave(&priv->lec_arp_lock, flags);
|
||||||
for (i = 0; i < LEC_ARP_TABLE_SIZE; i++)
|
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)) {
|
if (!memcmp(atm_addr, entry->atm_addr, ATM_ESA_LEN)) {
|
||||||
entry->flush_tran_id = tran_id;
|
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);
|
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int lec_mcast_make(struct lec_priv *priv, struct atm_vcc *vcc)
|
||||||
lec_mcast_make(struct lec_priv *priv, struct atm_vcc *vcc)
|
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
unsigned char mac_addr[] = {
|
unsigned char mac_addr[] = {
|
||||||
0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
|
0xff, 0xff, 0xff, 0xff, 0xff, 0xff
|
||||||
|
};
|
||||||
struct lec_arp_table *to_add;
|
struct lec_arp_table *to_add;
|
||||||
struct lec_vcc_priv *vpriv;
|
struct lec_vcc_priv *vpriv;
|
||||||
int err = 0;
|
int err = 0;
|
||||||
@@ -2463,8 +2480,7 @@ out:
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc)
|
||||||
lec_vcc_close(struct lec_priv *priv, struct atm_vcc *vcc)
|
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
struct lec_arp_table *entry, *next;
|
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);
|
lec_arp_clear_vccs(entry);
|
||||||
del_timer(&entry->timer);
|
del_timer(&entry->timer);
|
||||||
kfree(entry);
|
kfree(entry);
|
||||||
}
|
} else { /* put it back to the list */
|
||||||
else { /* put it back to the list */
|
|
||||||
entry->next = priv->lec_arp_empty_ones;
|
entry->next = priv->lec_arp_empty_ones;
|
||||||
priv->lec_arp_empty_ones = entry;
|
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);
|
lec_arp_clear_vccs(entry);
|
||||||
del_timer(&entry->timer);
|
del_timer(&entry->timer);
|
||||||
kfree(entry);
|
kfree(entry);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
entry->next = priv->lec_no_forward;
|
entry->next = priv->lec_no_forward;
|
||||||
priv->lec_no_forward = entry;
|
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);
|
lec_arp_clear_vccs(entry);
|
||||||
/* No timer, LANEv2 7.1.20 and 2.3.5.3 */
|
/* No timer, LANEv2 7.1.20 and 2.3.5.3 */
|
||||||
kfree(entry);
|
kfree(entry);
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
entry->next = priv->mcast_fwds;
|
entry->next = priv->mcast_fwds;
|
||||||
priv->mcast_fwds = entry;
|
priv->mcast_fwds = entry;
|
||||||
}
|
}
|
||||||
@@ -2549,7 +2562,8 @@ lec_arp_check_empties(struct lec_priv *priv,
|
|||||||
#ifdef CONFIG_TR
|
#ifdef CONFIG_TR
|
||||||
struct lecdatahdr_8025 *tr_hdr = (struct lecdatahdr_8025 *)skb->data;
|
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
|
else
|
||||||
#endif
|
#endif
|
||||||
src = hdr->h_source;
|
src = hdr->h_source;
|
||||||
@@ -2593,4 +2607,5 @@ lec_arp_check_empties(struct lec_priv *priv,
|
|||||||
out:
|
out:
|
||||||
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
Reference in New Issue
Block a user