Network debug statistics API
==============================

This chapter describes the debug statistics interface API.

## API Header

Using the network debug statistics API, it is possible to collect statistics from the stack in real-time for debugging purposes. You can use this API by including the following header to your application:

```
#include nwk_stats_api.h
```

An overview of the function definitions and the Network statistics structure (`nwk_stats_t`) itself are presented further in this document.

##Initializing protocol stats collection

To initialize collection of network statistics in the network (NWK) statistics structure:

```
void protocol_stats_init
(
	void
)
```

## Start stats collection

To start collecting network statistics in the Network (NWK) statistics structure:

```
void protocol_stats_start
(
	nwk_stats_t	*stats_ptr
)
```

Parameter|Description
---------|-----------
`stats_ptr`|A pointer to the statistics structure on application.

## Stop stats collection

To stop collecting network statistics in NWK statistics structure:

```
void protocol_stats_stop
(
	void
)
```

## Reset stats

To reset network statistics to clean slate state, that is, all the statistics counters are set to zero:

```
void protocol_stats_reset
(
	void
)
```

## Types of collectable stats

Various types of network stats can be collected using the structure `typedef struct nwk_stats_t `. The following statistics can be collected:

### General MAC related stats

Member|Description
------|-----------
`mac_tx_buffer_overflow`|Provides a count MAC TX queue overflow.
`mac_tx_queue_size`|Current MAC TX queue size.
`mac_tx_queue_peak`|MAC TX queue peak size.
`mac_rx_count`|Number of received MAC packets.
`mac_tx_count`|Number of transmitted MAC packets.
`mac_bc_tx_count`|>Number of transmitted MAC broadcast packets.
`mac_rx_drop`|Number of dropped MAC packets.

### MAC payload flow

Member|Description
------|-----------
`mac_tx_bytes`|Number of bytes transmitted.
`mac_rx_bytes`|Number of bytes received.
`mac_tx_failed`|Number of times a transmission failed.
`mac_tx_retry`|Number of times retries were made.
`mac_tx_cca_cnt`|Number of times clear channel assessment was made.
`mac_tx_failed_cca`|Number of failed CCA attempts.
`mac_security_drop`|Number of security packets dropped.

### FHSS related statistics

Member|Description
------|-----------
`fhss_drift_compensation`|FHSS synchronization drift compensation (us/channel).
`fhss_hop_count`|FHSS hop count.
`fhss_synch_parent_rssi`|FHSS synchronization parent RSSI.
`fhss_synch_interval`|FHSS synchronization interval (s).
`fhss_prev_avg_synch_fix`|Average of 5 preceding synchronization fixes (us).
`fhss_synch_lost`|FHSS synchronization lost counter.

### 6LoWPAN related statistics

Member|Description
------|-----------
`ip_rx_count`|Number of IP packets received.
`ip_tx_count`|Number of IP packets transmitted.
`ip_rx_drop`|Number of IP packets dropped.
`ip_cksum_error`|IP checksum error count.

### IP payload flow

Member|Description
------|-----------
`ip_tx_bytes`|Number of bytes transmitted as IP packets.
`ip_rx_bytes`|Number of bytes received as IP packets.
`ip_routed_up`|Number of bytes routed as IP packets.
`ip_no_route`|Number of times an IP route was not found.

### Fragmentation statistics

Member|Description
------|-----------
`frag_rx_errors`|Fragmentation errors in reception.
`frag_tx_errors`|Fragmentation errors in transmission.

### RPL statistics

Member|Description
------|-----------
`rpl_route_routecost_better_change`|Number of times an RPL parent was changed.
`ip_routeloop_detect`|Number of times an RPL IP loop creation was detected.
`rpl_memory_overflow`|Total of allocations failed due RPL memory overflow.
`rpl_parent_tx_fail`|Number of times transmission to a DODAG parent failed.
`rpl_unknown_instance`|Number of times a packet was received with an unknown RPL Instance ID.
`rpl_local_repair`|Number of times local repair was initiated.
`rpl_global_repair`|Number of times global repair was initiated.
`rpl_malformed_message`|Number of malformed RPL messages received.
`rpl_time_no_next_hop`|Number of seconds spent with no RPL next hop.
`rpl_total_memory`|Total memory currently allocated by RPL.

### Various buffers

Member|Description
------|-----------
`buf_alloc`|A count of buffer allocation.
`buf_headroom_realloc`|A buffer headroom allocation count.
`buf_headroom_shuffle`|A buffer headroom shuffling count.
`buf_headroom_fail`|A buffer headroom failure count.

### ETX statistics

Member|Description
------|-----------
`etx_1st_parent`|Primary parent ETX.
`etx_2nd_parent`|Secondary parent ETX.
