Purge neighbors that go over a configurable ETX limit. Increase the no-ACK penalty.
This commit is contained in:
parent
4e0ceedc47
commit
1a9e00ab78
1 changed files with 17 additions and 8 deletions
|
@ -28,7 +28,7 @@
|
||||||
*
|
*
|
||||||
* This file is part of the Contiki operating system.
|
* This file is part of the Contiki operating system.
|
||||||
*
|
*
|
||||||
* $Id: neighbor-info.c,v 1.2 2010/03/12 13:23:50 nvt-se Exp $
|
* $Id: neighbor-info.c,v 1.3 2010/03/17 15:08:46 nvt-se Exp $
|
||||||
*/
|
*/
|
||||||
/**
|
/**
|
||||||
* \file
|
* \file
|
||||||
|
@ -48,11 +48,17 @@
|
||||||
#define PRINTF(...)
|
#define PRINTF(...)
|
||||||
#endif /* DEBUG */
|
#endif /* DEBUG */
|
||||||
|
|
||||||
|
#ifndef ETX_CONF_LIMIT
|
||||||
|
#define ETX_LIMIT 10
|
||||||
|
#else
|
||||||
|
#define ETX_LIMIT ETX_CONF_LIMIT
|
||||||
|
#endif /* !ETX_CONF_LIMIT */
|
||||||
|
|
||||||
#define ETX_SCALE 100
|
#define ETX_SCALE 100
|
||||||
#define ETX_ALPHA 60
|
#define ETX_ALPHA 60
|
||||||
#define ETX_FIRST_GUESS 1
|
#define ETX_FIRST_GUESS 1
|
||||||
#define ETX_COLLISION_PENALTY 5
|
#define ETX_COLLISION_PENALTY 5
|
||||||
#define ETX_NO_ACK_PENALTY 5
|
#define ETX_NO_ACK_PENALTY (ETX_LIMIT + 1)
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
NEIGHBOR_ATTRIBUTE(uint8_t, etx, NULL);
|
NEIGHBOR_ATTRIBUTE(uint8_t, etx, NULL);
|
||||||
|
|
||||||
|
@ -76,10 +82,14 @@ update_etx(const rimeaddr_t *dest, int packet_etx)
|
||||||
PRINTF("neighbor-info: ETX changed from %d to %d (packet ETX = %d)\n",
|
PRINTF("neighbor-info: ETX changed from %d to %d (packet ETX = %d)\n",
|
||||||
recorded_etx, new_etx, packet_etx);
|
recorded_etx, new_etx, packet_etx);
|
||||||
|
|
||||||
|
if(new_etx > ETX_LIMIT) {
|
||||||
|
neighbor_attr_remove_neighbor(dest);
|
||||||
|
subscriber_callback(dest, 0, new_etx);
|
||||||
|
} else {
|
||||||
neighbor_attr_set_data(&etx, dest, &new_etx);
|
neighbor_attr_set_data(&etx, dest, &new_etx);
|
||||||
|
|
||||||
if(new_etx != recorded_etx && subscriber_callback != NULL) {
|
if(new_etx != recorded_etx && subscriber_callback != NULL) {
|
||||||
subscriber_callback(dest, 1, recorded_etx);
|
subscriber_callback(dest, 1, new_etx);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
@ -112,8 +122,6 @@ neighbor_info_packet_sent(int status, int numtx)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
add_neighbor(dest);
|
|
||||||
|
|
||||||
PRINTF("neighbor-info: packet sent to %d.%d, status=%d, numtx=%d\n",
|
PRINTF("neighbor-info: packet sent to %d.%d, status=%d, numtx=%d\n",
|
||||||
dest->u8[sizeof(*dest) - 2], dest->u8[sizeof(*dest) - 1],
|
dest->u8[sizeof(*dest) - 2], dest->u8[sizeof(*dest) - 1],
|
||||||
status, numtx);
|
status, numtx);
|
||||||
|
@ -121,6 +129,7 @@ neighbor_info_packet_sent(int status, int numtx)
|
||||||
packet_etx = numtx;
|
packet_etx = numtx;
|
||||||
switch(status) {
|
switch(status) {
|
||||||
case MAC_TX_OK:
|
case MAC_TX_OK:
|
||||||
|
add_neighbor(dest);
|
||||||
break;
|
break;
|
||||||
case MAC_TX_COLLISION:
|
case MAC_TX_COLLISION:
|
||||||
packet_etx += ETX_COLLISION_PENALTY;
|
packet_etx += ETX_COLLISION_PENALTY;
|
||||||
|
|
Loading…
Reference in a new issue