This patch changes the behaviors of frame802154_has_panid() for frames
of frame version 0b10 so that it complies with the PAN ID Field Handling
specification in IEEE 802.15.4-2015. For the other frame versions, 0b00
and 0b01, no change is made in frame802154_has_panid().
For more information, please refer to:
https://github.com/contiki-os/contiki/pull/1914/
Preemption was supposed to be supported, but it had no means of safely
updating the state of a thread, so mt_exec() could fail to resume a
preempted thread.
mt_exec() is allowed to be called only from the main Contiki thread, so
the mt threads passed to it may be only ready or exited, not running.
Consequently, there is no need for a distinction between the ready and
running states, so merge them as a started state, which avoids having to
update the state of a thread upon preemption.
Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau.dev@gmail.com>
If mt_yield() needs it, then mt_exit() too. A thread could indeed be
preempted while calling mt_exit().
Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau.dev@gmail.com>
Compiling examples/er-rest-example for the avr-raven gives:
integer overflow in expression [-Woverflow]
On the AVR int is 16 bit and some calculations may overflow.
This happens for example with multiplications involving
CLOCK_SECOND where all the operands are of type int.
Casting one of the operands to clock_time_t forces
the arithmetic to clock_time_t without increasing the size
of the program (the calculation is performed at compile time).
In the newest version of contiki, the function uip_nd6_ns_input() is obsolete.
ns_input function is defined static to be restrictively used in uip-nd6.c file, so removing the obsolete function requires moving the function description to the new function
No need to do the unspecified address twice.
#if UIP_ND6_DEF_MAXDADNS > 0
if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) {
/* DAD CASE */
..........
#else /* UIP_ND6_DEF_MAXDADNS > 0 */
if(uip_is_addr_unspecified(&UIP_IP_BUF->srcipaddr)) {
/* DAD CASE */
goto discard;
#endif /* UIP_ND6_DEF_MAXDADNS > 0 */
this logic will bring confusion, especially if you analyze the other ND functions (NUD, address resolution) .
The while loops waiting ACK_WAIT_TIME and AFTER_ACK_DETECTED_WAIT_TIME
cause infinite loop under the cooja-ip64 platform. This is because
RTIMER_NOW(), rtimer_arch_now(), has been changed not to call
cooja_mt_yield() in it since rtimer was reimplemented as a higher
resolution timer.
In order to avoid the infinite loop, cooja_mt_yield() needs to be
called inside the while loops under the platform as well as the cooja
platform.