diff -r 10175d5f35ea -r ed8b490b5bc3 master/device.c --- a/master/device.c Tue Mar 09 09:59:32 2010 +0100 +++ b/master/device.c Tue Mar 09 10:22:32 2010 +0100 @@ -198,15 +198,9 @@ device->module = NULL; device->open = 0; device->link_state = 0; // down - device->tx_count = 0; - device->rx_count = 0; - device->last_tx_count = 0; - device->last_loss = 0; - for (i = 0; i < EC_RATE_COUNT; i++) { - device->tx_rates[i] = 0; - device->loss_rates[i] = 0; - } - device->stats_jiffies = 0; + + ec_device_clear_stats(device); + for (i = 0; i < EC_TX_RING_SIZE; i++) device->tx_skb[i]->dev = NULL; } @@ -222,7 +216,6 @@ ) { int ret; - unsigned int i; if (!device->dev) { EC_ERR("No net_device to open!\n"); @@ -235,15 +228,8 @@ } device->link_state = 0; - device->tx_count = 0; - device->rx_count = 0; - device->last_tx_count = 0; - device->last_loss = 0; - for (i = 0; i < EC_RATE_COUNT; i++) { - device->tx_rates[i] = 0; - device->loss_rates[i] = 0; - } - device->stats_jiffies = 0; + + ec_device_clear_stats(device); #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 29) ret = device->dev->netdev_ops->ndo_open(device->dev); @@ -324,18 +310,23 @@ // frame statistics if (unlikely(jiffies - device->stats_jiffies >= HZ)) { unsigned int i; - unsigned int tx_rate = + unsigned int tx_frame_rate = (device->tx_count - device->last_tx_count) * 1000; + unsigned int tx_byte_rate = + (device->tx_bytes - device->last_tx_bytes) * 1000; int loss = device->tx_count - device->rx_count; int loss_rate = (loss - device->last_loss) * 1000; for (i = 0; i < EC_RATE_COUNT; i++) { unsigned int n = rate_intervals[i]; - device->tx_rates[i] = - (device->tx_rates[i] * (n - 1) + tx_rate) / n; + device->tx_frame_rates[i] = + (device->tx_frame_rates[i] * (n - 1) + tx_frame_rate) / n; + device->tx_byte_rates[i] = + (device->tx_byte_rates[i] * (n - 1) + tx_byte_rate) / n; device->loss_rates[i] = (device->loss_rates[i] * (n - 1) + loss_rate) / n; } device->last_tx_count = device->tx_count; + device->last_tx_bytes = device->tx_bytes; device->last_loss = loss; device->stats_jiffies = jiffies; } @@ -357,6 +348,7 @@ #endif { device->tx_count++; + device->tx_bytes += ETH_HLEN + size; #ifdef EC_DEBUG_IF ec_debug_send(&device->dbg, skb->data, ETH_HLEN + size); #endif @@ -364,6 +356,8 @@ ec_device_debug_ring_append( device, TX, skb->data + ETH_HLEN, size); #endif + } else { + device->tx_errors++; } } @@ -380,10 +374,14 @@ // zero frame statistics device->tx_count = 0; device->rx_count = 0; + device->tx_errors = 0; + device->tx_bytes = 0; device->last_tx_count = 0; + device->last_tx_bytes = 0; device->last_loss = 0; for (i = 0; i < EC_RATE_COUNT; i++) { - device->tx_rates[i] = 0; + device->tx_frame_rates[i] = 0; + device->tx_byte_rates[i] = 0; device->loss_rates[i] = 0; } }