The problem is that net_if_call_timestamp_cb only checked if the
callback was registered for the PORT which invoked the whole action.
There is a possibility, that the callback will be registered, and packet
A will be passed to eth driver. Before the driver is finished with
packet A, network layer will start handling another packet (B) - so it
will unregister the callback for packet A and register it for B. After
that the network driver will finish processing packet A and invoke the
timestamp callback. The mechanism would then only check if a callback is
registered for the port of the driver and invoke the callback for the
packet that was registered earlier (so A instead of B).
This commit fixes that by storing info not only about the port but about
the packet too.
Signed-off-by: Tomasz Gorochowik <tgorochowik@antmicro.com>
Previously the newer one got dropped.
The older ones will be dropped in a way that the follow up messages for
them will not be sent.
Signed-off-by: Tomasz Gorochowik <tgorochowik@antmicro.com>
The gptp port number starts from 1, so the check was incorrect.
Use the proper define values before printing stats.
Signed-off-by: Tomasz Gorochowik <tgorochowik@antmicro.com>
The shell did not check if the gptp port (command argument) is numeric.
Add that check before executing the port info functions.
Signed-off-by: Tomasz Gorochowik <tgorochowik@antmicro.com>
An empty packet on 2M phy is one more byte compared to 1M phy because
of the preamble.
The empty packet is then 11 bytes, which takes 44 us to transmit.
Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
Address Sanitizer helps finding issues related to memory: buffer
overflows, usage of uninitialized memory, etc. This is available in
both Clang and GCC for a while, and, since the POSIX port is only
meant for testing, this will help find issues.
Signed-off-by: Leandro Pereira <leandro.pereira@intel.com>
Signed-off-by: Alberto Escolar Piedras <alpi@oticon.com>
Fix possible null pointer dereference if the device
descriptor is not complete.
Fixes: #8700
Coverity-ID: 186841
Signed-off-by: Johann Fischer <j.fischer@phytec.de>
A small helper function will return information whether
a given network interface has VLAN enabled or not.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This commit removes the inclusion of kernel_includes.h from
the nRF51 and nRF52 soc.h headers. This prevents from an
inclusion cycle formation on soc.h. In the wake of
kernel_includes.h removal, necessary header files have been
added in several source files to be able to compile Zephyr for
nRF5x SOCs.
Signed-off-by: Ioannis Glaropoulos <Ioannis.Glaropoulos@nordicsemi.no>
Do not clear pending PDELAY_REQ pointer when sending a new one.
Unref the state->tx_pdelay_req_ptr first and only then set the
new pointer value. This will prevent buffer leak if we miss the
response from the peer.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Make sure that the calculated ratio values are used just once.
Without this, if the ratio is even insignificantly larger than 1, the
actual clock quickly drifts to really large numbers. This causes the
sync procedure to restart too often.
Signed-off-by: Tomasz Gorochowik <tgorochowik@antmicro.com>
The problem with the previous approach was that the response timestamp
callback which calls net_pkt_unref could be skipped if the callback was
already registered for another packet. The net_pkt_ref function was
always called which led to memory leaks.
This commit simply disallows handling multiple pdelay requests at once.
If the timestamp callback is already registered, the received request
will not be handled.
Signed-off-by: Tomasz Gorochowik <tgorochowik@antmicro.com>
The issue was that the length field of the tlv extension in the sync
follow up packets was wrong. It is supposed to skip the length of the
header of that extension. The easiest fix was separating the header and
the actual contents into separate structs and that's what this commit
does.
Signed-off-by: Tomasz Gorochowik <tgorochowik@antmicro.com>
As the PTP clock should return the correct time, use that
instead of zephyr uptime for time as that has only ms accuracy.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Use priority 3 (critial app) for outgoing event messages (Sync,
Pdelay_Req and Pdelay_Resp). Use priority 6 (Internetwork Control)
for all other outgoing packets.
See IEEE 802.1Q chapter 8.4.4 for more details.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Split meaning of BT_CTLR and BT_LL_SW, since they always are the same.
This way BT_CTLR means that there an controller implemented,
and BT_LL_SW refers to the specific implementation.
This allows alternative controller implementations.
Signed-off-by: Joakim Andersson <joakim.andersson@nordicsemi.no>
Split out definition of net_app_init() and its parameter flags from
net_app.h header to new net_config.h header. As we do this, rename
the function to net_config_init() and flags to NET_CONFIG_NEED_*.
This is a second step in splitting out network configuration API
out of net_app API, started in the c60df1311 commit.
Signed-off-by: Paul Sokolovsky <paul.sokolovsky@linaro.org>
There is no link address for Dummy network technology, so check
that before trying to print link address.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This allows zephyr to listen LLMNR DNS queries sent by Windows
and respond to them. See RFC 4795 for details.
The feature requires that hostname is set properly to the
zephyr device and LLMNR is configured properly.
Typically following config options are enough for this support:
CONFIG_NET_HOSTNAME_ENABLE=y
CONFIG_NET_HOSTNAME="zephyr-device"
CONFIG_DNS_RESOLVER=y
CONFIG_LLMNR_RESPONDER=y
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
This implements LLMNR client from RFC 4795. This means that caller
is able to resolve DNS resource records using multicast DNS.
The LLMNR is used in Windows networks.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
An ARP entry, if not free, will be either in pending list or in the ARP
table. What differentiate both is the type of data they hold: either a
pending packet or an actual ethernet address.
It is then possible to unite these 2 attributes to save 4 bytes
per-entry.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Until now, each ARP entry had a k_delayed_work to be used as a timer
when the ARP entry is a pending one, waiting for the ARP request to
succeed in order to get to the ARP table.
But k_delayed_work is not a small object (40 bytes). Thus reworking the
ARP request timer by having one central k_delayed_work and a timestamp
in every ARP entry properly handled at every timeout (1+ entry might
have reached the timeout then).
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Instead of looping over the entries array, which will keep the same
order, let's use slist: one for free entries, one for pending ones and
finally one as the actual ARP table.
This permits some optimizations in how to look up and making small
heuristics by changing entries order when it seems relevant.
Signed-off-by: Tomasz Bursztyka <tomasz.bursztyka@linux.intel.com>
Adding new implementation of logging subsystem. New features
includes: support for multiple backends, improving performance
by deferring log processing to the known context, adding
timestamps and logs filtering options (compile time, runtime,
module level, instance level). Console backend added as the
example backend.
Signed-off-by: Krzysztof Chruściński <krzysztof.chruscinski@nordicsemi.no>
This "net gptp [port id]" command will give some extra info about
gPTP status if gPTP is enabled in config file.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
The application does not do much, it just registers to a callback
in order to get information about gPTP.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Instead of storing a bt_addr_le_t, just store a pointer to the bt_conn
object (which is what the code is interested in anyway). This way the
user data size requirement drops from 7 to 4, which is the default
that all current users are happy with.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
The Configuration Model specification states that all non-unicast
addresses given as the address of an element are Prohibited. The
correct action for Prohibited parameter values is to ignore the
message. As of writing this patch the PTS does not enforce this, but
it might in the future (as it does for many other Prohibited values).
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Previously the code only checked if any of the models within an
element had the destination address in their subscription list. After
that check the specific model that the message was addressed to was
not verified to have that address in it's subscription list. This
patch fixes the problem.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
The nRF52810 is a low-cost variant of the nRF52832, with a reduced set
of peripherals and memory. This commit adds Bluetooth controller support
for it.
Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
The subsys/net/ directory is more logical place for L2 code instead
of ip/ directory. No functionality changes by this commit.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
When we're reading the initial state from flash, calling the various
internal functions was leading to scheduling a rewrite to flash. Add
an extra parameter to the appropriate functions so they know when
they're called due to active configuration by a configuration client,
and when they're called due to restoring the state from flash.
This was not only wasting flash space, but also causing erroneous
behavior with the FCB settings backend if there was an intermediate
node reset operation stored, followed by a reprovisioning. The node
reset entries would cause them to be re-appened after the second valid
provisioning, leading to an incomplete node state.
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>