aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/slip.c
diff options
context:
space:
mode:
authorTobias Klauser <tklauser@distanz.ch>2010-08-26 18:12:08 -0400
committerDavid S. Miller <davem@davemloft.net>2010-08-27 22:25:59 -0400
commit034de00b06fe2b2c451f7435414f15c1b625e6b0 (patch)
treef5d927349c82bfe6f0c1555e3d7f9675a826713a /drivers/net/slip.c
parent0fdf4d096102464e290d5ccaee8ad0cee7bd9e8a (diff)
slip: Use net_device_stats from struct net_device
Use net_device->stats for stats instead of private variable copies in struct slip. Use ndo_get_stat64 so the additions can be performed on a private destination buffer. Cc: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: Tobias Klauser <tklauser@distanz.ch> Acked-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/slip.c')
-rw-r--r--drivers/net/slip.c61
1 files changed, 31 insertions, 30 deletions
diff --git a/drivers/net/slip.c b/drivers/net/slip.c
index d5a36f5417c..38547a8938f 100644
--- a/drivers/net/slip.c
+++ b/drivers/net/slip.c
@@ -271,7 +271,7 @@ static int sl_realloc_bufs(struct slip *sl, int mtu)
271 memcpy(sl->xbuff, sl->xhead, sl->xleft); 271 memcpy(sl->xbuff, sl->xhead, sl->xleft);
272 } else { 272 } else {
273 sl->xleft = 0; 273 sl->xleft = 0;
274 sl->tx_dropped++; 274 dev->stats.tx_dropped++;
275 } 275 }
276 } 276 }
277 sl->xhead = sl->xbuff; 277 sl->xhead = sl->xbuff;
@@ -281,7 +281,7 @@ static int sl_realloc_bufs(struct slip *sl, int mtu)
281 memcpy(sl->rbuff, rbuff, sl->rcount); 281 memcpy(sl->rbuff, rbuff, sl->rcount);
282 } else { 282 } else {
283 sl->rcount = 0; 283 sl->rcount = 0;
284 sl->rx_over_errors++; 284 dev->stats.rx_over_errors++;
285 set_bit(SLF_ERROR, &sl->flags); 285 set_bit(SLF_ERROR, &sl->flags);
286 } 286 }
287 } 287 }
@@ -319,6 +319,7 @@ static inline void sl_unlock(struct slip *sl)
319/* Send one completely decapsulated IP datagram to the IP layer. */ 319/* Send one completely decapsulated IP datagram to the IP layer. */
320static void sl_bump(struct slip *sl) 320static void sl_bump(struct slip *sl)
321{ 321{
322 struct net_device *dev = sl->dev;
322 struct sk_buff *skb; 323 struct sk_buff *skb;
323 int count; 324 int count;
324 325
@@ -329,13 +330,13 @@ static void sl_bump(struct slip *sl)
329 if (c & SL_TYPE_COMPRESSED_TCP) { 330 if (c & SL_TYPE_COMPRESSED_TCP) {
330 /* ignore compressed packets when CSLIP is off */ 331 /* ignore compressed packets when CSLIP is off */
331 if (!(sl->mode & SL_MODE_CSLIP)) { 332 if (!(sl->mode & SL_MODE_CSLIP)) {
332 printk(KERN_WARNING "%s: compressed packet ignored\n", sl->dev->name); 333 printk(KERN_WARNING "%s: compressed packet ignored\n", dev->name);
333 return; 334 return;
334 } 335 }
335 /* make sure we've reserved enough space for uncompress 336 /* make sure we've reserved enough space for uncompress
336 to use */ 337 to use */
337 if (count + 80 > sl->buffsize) { 338 if (count + 80 > sl->buffsize) {
338 sl->rx_over_errors++; 339 dev->stats.rx_over_errors++;
339 return; 340 return;
340 } 341 }
341 count = slhc_uncompress(sl->slcomp, sl->rbuff, count); 342 count = slhc_uncompress(sl->slcomp, sl->rbuff, count);
@@ -346,7 +347,7 @@ static void sl_bump(struct slip *sl)
346 /* turn on header compression */ 347 /* turn on header compression */
347 sl->mode |= SL_MODE_CSLIP; 348 sl->mode |= SL_MODE_CSLIP;
348 sl->mode &= ~SL_MODE_ADAPTIVE; 349 sl->mode &= ~SL_MODE_ADAPTIVE;
349 printk(KERN_INFO "%s: header compression turned on\n", sl->dev->name); 350 printk(KERN_INFO "%s: header compression turned on\n", dev->name);
350 } 351 }
351 sl->rbuff[0] &= 0x4f; 352 sl->rbuff[0] &= 0x4f;
352 if (slhc_remember(sl->slcomp, sl->rbuff, count) <= 0) 353 if (slhc_remember(sl->slcomp, sl->rbuff, count) <= 0)
@@ -355,20 +356,20 @@ static void sl_bump(struct slip *sl)
355 } 356 }
356#endif /* SL_INCLUDE_CSLIP */ 357#endif /* SL_INCLUDE_CSLIP */
357 358
358 sl->rx_bytes += count; 359 dev->stats.rx_bytes += count;
359 360
360 skb = dev_alloc_skb(count); 361 skb = dev_alloc_skb(count);
361 if (skb == NULL) { 362 if (skb == NULL) {
362 printk(KERN_WARNING "%s: memory squeeze, dropping packet.\n", sl->dev->name); 363 printk(KERN_WARNING "%s: memory squeeze, dropping packet.\n", dev->name);
363 sl->rx_dropped++; 364 dev->stats.rx_dropped++;
364 return; 365 return;
365 } 366 }
366 skb->dev = sl->dev; 367 skb->dev = dev;
367 memcpy(skb_put(skb, count), sl->rbuff, count); 368 memcpy(skb_put(skb, count), sl->rbuff, count);
368 skb_reset_mac_header(skb); 369 skb_reset_mac_header(skb);
369 skb->protocol = htons(ETH_P_IP); 370 skb->protocol = htons(ETH_P_IP);
370 netif_rx(skb); 371 netif_rx(skb);
371 sl->rx_packets++; 372 dev->stats.rx_packets++;
372} 373}
373 374
374/* Encapsulate one IP datagram and stuff into a TTY queue. */ 375/* 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)
379 380
380 if (len > sl->mtu) { /* Sigh, shouldn't occur BUT ... */ 381 if (len > sl->mtu) { /* Sigh, shouldn't occur BUT ... */
381 printk(KERN_WARNING "%s: truncating oversized transmit packet!\n", sl->dev->name); 382 printk(KERN_WARNING "%s: truncating oversized transmit packet!\n", sl->dev->name);
382 sl->tx_dropped++; 383 sl->dev->stats.tx_dropped++;
383 sl_unlock(sl); 384 sl_unlock(sl);
384 return; 385 return;
385 } 386 }
@@ -433,7 +434,7 @@ static void slip_write_wakeup(struct tty_struct *tty)
433 if (sl->xleft <= 0) { 434 if (sl->xleft <= 0) {
434 /* Now serial buffer is almost free & we can start 435 /* Now serial buffer is almost free & we can start
435 * transmission of another packet */ 436 * transmission of another packet */
436 sl->tx_packets++; 437 sl->dev->stats.tx_packets++;
437 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags); 438 clear_bit(TTY_DO_WRITE_WAKEUP, &tty->flags);
438 sl_unlock(sl); 439 sl_unlock(sl);
439 return; 440 return;
@@ -496,7 +497,7 @@ sl_xmit(struct sk_buff *skb, struct net_device *dev)
496 } 497 }
497 498
498 sl_lock(sl); 499 sl_lock(sl);
499 sl->tx_bytes += skb->len; 500 dev->stats.tx_bytes += skb->len;
500 sl_encaps(sl, skb->data, skb->len); 501 sl_encaps(sl, skb->data, skb->len);
501 spin_unlock(&sl->lock); 502 spin_unlock(&sl->lock);
502 503
@@ -558,16 +559,16 @@ static int sl_change_mtu(struct net_device *dev, int new_mtu)
558 559
559/* Netdevice get statistics request */ 560/* Netdevice get statistics request */
560 561
561static struct net_device_stats * 562static struct rtnl_link_stats64 *
562sl_get_stats(struct net_device *dev) 563sl_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
563{ 564{
564 struct net_device_stats *stats = &dev->stats; 565 struct net_device_stats *devstats = &dev->stats;
565 struct slip *sl = netdev_priv(dev);
566 unsigned long c_rx_dropped = 0; 566 unsigned long c_rx_dropped = 0;
567#ifdef SL_INCLUDE_CSLIP 567#ifdef SL_INCLUDE_CSLIP
568 unsigned long c_rx_fifo_errors = 0; 568 unsigned long c_rx_fifo_errors = 0;
569 unsigned long c_tx_fifo_errors = 0; 569 unsigned long c_tx_fifo_errors = 0;
570 unsigned long c_collisions = 0; 570 unsigned long c_collisions = 0;
571 struct slip *sl = netdev_priv(dev);
571 struct slcompress *comp = sl->slcomp; 572 struct slcompress *comp = sl->slcomp;
572 573
573 if (comp) { 574 if (comp) {
@@ -580,16 +581,16 @@ sl_get_stats(struct net_device *dev)
580 stats->tx_fifo_errors = sl->tx_compressed + c_tx_fifo_errors; 581 stats->tx_fifo_errors = sl->tx_compressed + c_tx_fifo_errors;
581 stats->collisions = sl->tx_misses + c_collisions; 582 stats->collisions = sl->tx_misses + c_collisions;
582#endif 583#endif
584 stats->rx_packets = devstats->rx_packets;
585 stats->tx_packets = devstats->tx_packets;
586 stats->rx_bytes = devstats->rx_bytes;
587 stats->tx_bytes = devstats->tx_bytes;
588 stats->rx_dropped = devstats->rx_dropped + c_rx_dropped;
589 stats->tx_dropped = devstats->tx_dropped;
590 stats->tx_errors = devstats->tx_errors;
591 stats->rx_errors = devstats->rx_errors;
592 stats->rx_over_errors = devstats->rx_over_errors;
583 593
584 stats->rx_packets = sl->rx_packets;
585 stats->tx_packets = sl->tx_packets;
586 stats->rx_bytes = sl->rx_bytes;
587 stats->tx_bytes = sl->tx_bytes;
588 stats->rx_dropped = sl->rx_dropped + c_rx_dropped;
589 stats->tx_dropped = sl->tx_dropped;
590 stats->tx_errors = sl->tx_errors;
591 stats->rx_errors = sl->rx_errors;
592 stats->rx_over_errors = sl->rx_over_errors;
593 return stats; 594 return stats;
594} 595}
595 596
@@ -633,7 +634,7 @@ static const struct net_device_ops sl_netdev_ops = {
633 .ndo_open = sl_open, 634 .ndo_open = sl_open,
634 .ndo_stop = sl_close, 635 .ndo_stop = sl_close,
635 .ndo_start_xmit = sl_xmit, 636 .ndo_start_xmit = sl_xmit,
636 .ndo_get_stats = sl_get_stats, 637 .ndo_get_stats64 = sl_get_stats64,
637 .ndo_change_mtu = sl_change_mtu, 638 .ndo_change_mtu = sl_change_mtu,
638 .ndo_tx_timeout = sl_tx_timeout, 639 .ndo_tx_timeout = sl_tx_timeout,
639#ifdef CONFIG_SLIP_SMART 640#ifdef CONFIG_SLIP_SMART
@@ -681,7 +682,7 @@ static void slip_receive_buf(struct tty_struct *tty, const unsigned char *cp,
681 while (count--) { 682 while (count--) {
682 if (fp && *fp++) { 683 if (fp && *fp++) {
683 if (!test_and_set_bit(SLF_ERROR, &sl->flags)) 684 if (!test_and_set_bit(SLF_ERROR, &sl->flags))
684 sl->rx_errors++; 685 sl->dev->stats.rx_errors++;
685 cp++; 686 cp++;
686 continue; 687 continue;
687 } 688 }
@@ -981,7 +982,7 @@ static void slip_unesc(struct slip *sl, unsigned char s)
981 sl->rbuff[sl->rcount++] = s; 982 sl->rbuff[sl->rcount++] = s;
982 return; 983 return;
983 } 984 }
984 sl->rx_over_errors++; 985 sl->dev->stats.rx_over_errors++;
985 set_bit(SLF_ERROR, &sl->flags); 986 set_bit(SLF_ERROR, &sl->flags);
986 } 987 }
987} 988}
@@ -1057,7 +1058,7 @@ static void slip_unesc6(struct slip *sl, unsigned char s)
1057 sl->rbuff[sl->rcount++] = c; 1058 sl->rbuff[sl->rcount++] = c;
1058 return; 1059 return;
1059 } 1060 }
1060 sl->rx_over_errors++; 1061 sl->dev->stats.rx_over_errors++;
1061 set_bit(SLF_ERROR, &sl->flags); 1062 set_bit(SLF_ERROR, &sl->flags);
1062 } 1063 }
1063 } 1064 }