On receiving a DIO message, RPL sets the lifetime for the default
route and the parent timeout event to the value. This leads to short
amounts of time whem the node looses its default route, while it
handles the parent timeout event to probe its parent.
This commit fixes this by adding time the node needs for probing
to the default route lifetime.
In most places, picolibc and newlib are the same, so use
the existing newlib code when compiling with picolibc.
Signed-off-by: Keith Packard <keithp@keithp.com>
Support for picolibc as alternative libc implementation is added with
this commit. For now only cortex-m CPU's are supported.
Enable via PICOLIBC=1
---
v2:
squash fixes in
v3:
Remove picolibc integer printf/scanf stuff from sys/Makefile.include,
it gets set in makefiles/libc/picolibc.mk
fixup for dependency
picolibc: Use thread_getpid for getpid() in picolibc_syscalls_default
Instead of directly accessing the sched_active_pid variable (which
isn't defined in this context), use the existing wrapper function
to get that value.
Signed-off-by: Keith Packard <keithp@keithp.com>
---
v2:
Squash a couple of fixes in
* fixup! picolibc: Use thread_getpid for getpid() in
picolibc_syscalls_default
* squashme: Add `times` to picolibc syscalls
* Add __noreturn__ attribute to _exit
* Add VFS syscall wrappers. This provides the POSIX api used
by picolibc stdio
When `xtimer_on_ztimer` is used, `xtimer` does not need to perform any clock
conversion. Especially undefined macros of `XTIMER_HZ` and `XTIMER_SHIFT` should
no longer result in compilation issues, as they are not used internally anyway.
`ztimer_init_extend()` should only be defined when module `ztimer_extend` is
used, as otherwise the `struct` member `clock->max_value` is not available.
Add functions to generate an EUI based on the netdev ID.
This will always return the same EUI for the same netdev, so it is
stable across netdev resets.
Coverty scan found this:
> CID 298295 (#1 of 1): Operands don't affect result (CONSTANT_EXPRESSION_RESULT) result_independent_of_operands:
> (ipv6_hdr_get_fl(ipv6_hdr) & 255) >> 8 is 0 regardless of the values of its operands.
Looking at the code, this appears to be a copy & paste error from the previous line.
Coverty scan found this:
> CID 298279 (#1 of 1): Out-of-bounds read (OVERRUN)
> 21. overrun-local: Overrunning array of 16 bytes at byte offset 64 by dereferencing pointer
The original intention was probably to advance the destination pointer by 4 bytes, not
4 * the destination type size.
When the expected ROM overhead of a function is bigger than the actual function,
it is better to provide the function as static inline function in the header.
The value of `queue->waiter` at the time the event was queued (with IRQs
disabled) was backed up to the stack-variable `waiter`. Thus, the test later on
for `waiter` checks if the queue was already claimed at the time the event
was queued. Therefore, there is no race.