322 struct sk_buff *skb = device->tx_skb[device->tx_ring_index]; |
322 struct sk_buff *skb = device->tx_skb[device->tx_ring_index]; |
323 |
323 |
324 // frame statistics |
324 // frame statistics |
325 if (unlikely(jiffies - device->stats_jiffies >= HZ)) { |
325 if (unlikely(jiffies - device->stats_jiffies >= HZ)) { |
326 unsigned int i; |
326 unsigned int i; |
327 unsigned int tx_rate = device->tx_count - device->last_tx_count; |
327 unsigned int tx_rate = |
|
328 (device->tx_count - device->last_tx_count) * 1000; |
328 int loss = device->tx_count - device->rx_count; |
329 int loss = device->tx_count - device->rx_count; |
329 int loss_rate = (loss - device->last_loss) * 1000; |
330 int loss_rate = (loss - device->last_loss) * 1000; |
330 for (i = 0; i < EC_RATE_COUNT; i++) { |
331 for (i = 0; i < EC_RATE_COUNT; i++) { |
331 unsigned int n = rate_intervals[i]; |
332 unsigned int n = rate_intervals[i]; |
332 device->tx_rates[i] = |
333 device->tx_rates[i] = |
333 device->tx_rates[i] * (n - 1) + |
334 (device->tx_rates[i] * (n - 1) + tx_rate) / n; |
334 tx_rate * n; |
|
335 device->loss_rates[i] = |
335 device->loss_rates[i] = |
336 device->loss_rates[i] * (n - 1) + |
336 (device->loss_rates[i] * (n - 1) + loss_rate) / n; |
337 loss_rate * n; |
|
338 } |
337 } |
339 device->last_tx_count = device->tx_count; |
338 device->last_tx_count = device->tx_count; |
340 device->last_loss = loss; |
339 device->last_loss = loss; |
341 device->stats_jiffies += HZ; |
340 device->stats_jiffies = jiffies; |
342 } |
341 } |
343 |
342 |
344 if (unlikely(!device->link_state)) // Link down |
343 if (unlikely(!device->link_state)) // Link down |
345 return; |
344 return; |
346 |
345 |