Link-stats no-ACK penalty: add to actual tx count rather than use a fixed number

This commit is contained in:
Simon Duquennoy 2018-05-13 05:04:03 -07:00
parent 251a9d187f
commit af3f1a05f8
1 changed files with 8 additions and 4 deletions

View File

@ -63,8 +63,8 @@
/* ETX fixed point divisor. 128 is the value used by RPL (RFC 6551 and RFC 6719) */
#define ETX_DIVISOR LINK_STATS_ETX_DIVISOR
/* Number of Tx used to update the ETX EWMA in case of no-ACK */
#define ETX_NOACK_PENALTY 20
/* In case of no-ACK, add ETX_NOACK_PENALTY to the real Tx count, as a penalty */
#define ETX_NOACK_PENALTY 12
/* Initial ETX value */
#define ETX_DEFAULT 2
@ -156,9 +156,13 @@ link_stats_packet_sent(const linkaddr_t *lladdr, int status, int numtx)
stats->last_tx_time = clock_time();
stats->freshness = MIN(stats->freshness + numtx, FRESHNESS_MAX);
/* Add penalty in case of no-ACK */
if(status == MAC_TX_NOACK) {
numtx += ETX_NOACK_PENALTY;
}
#if LINK_STATS_ETX_FROM_PACKET_COUNT
/* Compute ETX from packet and ACK count */
numtx = (status == MAC_TX_NOACK) ? ETX_NOACK_PENALTY : numtx;
/* Halve both counter after TX_COUNT_MAX */
if(stats->tx_count + numtx > TX_COUNT_MAX) {
stats->tx_count /= 2;
@ -179,7 +183,7 @@ link_stats_packet_sent(const linkaddr_t *lladdr, int status, int numtx)
/* Compute ETX using an EWMA */
/* ETX used for this update */
packet_etx = ((status == MAC_TX_NOACK) ? ETX_NOACK_PENALTY : numtx) * ETX_DIVISOR;
packet_etx = numtx * ETX_DIVISOR;
/* ETX alpha used for this update */
ewma_alpha = link_stats_is_fresh(stats) ? EWMA_ALPHA : EWMA_BOOTSTRAP_ALPHA;