|
@@ -271,7 +271,7 @@ static int sl_realloc_bufs(struct slip *sl, int mtu)
|
|
|
memcpy(sl->xbuff, sl->xhead, sl->xleft);
|
|
|
} else {
|
|
|
sl->xleft = 0;
|
|
|
- sl->tx_dropped++;
|
|
|
+ dev->stats.tx_dropped++;
|
|
|
}
|
|
|
}
|
|
|
sl->xhead = sl->xbuff;
|
|
@@ -281,7 +281,7 @@ static int sl_realloc_bufs(struct slip *sl, int mtu)
|
|
|
memcpy(sl->rbuff, rbuff, sl->rcount);
|
|
|
} else {
|
|
|
sl->rcount = 0;
|
|
|
- sl->rx_over_errors++;
|
|
|
+ dev->stats.rx_over_errors++;
|
|
|
set_bit(SLF_ERROR, &sl->flags);
|
|
|
}
|
|
|
}
|
|
@@ -319,6 +319,7 @@ static inline void sl_unlock(struct slip *sl)
|
|
|
/* Send one completely decapsulated IP datagram to the IP layer. */
|
|
|
static void sl_bump(struct slip *sl)
|
|
|
{
|
|
|
+ struct net_device *dev = sl->dev;
|
|
|
struct sk_buff *skb;
|
|
|
int count;
|
|
|
|
|
@@ -329,13 +330,13 @@ static void sl_bump(struct slip *sl)
|
|
|
if (c & SL_TYPE_COMPRESSED_TCP) {
|
|
|
/* ignore compressed packets when CSLIP is off */
|
|
|
if (!(sl->mode & SL_MODE_CSLIP)) {
|
|
|
- printk(KERN_WARNING "%s: compressed packet ignored\n", sl->dev->name);
|
|
|
+ printk(KERN_WARNING "%s: compressed packet ignored\n", dev->name);
|
|
|
return;
|
|
|
}
|
|
|
/* make sure we've reserved enough space for uncompress
|
|
|
to use */
|
|
|
if (count + 80 > sl->buffsize) {
|
|
|
- sl->rx_over_errors++;
|
|
|
+ dev->stats.rx_over_errors++;
|
|
|
return;
|
|
|
}
|
|
|
count = slhc_uncompress(sl->slcomp, sl->rbuff, count);
|
|
@@ -346,7 +347,7 @@ static void sl_bump(struct slip *sl)
|
|
|
/* turn on header compression */
|
|
|
sl->mode |= SL_MODE_CSLIP;
|
|
|
sl->mode &= ~SL_MODE_ADAPTIVE;
|
|
|
- printk(KERN_INFO "%s: header compression turned on\n", sl->dev->name);
|
|
|
+ printk(KERN_INFO "%s: header compression turned on\n", dev->name);
|
|
|
}
|
|
|
sl->rbuff[0] &= 0x4f;
|
|
|
if (slhc_remember(sl->slcomp, sl->rbuff, count) <= 0)
|
|
@@ -355,20 +356,20 @@ static void sl_bump(struct slip *sl)
|
|
|
}
|
|
|
#endif /* SL_INCLUDE_CSLIP */
|
|
|
|
|
|
- sl->rx_bytes += count;
|
|
|
+ dev->stats.rx_bytes += count;
|
|
|
|
|
|
skb = dev_alloc_skb(count);
|
|
|
if (skb == NULL) {
|
|
|
- printk(KERN_WARNING "%s: memory squeeze, dropping packet.\n", sl->dev->name);
|
|
|
- sl->rx_dropped++;
|
|
|
+ printk(KERN_WARNING "%s: memory squeeze, dropping packet.\n", dev->name);
|
|
|
+ dev->stats.rx_dropped++;
|
|
|
return;
|
|
|
}
|
|
|
- skb->dev = sl->dev;
|
|
|
+ skb->dev = dev;
|
|
|
memcpy(skb_put(skb, count), sl->rbuff, count);
|
|
|
skb_reset_mac_header(skb);
|
|
|
skb->protocol = htons(ETH_P_IP);
|
|
|
netif_rx(skb);
|
|
|
- sl->rx_packets++;
|
|
|
+ dev->stats.rx_packets++;
|
|
|
}
|
|
|
|
|
|
/* Encapsulate one IP datagram and stuff into a TTY queue. */
|
|
@@ -379,7 +380,7 @@ static void sl_encaps(struct slip *sl, unsigned char *icp, int len)
|
|
|
|
|
|
if (len > sl->mtu) { /* Sigh, shouldn't occur BUT ... */
|
|
|
printk(KERN_WARNING "%s: truncating oversized transmit packet!\n", sl->dev->name);
|
|
|
- sl->tx_dropped++;
|
|
|
+ sl->dev->stats.tx_dropped++;
|
|
|
sl_unlock(sl);
|
|
|
return;
|
|
|
}
|
|
@@ -433,7 +434,7 @@ static void slip_write_wakeup(struct tty_struct *tty)
|
|
|
if (sl->xleft <= 0) {
|
|
|
/* Now serial buffer is almost free & we can start
|
|
|
* transmission of another packet */
|
|
|
- sl->tx_packets++;
|
|
|
+ sl->dev->stats.tx_packets++;
|
|
|
clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
|
|
|
sl_unlock(sl);
|
|
|
return;
|
|
@@ -496,7 +497,7 @@ sl_xmit(struct sk_buff *skb, struct net_device *dev)
|
|
|
}
|
|
|
|
|
|
sl_lock(sl);
|
|
|
- sl->tx_bytes += skb->len;
|
|
|
+ dev->stats.tx_bytes += skb->len;
|
|
|
sl_encaps(sl, skb->data, skb->len);
|
|
|
spin_unlock(&sl->lock);
|
|
|
|
|
@@ -558,16 +559,16 @@ static int sl_change_mtu(struct net_device *dev, int new_mtu)
|
|
|
|
|
|
/* Netdevice get statistics request */
|
|
|
|
|
|
-static struct net_device_stats *
|
|
|
-sl_get_stats(struct net_device *dev)
|
|
|
+static struct rtnl_link_stats64 *
|
|
|
+sl_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
|
|
|
{
|
|
|
- struct net_device_stats *stats = &dev->stats;
|
|
|
- struct slip *sl = netdev_priv(dev);
|
|
|
+ struct net_device_stats *devstats = &dev->stats;
|
|
|
unsigned long c_rx_dropped = 0;
|
|
|
#ifdef SL_INCLUDE_CSLIP
|
|
|
unsigned long c_rx_fifo_errors = 0;
|
|
|
unsigned long c_tx_fifo_errors = 0;
|
|
|
unsigned long c_collisions = 0;
|
|
|
+ struct slip *sl = netdev_priv(dev);
|
|
|
struct slcompress *comp = sl->slcomp;
|
|
|
|
|
|
if (comp) {
|
|
@@ -580,16 +581,16 @@ sl_get_stats(struct net_device *dev)
|
|
|
stats->tx_fifo_errors = sl->tx_compressed + c_tx_fifo_errors;
|
|
|
stats->collisions = sl->tx_misses + c_collisions;
|
|
|
#endif
|
|
|
+ stats->rx_packets = devstats->rx_packets;
|
|
|
+ stats->tx_packets = devstats->tx_packets;
|
|
|
+ stats->rx_bytes = devstats->rx_bytes;
|
|
|
+ stats->tx_bytes = devstats->tx_bytes;
|
|
|
+ stats->rx_dropped = devstats->rx_dropped + c_rx_dropped;
|
|
|
+ stats->tx_dropped = devstats->tx_dropped;
|
|
|
+ stats->tx_errors = devstats->tx_errors;
|
|
|
+ stats->rx_errors = devstats->rx_errors;
|
|
|
+ stats->rx_over_errors = devstats->rx_over_errors;
|
|
|
|
|
|
- stats->rx_packets = sl->rx_packets;
|
|
|
- stats->tx_packets = sl->tx_packets;
|
|
|
- stats->rx_bytes = sl->rx_bytes;
|
|
|
- stats->tx_bytes = sl->tx_bytes;
|
|
|
- stats->rx_dropped = sl->rx_dropped + c_rx_dropped;
|
|
|
- stats->tx_dropped = sl->tx_dropped;
|
|
|
- stats->tx_errors = sl->tx_errors;
|
|
|
- stats->rx_errors = sl->rx_errors;
|
|
|
- stats->rx_over_errors = sl->rx_over_errors;
|
|
|
return stats;
|
|
|
}
|
|
|
|
|
@@ -633,7 +634,7 @@ static const struct net_device_ops sl_netdev_ops = {
|
|
|
.ndo_open = sl_open,
|
|
|
.ndo_stop = sl_close,
|
|
|
.ndo_start_xmit = sl_xmit,
|
|
|
- .ndo_get_stats = sl_get_stats,
|
|
|
+ .ndo_get_stats64 = sl_get_stats64,
|
|
|
.ndo_change_mtu = sl_change_mtu,
|
|
|
.ndo_tx_timeout = sl_tx_timeout,
|
|
|
#ifdef CONFIG_SLIP_SMART
|
|
@@ -681,7 +682,7 @@ static void slip_receive_buf(struct tty_struct *tty, const unsigned char *cp,
|
|
|
while (count--) {
|
|
|
if (fp && *fp++) {
|
|
|
if (!test_and_set_bit(SLF_ERROR, &sl->flags))
|
|
|
- sl->rx_errors++;
|
|
|
+ sl->dev->stats.rx_errors++;
|
|
|
cp++;
|
|
|
continue;
|
|
|
}
|
|
@@ -981,7 +982,7 @@ static void slip_unesc(struct slip *sl, unsigned char s)
|
|
|
sl->rbuff[sl->rcount++] = s;
|
|
|
return;
|
|
|
}
|
|
|
- sl->rx_over_errors++;
|
|
|
+ sl->dev->stats.rx_over_errors++;
|
|
|
set_bit(SLF_ERROR, &sl->flags);
|
|
|
}
|
|
|
}
|
|
@@ -1057,7 +1058,7 @@ static void slip_unesc6(struct slip *sl, unsigned char s)
|
|
|
sl->rbuff[sl->rcount++] = c;
|
|
|
return;
|
|
|
}
|
|
|
- sl->rx_over_errors++;
|
|
|
+ sl->dev->stats.rx_over_errors++;
|
|
|
set_bit(SLF_ERROR, &sl->flags);
|
|
|
}
|
|
|
}
|