lec: convert to internal network_device_stats

Signed-off-by: Stephen Hemminger <shemminger@vyatta.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Stephen Hemminger 2009-01-09 13:01:01 +00:00 committed by David S. Miller
parent 1a6afe8a73
commit 162619e59a
2 changed files with 17 additions and 28 deletions

View file

@ -62,7 +62,6 @@ static unsigned char bridge_ula_lec[] = { 0x01, 0x80, 0xc2, 0x00, 0x00 };
static int lec_open(struct net_device *dev); static int lec_open(struct net_device *dev);
static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev); static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev);
static int lec_close(struct net_device *dev); static int lec_close(struct net_device *dev);
static struct net_device_stats *lec_get_stats(struct net_device *dev);
static void lec_init(struct net_device *dev); static void lec_init(struct net_device *dev);
static struct lec_arp_table *lec_arp_find(struct lec_priv *priv, static struct lec_arp_table *lec_arp_find(struct lec_priv *priv,
const unsigned char *mac_addr); const unsigned char *mac_addr);
@ -218,28 +217,28 @@ static unsigned char *get_tr_dst(unsigned char *packet, unsigned char *rdesc)
static int lec_open(struct net_device *dev) static int lec_open(struct net_device *dev)
{ {
struct lec_priv *priv = netdev_priv(dev);
netif_start_queue(dev); netif_start_queue(dev);
memset(&priv->stats, 0, sizeof(struct net_device_stats)); memset(&dev->stats, 0, sizeof(struct net_device_stats));
return 0; return 0;
} }
static __inline__ void static void
lec_send(struct atm_vcc *vcc, struct sk_buff *skb, struct lec_priv *priv) lec_send(struct atm_vcc *vcc, struct sk_buff *skb)
{ {
struct net_device *dev = skb->dev;
ATM_SKB(skb)->vcc = vcc; ATM_SKB(skb)->vcc = vcc;
ATM_SKB(skb)->atm_options = vcc->atm_options; ATM_SKB(skb)->atm_options = vcc->atm_options;
atomic_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc); atomic_add(skb->truesize, &sk_atm(vcc)->sk_wmem_alloc);
if (vcc->send(vcc, skb) < 0) { if (vcc->send(vcc, skb) < 0) {
priv->stats.tx_dropped++; dev->stats.tx_dropped++;
return; return;
} }
priv->stats.tx_packets++; dev->stats.tx_packets++;
priv->stats.tx_bytes += skb->len; dev->stats.tx_bytes += skb->len;
} }
static void lec_tx_timeout(struct net_device *dev) static void lec_tx_timeout(struct net_device *dev)
@ -270,7 +269,7 @@ static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev)
pr_debug("lec_start_xmit called\n"); pr_debug("lec_start_xmit called\n");
if (!priv->lecd) { if (!priv->lecd) {
printk("%s:No lecd attached\n", dev->name); printk("%s:No lecd attached\n", dev->name);
priv->stats.tx_errors++; dev->stats.tx_errors++;
netif_stop_queue(dev); netif_stop_queue(dev);
return -EUNATCH; return -EUNATCH;
} }
@ -345,7 +344,7 @@ static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev)
GFP_ATOMIC); GFP_ATOMIC);
dev_kfree_skb(skb); dev_kfree_skb(skb);
if (skb2 == NULL) { if (skb2 == NULL) {
priv->stats.tx_dropped++; dev->stats.tx_dropped++;
return 0; return 0;
} }
skb = skb2; skb = skb2;
@ -380,7 +379,7 @@ static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev)
("%s:lec_start_xmit: tx queue full or no arp entry, dropping, ", ("%s:lec_start_xmit: tx queue full or no arp entry, dropping, ",
dev->name); dev->name);
pr_debug("MAC address %pM\n", lec_h->h_dest); pr_debug("MAC address %pM\n", lec_h->h_dest);
priv->stats.tx_dropped++; dev->stats.tx_dropped++;
dev_kfree_skb(skb); dev_kfree_skb(skb);
} }
goto out; goto out;
@ -392,10 +391,10 @@ static int lec_start_xmit(struct sk_buff *skb, struct net_device *dev)
while (entry && (skb2 = skb_dequeue(&entry->tx_wait))) { while (entry && (skb2 = skb_dequeue(&entry->tx_wait))) {
pr_debug("lec.c: emptying tx queue, "); pr_debug("lec.c: emptying tx queue, ");
pr_debug("MAC address %pM\n", lec_h->h_dest); pr_debug("MAC address %pM\n", lec_h->h_dest);
lec_send(vcc, skb2, priv); lec_send(vcc, skb2);
} }
lec_send(vcc, skb, priv); lec_send(vcc, skb);
if (!atm_may_send(vcc, 0)) { if (!atm_may_send(vcc, 0)) {
struct lec_vcc_priv *vpriv = LEC_VCC_PRIV(vcc); struct lec_vcc_priv *vpriv = LEC_VCC_PRIV(vcc);
@ -427,15 +426,6 @@ static int lec_close(struct net_device *dev)
return 0; return 0;
} }
/*
* Get the current statistics.
* This may be called with the card open or closed.
*/
static struct net_device_stats *lec_get_stats(struct net_device *dev)
{
return &((struct lec_priv *)netdev_priv(dev))->stats;
}
static int lec_atm_send(struct atm_vcc *vcc, struct sk_buff *skb) static int lec_atm_send(struct atm_vcc *vcc, struct sk_buff *skb)
{ {
unsigned long flags; unsigned long flags;
@ -810,8 +800,8 @@ static void lec_push(struct atm_vcc *vcc, struct sk_buff *skb)
else else
#endif #endif
skb->protocol = eth_type_trans(skb, dev); skb->protocol = eth_type_trans(skb, dev);
priv->stats.rx_packets++; dev->stats.rx_packets++;
priv->stats.rx_bytes += skb->len; dev->stats.rx_bytes += skb->len;
memset(ATM_SKB(skb), 0, sizeof(struct atm_skb_data)); memset(ATM_SKB(skb), 0, sizeof(struct atm_skb_data));
netif_rx(skb); netif_rx(skb);
} }
@ -1887,7 +1877,7 @@ restart:
lec_arp_hold(entry); lec_arp_hold(entry);
spin_unlock_irqrestore(&priv->lec_arp_lock, flags); spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
while ((skb = skb_dequeue(&entry->tx_wait)) != NULL) while ((skb = skb_dequeue(&entry->tx_wait)) != NULL)
lec_send(vcc, skb, entry->priv); lec_send(vcc, skb);
entry->last_used = jiffies; entry->last_used = jiffies;
entry->status = ESI_FORWARD_DIRECT; entry->status = ESI_FORWARD_DIRECT;
lec_arp_put(entry); lec_arp_put(entry);
@ -2305,7 +2295,7 @@ restart:
lec_arp_hold(entry); lec_arp_hold(entry);
spin_unlock_irqrestore(&priv->lec_arp_lock, flags); spin_unlock_irqrestore(&priv->lec_arp_lock, flags);
while ((skb = skb_dequeue(&entry->tx_wait)) != NULL) while ((skb = skb_dequeue(&entry->tx_wait)) != NULL)
lec_send(vcc, skb, entry->priv); lec_send(vcc, skb);
entry->last_used = jiffies; entry->last_used = jiffies;
entry->status = ESI_FORWARD_DIRECT; entry->status = ESI_FORWARD_DIRECT;
lec_arp_put(entry); lec_arp_put(entry);

View file

@ -69,7 +69,6 @@ struct lane2_ops {
#define LEC_ARP_TABLE_SIZE 16 #define LEC_ARP_TABLE_SIZE 16
struct lec_priv { struct lec_priv {
struct net_device_stats stats;
unsigned short lecid; /* Lecid of this client */ unsigned short lecid; /* Lecid of this client */
struct hlist_head lec_arp_empty_ones; struct hlist_head lec_arp_empty_ones;
/* Used for storing VCC's that don't have a MAC address attached yet */ /* Used for storing VCC's that don't have a MAC address attached yet */