This is meant to remove the need for macro NET_IPV6_HDR(), since we
don't know in future if accessing the header that way will be valid.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Use the new net_pkt API to proceed through IPv6 header and all the
extension header as well.
Use udp/tcp input functions relevantly, and call net_conn_input
afterwards.
Note: This commit temporarly disable IPv6 fragmentation support
in the code directly. Which support will be re-enabled afterwards.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This is pretty much the same as in ICMPv4. Actually, when it comes to
the ICMP header, it could probably be put in a common places for both
ICMPv4 and ICMPv6.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Extension headers are specific and use nexthdr attribute from net_pkt.
next_header_proto is the user protocol (if any) that might require
finalization too (calculating the checksum).
However, if there are extension header, we need to skip those and jump
to the position where the user protocol starts.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Also, store the actual next_hdr value and not it's position.
This permits to reduce net_pkt from some bytes.
Such field was unused until now, but it will be soon.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This API is meant to work with pre-allocated net_pkt.
It assumes net_pkt's buffer cursor is at the right position where to
create the IPv6 header. Once done, the cursor will be placed right
after the newly created IPv6 header.
Finalizing assumes the same.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Function names will be normalized then by the couple create/finalize.
This one only sets the checksum.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Verifying udp/tcp checksum should be done before calling this function.
Also, up to ipv4 and ipv6 to provide a pointer to their respective
header.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This will be the place where UDP header is parsed: its checksum verified
and src/dst ports grabbed.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
It's now up to net_context to build the net_pkt and send it.
This will become the default.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
It's not anymore up to user to provide the pkt. Context will build the
packet according to its metadata and provided buffer and length.
It currently supports only IPv4 and UDP.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Unlike before, we allocate a new packet for the reply which is a
modified clone of the request.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This is meant to remove the need for macro NET_IPV4_HDR(), since we
don't know in future if accessing the header that way will be valid.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Function names will be normalized then by the couple create/finalize.
This one only sets the checksum.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
As before, such header is meant to be in a contiguous area (beginning
of the buffer, only 20 bytes)
Opportunistically chaning the function name to net_ipv4_input() (all
will be create/finalize/input).
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Newly received pkt can get their cursor intialized at net_recv_data()
(most of the time, drivers won't mangle with the content before calling
that function).
Right after l2 (net_if_recv_data()) parsing as well. L2s pull the
starting buffer after ll header. Instead of letting L2s updating the
cursor, it's simpler to reinitialize it directly after such parsing.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This will avoid new API's writing functions to modify the packet's
content. For instance while checking its checksum etc...
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Use the new API where relevant. Only sam_gmac is left aside for now.
This simplifies a lot the code as the caller should only care about
allocating net_pkt and its buffer once, and thus will not need to mess
with "frags" etc...
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This is the easiest piece to change using the new API, and can be used
as showing how this API can be used.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This API is meant to work with pre-allocated net_pkt.
It assumes net_pkt's buffer cursor is at the right position where to
create the UDP header. Once done, the cursor will be placed right after
the newly created UDP header.
Finalizing assumes the same.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
This API is meant to work with pre-allocated net_pkt.
It assumes net_pkt's buffer cursor is at the right position where to
create the IPv4 header. Once done, the cursor will be placed right
after the newly created IPv4 header.
Finalizing assumes the same.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
These ones would support linearizing non-contiguous area, however
requiring a bit more complex type as an "accessor".
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Adding a cursor into net_pkt. This is used to read/write data in a much
simpler way, for pre-allocated buffers in net_pkt. This avoids API users
to deal with net_buf below directly.
However, to be used - as for the new allocators - it will require deep
net stack core and API changes.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
These struct net_pkt allocators will give the possibility to allocate at
once the net_pkt and the buffer associated with, taking care of the
header space and MTU relevantly.
This enables to use the variable length allocator from net_buf. However,
it is not yet the default and is set as experimental.
As it is provided in parallel to existing allocators, it has to keep a
slab per-direction and thus a pointer in net_pkt, as well as appdata,
appdatalen etc... Resulting in "bloating" net_pkt. This will be solved
when, finally, former allocators will be removed.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
The net-app API is removed. Users should use the BSD socket API
for application development.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Previously, the net_app layer handled DNS support as a part of
network initialization. With the move to BSD-socket APIs,
we need to add support for DNS to the LwM2M library.
Signed-off-by: Michael Scott <mike@foundries.io>
This commit resets the firmware status to IDLE after a bad
download attempt. Previously, the firmware object would stay
in an odd state and any further attempts to download firmware
would return an error.
Signed-off-by: Michael Scott <mike@foundries.io>
We can save some resources by removing the periodic service thread
and replacing it by queuing the services to the work queue.
Before (reel_board using BT + DTLS)
Memory region Used Size Region Size %age Used
FLASH: 289464 B 1 MB 27.61%
SRAM: 75620 B 256 KB 28.85%
IDT_LIST: 136 B 2 KB 6.64%
After
Memory region Used Size Region Size %age Used
FLASH: 289576 B 1 MB 27.62%
SRAM: 74596 B 256 KB 28.46%
IDT_LIST: 136 B 2 KB 6.64%
Signed-off-by: Michael Scott <mike@foundries.io>
Now that the security data can be loaded into and used from the
security / server objects, we can add support for LwM2M bootstrap.
This is a mode where initially a connection can be made to a server
which can update several LwM2M (including security and server
data) and then trigger a "bootstrap complete". Once this happens
the client will start it's connection process over but now with
the new information.
Signed-off-by: Michael Scott <mike@foundries.io>
In order to support bootstrap mode, we need to store server data
in the security / server objects. Once the connection to the
bootstrap server is made, it will clear these objects and add
new server connection data.
Signed-off-by: Michael Scott <mike@foundries.io>
For bootstrap support, we need to store connection credentials
in the security object. This way the client can start a connection
at index 0 and after bootstrapping, move to the next connection.
Let's add the needed fields and a config item to set the key length.
Signed-off-by: Michael Scott <mike@foundries.io>
Update the parsing functions for JSON used by the JSON data
formatter and enable it in the LwM2M engine.
Signed-off-by: Michael Scott <mike@foundries.io>
The JSON formatter is currently not enabled for incoming WRITE
operations. To update the code in the formatter and not litter
the input context with extra data, let's allow formatters to
store their own user data.
Signed-off-by: Michael Scott <mike@foundries.io>
net_app contexts save the remote address and we use this during
observe notifications and pending handling. If we move to another
network layer such as sockets, then the remote address becomes
harder to reference. Let's save it as a part of the client
context.
Signed-off-by: Michael Scott <mike@foundries.io>
As part of the migration from net_app APIs to socket APIs, let's
stop referencing the net_pkt fragments throughout the LwM2M library.
Establish a msg_data flat buffer inside lwm2m_message and use that
instead.
NOTE: As a part of this change we remove the COAP_NET_PKT setting.
The COAP library reverts to COAP_SOCK behavior.
This doesn't mean we use sockets in LwM2M (yet), it only means we
use the socket-compatible COAP library which parses flat buffers
instead of net_pkt fragments.
Signed-off-by: Michael Scott <mike@foundries.io>
Currently, this will select the needed configs for LwM2M and net_pkt.
During the migration to socket APIs, the net_pkt selections will change
to socket-based selects.
Signed-off-by: Michael Scott <mike@foundries.io>
Fixed spelling mistake in shell's Kconfig file.
Updated description in SHELL_CMD_BUFF_SIZE description.
In shell.c: removed obsolete empty line, added empty line
at the end of file.
Signed-off-by: Jakub Rzeszutko <jakub.rzeszutko@nordicsemi.no>
This commit updates the README and sample.yaml in order to signal
that this demo works flawlessly on the nRF51 platform.
Signed-off-by: Piotr Zięcik <piotr.ziecik@nordicsemi.no>
If the net_context functions are accessed from preemptive priority,
then we need to protect various internal resources.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>