Data formatters have various private state variables which are
currently located in the output context structure. Let's add
a place where data formatters can store a pointer to their
private data so that as we add more formatters the output
context doesn't get cluttered up.
Signed-off-by: Michael Scott <mike@foundries.io>
The plain-text format only supports READ op for a specific resource.
In all other cases return NOT_ALLOWED.
Signed-off-by: Michael Scott <mike@foundries.io>
Data formatters are becoming too complex for a simple do_read_op()
function to handle all in one place. Also, more data formatters are
going to be added for LwM2M v1.1 support in the future.
In order for data formatters to perform internal setup or deny
invalid requests (specific to the formatter's logic), let's
establish do_read_op_* functions in each formatter.
Once the internal processing is done, they can call back into the
more generic lwm2m_perform_read_op function.
Signed-off-by: Michael Scott <mike@foundries.io>
Let's correct the starting logic in do_read_op() to not assume
a default value of 0 will be present for the first object, when
reading multiple objects.
Signed-off-by: Michael Scott <mike@foundries.io>
The object instance list isn't sorted by object instance id. Let's
simplify this and fix the logic in lwm2m_next_engine_obj_inst() to make
sure that we always get the NEXT object instance by value of
obj_inst_id, not just the next object instance in the list.
NOTE: This change removes the "last" object instance pointer from the
parameters of lwm2m_next_engine_obj_inst(). Some of the logic to return
a NULL value for the end of the list has to be moved back into
do_read_op().
Signed-off-by: Michael Scott <mike@foundries.io>
Remove over-complicated match_type logic in do_read_op(). Replace
MATCH_* checks with actual path->level values.
Signed-off-by: Michael Scott <mike@foundries.io>
The ciaddr can be null in requesting state so do not try to print
it in that case.
Fixes#9575
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This is similar to change which was done in 21f31e90ec, unfortunately
this case was missed.
Fixes: #9032
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
The peers were not informed about DTLS connection close because
we removed DTLS context. The fix is to notify peers before we
remove the DTLS connection.
Fixes#8605
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The code in le_set_private_addr() was hardcoding identity 0, even
though it is given a specific identity as an input parameter.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
NET_CONN_CB() functional macro hides the parameters a function takes
and its return type. In #8723, it's proposed to remove that macro
altogether. Until that proposal is reviewed, at least provide real
protype in code comments to help people who read/analyze the code.
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
If a malformed packet with multiple HBHO is received by the Zephyr IP
stack it replies with ICMPv6 type 4 code 1: "Parameter problem
unrecognized Next Header type encountered". This ICMPv6 message has
wrong IPv6 payload length and ICMPv6 checksum.
RFC 8200 in chapter 4.1 states:
Each extension header should occur at most once, except for the
Destination Options header, which should occur at most twice (once
before a Routing header and once before the upper-layer header).
There are two possible solutions to the problem at hand:
1) Respond with ICMPv6 Parameter problem, in this case IPv6 length and
ICMPv6 checksum need to be fixed
2) Drop the malformed packet
This patch implements the easy solution - 2. Basically it changes the
code to drop the malformed packet instead of sending ICMPv6 type 4
code 1.
Signed-off-by: Ruslan Mstoi <ruslan.mstoi@intel.com>
When processing an observe request we fail to check whether a
resource has the read permission set. Let's check and if it
doesn't return -EPERM.
NOTE: Also do diligence and return -ENOENT when an object field
cannot be found while looking for the permission.
Fixes https://github.com/zephyrproject-rtos/zephyr/issues/8286
Signed-off-by: Michael Scott <mike@foundries.io>
Due to a change in the company name, the LwM2M copyrights need
to be changed from "Open Source Foundries Limited" ->
"Foundries.io".
Signed-off-by: Michael Scott <mike@foundries.io>
patch add a OUT interrupt endpoint descriptor and registers a
corresponding notification callback with usb driver, which is invoked
when data is sent to device from host.
Implement the read ready notification as suggesteed by
Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Savinay Dharmappa <savinay.dharmappa@intel.com>
Signed-off-by: Johann Fischer <j.fischer@phytec.de>
These were at most set, but never used. They appear to be artifacts
of importing code from the FNET stack.
Addresses: #9570
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
In TCP protocol, any packet is subject to retransmission if not
ACKed in expected time. Thus, any packet, including FIN (and SYN
for that matter) should be added to the retransmission queue.
In our case, despite its name, queue_fin() function didn't add
FIN packet to rexmit queue, so do that. Then, in
net_tcp_ack_received() which handles ACKs, make sure that we can
handle FIN packets: calculate its sequence number properly, don't
make adhoc adjustments to retransmission logic (it's handled
centrally in restart_timer() already), etc.
Fixes: #8188
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
If we run out of buffers and cannot create the TCP segment,
then handle it properly and do not access NULL pointer.
Coverity-CID: 187822
Fixes#9639
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
If there is timeout when adding UDP data, then check this
condition and bail out by returning NULL as the packet is now
malformed.
Coverity-CID: 187825
Fixes#9636
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The previous code "optimized" and called both net_context_accept()
and net_context_recv() blindly to reset the corresponding callbacks.
But this leads to "wrong state" logging if debugging is enabled, so
clean that up.
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
1. Where we calculate max size, name variable (preprocessor define)
correspondingly.
2. Calling TCP/UDP an "app protocol" is original, use "next protocol"
terminology of IPv6.
3. As headers go as IP, then "next", order calculations that way too.
4. Add more comments.
Addresses: #8723
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
The current code computes the block-aligned len by ANDing the len with
~write_block_size instead of ~(write_block_size - 1).
In addition the compute value can be 0 (for lengths that are less than
the block size), so the first flash write might have to be skipped.
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Replase magic numbers with HCI Error Code definitions in the
LE controller implementation.
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
Updated the implementation of Connection Update Procedure to
not assert when peer master violates the Bluetooth
Specification v5.0 Vol.6 Part B Section 5.3 Procedure
Collisions. Instead disconnect the link with reason
Different Transaction Collision (0x2A).
Certain phones in the market perform Connection Update
Procedure and do not correctly handle remote initiated
colliding PHY update procedures. They try to perform both
the transactions involving an instant simultaneously
violating the Bluetooth Specifications.
Implementation in Zephyr is updated to gracefully handle
the violating remote master device, and not fatally assert
in the local device.
Relates to commit 8b3fd6963c ("Bluetooth: controller: Fix
assert on different transaction collision")
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
Add support for OS managed Power Management framework for Zephyr
under 'subsys/power'. This framework takes care of implementing
the _sys_soc_suspend/_sys_soc_resume API's, a PM policy based on
SoC Low Power residencies and also provides necessary API's to
do devices suspend and resume.
Also add necessary changes to support the existing Application
managed Power Management framework.
Signed-off-by: Ramakrishna Pallala <ramakrishna.pallala@intel.com>
CONFIG_NET_OFFLOAD was defined in Kconfig of net/ip/l2/, but actually
used by the code in net/ip/.
Fixes: #8646
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
If cfg_changed has not been set consider that the application don't
care and just skip it.
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Move to more generic tracing hooks that can be implemented in different
ways and do not interfere with the kernel.
Signed-off-by: Anas Nashif <anas.nashif@intel.com>
Spurious TCP retries were observed using Wireshark while continuously
sending TCP packets at an interval faster than the initial RTO.
If the send list is empty and CONFIG_NET_TCP_TIME_WAIT_DELAY is used,
the retry timer will not be correctly stopped when receiving a valid
ACK. As a consequence, the timer might be running when a new packet is
queued, but the logics in net_tcp_queue_data() will not restart the
timer as it is already running. This will make the retry timer to expire
prematurely, potentially while sending packets.
The nested condition is merged into a single condition, allowing the
final else clause to be reached when a valid ACK is received.
Signed-off-by: Florian Vaussard <florian.vaussard@gmail.com>
Updated the implementation of PHY update procedure to not
assert when peer master violates the Bluetooth Specification
v5.0 Vol.6 Part B Section 5.3 Procedure Collisions. Instead
disconnect the link with reason Different Transaction
Collision (0x2A).
Certain phones in the market perform Connection Update
Procedure and do not correctly handle remote initiated
colliding PHY update procedures. They try to perform both
the transactions involving an instant simultaneously
violating the Bluetooth Specifications.
Implementation in Zephyr is updated to gracefully handle
the violating remote master device, and not fatally assert
in the local device.
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
The code was not working properly if there was multiple timers
that were triggered in different times.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The autoconfigured IPv6 addresses that are related to removed
prefix, need also removed.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
If the IPv6 address expires, then it is marked as deprecated.
If a renewal is received in router advertisement, then the address
can be re-used again and is marked as preferred.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
No functionality changes. Just moved IPv6 fragment and related functions
to ipv6_fragment.c for better readability
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
No functionality changes. Just moved IPv6 MLD and related functions
to ipv6_mld.c for better readability.
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
No functionality changes. Just moved IPv6 neighbor and related functions
to ipv6_nbr.c for better readability.
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
Each IPv6 neighbor entry had a k_delayed_work to be used as a timer to
send ND reachable message and waiting for the reply in order to get to
the neighbor details.
But k_delayed_work is not a small object (40 bytes). Thus reworking the
IPv6 ND reachable request timer by having one central k_delayed_work
and a timestamp in every IPv6 neighbor data entry properly handled at
every timeout.
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
Each IPv6 neighbor entry had a k_delayed_work to be used as a timer to
send NS message and waiting for the NS reply in order to get to the
neighbor details.
But k_delayed_work is not a small object (40 bytes). Thus reworking the
IPv6 send NS request timer by having one central k_delayed_work and
a timestamp in every IPv6 neighbor data entry properly handled at every
timeout.
Signed-off-by: Ravi kumar Veeramally <ravikumar.veeramally@linux.intel.com>
This commit contains several fixes for DTLS implementation, proposed in
a post-merge review of #9338.
Signed-off-by: Robert Lubos <robert.lubos@nordicsemi.no>
Instead of having one delayed_work struct / IP address, use
only one delayed_work struct for lifetime timer. This saves
over 20 bytes / allocated address struct.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>