Register generic ICMPv6 handlers for ROLL TM

This commit is contained in:
George Oikonomou 2014-04-03 23:45:45 +01:00
parent 017697f91d
commit 529ab761ac
2 changed files with 14 additions and 12 deletions

View file

@ -48,6 +48,7 @@
#include "contiki.h" #include "contiki.h"
#include "contiki-lib.h" #include "contiki-lib.h"
#include "contiki-net.h" #include "contiki-net.h"
#include "net/ipv6/uip-icmp6.h"
#include "net/ipv6/multicast/uip-mcast6.h" #include "net/ipv6/multicast/uip-mcast6.h"
#include "net/ipv6/multicast/roll-tm.h" #include "net/ipv6/multicast/roll-tm.h"
#include "dev/watchdog.h" #include "dev/watchdog.h"
@ -473,11 +474,16 @@ extern uint16_t uip_slen;
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/* Local function prototypes */ /* Local function prototypes */
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
static void icmp_output(); static void icmp_input(void);
static void window_update_bounds(); static void icmp_output(void);
static void window_update_bounds(void);
static void reset_trickle_timer(uint8_t); static void reset_trickle_timer(uint8_t);
static void handle_timer(void *); static void handle_timer(void *);
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/* ROLL TM ICMPv6 handler declaration */
UIP_ICMP6_HANDLER(roll_tm_icmp_handler, ICMP6_ROLL_TM,
UIP_ICMP6_HANDLER_CODE_ANY, icmp_input);
/*---------------------------------------------------------------------------*/
/* Return a random number in [I/2, I), for a timer with Imin when the timer's /* Return a random number in [I/2, I), for a timer with Imin when the timer's
* current number of doublings is d */ * current number of doublings is d */
static clock_time_t static clock_time_t
@ -1090,8 +1096,9 @@ accept(uint8_t in)
return UIP_MCAST6_ACCEPT; return UIP_MCAST6_ACCEPT;
} }
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
void /* ROLL TM ICMPv6 Input Handler */
roll_tm_icmp_input() static void
icmp_input()
{ {
uint8_t inconsistency; uint8_t inconsistency;
uint16_t *seq_ptr; uint16_t *seq_ptr;
@ -1417,6 +1424,9 @@ init()
ROLL_TM_STATS_INIT(); ROLL_TM_STATS_INIT();
UIP_MCAST6_STATS_INIT(&stats); UIP_MCAST6_STATS_INIT(&stats);
/* Register the ICMPv6 input handler */
uip_icmp6_register_input_handler(&roll_tm_icmp_handler);
for(iterswptr = &windows[ROLL_TM_WINS - 1]; iterswptr >= windows; for(iterswptr = &windows[ROLL_TM_WINS - 1]; iterswptr >= windows;
iterswptr--) { iterswptr--) {
iterswptr->lower_bound = -1; iterswptr->lower_bound = -1;

View file

@ -213,14 +213,6 @@
#define ROLL_TM_SET_M_BIT 1 #define ROLL_TM_SET_M_BIT 1
#endif #endif
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/* Prototypes of additional Trickle Multicast functions */
/*---------------------------------------------------------------------------*/
/**
* \brief Called by the uIPv6 engine when it receives a Trickle Multicast
* ICMPv6 datagram
*/
void roll_tm_icmp_input();
/*---------------------------------------------------------------------------*/
/* Stats datatype */ /* Stats datatype */
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
struct roll_tm_stats { struct roll_tm_stats {