Skip to content

Conversation

@jukkar
Copy link
Owner

@jukkar jukkar commented Mar 22, 2018

This PR implements an application that can be used for automatic testing of networking code. This test application supports currently echo-server functionality and it also supports VLAN, TCP, UDP, IPV6 and IPV4.

The application supports currently SLIP (running in QEMU), ethernet in native-posix board and FRDM-K64F boards (basically all boards that have ethernet are supported). In the future other non-ethernet boards will be supported.

jukkar added 19 commits March 29, 2018 13:00
This allows creation of virtual lan (VLAN) networks. VLAN support is
only available for ethernet network technology.

Fixes zephyrproject-rtos#3234

Signed-off-by: Jukka Rissanen <[email protected]>
Add tests to verify the bit manipulation functions in net/vlan.h
file. Also check that we can check if given network interface has
VLAN enabled or not. Verify also that received network packet
contains correct VLAN tag.

Signed-off-by: Jukka Rissanen <[email protected]>
Add commands to add, remove or get information about VLANs
attached to network interfaces.

Signed-off-by: Jukka Rissanen <[email protected]>
This application just enables VLAN tag for ethernet interface.
Set CONFIG_SAMPLE_VLAN_TAG option to define the desired VLAN tag.

Signed-off-by: Jukka Rissanen <[email protected]>
This enables / fixes VLAN support in mcux ethernet driver.

The commit contains these changes for enabling VLAN:
* Increase the size of the ethernet frame if VLAN is enabled.
* Enable VLAN in chip if VLAN is enabled
* If VLAN is enabled, then the iface in context struct should
  not be used directly as there can be multiple VLAN iface
  related to this physical device.

Signed-off-by: Jukka Rissanen <[email protected]>
Support also virtual LAN (VLAN) with native_posix ethernet driver.

Signed-off-by: Jukka Rissanen <[email protected]>
This enables VLAN support in gmac ethernet driver.

Signed-off-by: Jukka Rissanen <[email protected]>
Allow multiple VLANs to be configured for SLIP.

Signed-off-by: Jukka Rissanen <[email protected]>
When sending packet add the VLAN priority to the ethernet header.

Signed-off-by: Jukka Rissanen <[email protected]>
Currently the VLAN priority is the same as packet priority but
if such conversion is needed, then this function can be used
for such conversion.

Signed-off-by: Jukka Rissanen <[email protected]>
Set the received network packet priority according to VLAN priority.
Currently this mapping is 1:1 but can be changed if needed.

Signed-off-by: Jukka Rissanen <[email protected]>
The DEVICE_NAME_GET() macro should be used instead of fixed
string when creating a device pointer in net_if_dev structure.

Signed-off-by: Jukka Rissanen <[email protected]>
If we have multiple network interfaces and we want to send
a IPv4 network packet to certain destination, then this new
helper can be used to figure out what network interface to use.

Signed-off-by: Jukka Rissanen <[email protected]>
Instead of always using default interface, use the IPv4 target
address to select the correct network interface when sending
IPv4 ping request.

Signed-off-by: Jukka Rissanen <[email protected]>
If we have multiple network interface (like in VLAN), then we need
to select the proper local interface based on destination address.

Signed-off-by: Jukka Rissanen <[email protected]>
As the l2_data section might contain different size context elements
like "struct ethernet_context" for Ethernet and "void *" for
Dummy L2, remove the __net_l2_start and __net_l2_end variables so
that user does not accidentally try to use them as that would not work.

Signed-off-by: Jukka Rissanen <[email protected]>
In IPv4 we need to select the network interface, where the packet
is to be sent, using the IPv4 address instead of default network
interface.

Signed-off-by: Jukka Rissanen <[email protected]>
User is able to take a network interface down or bring it up.
The command syntax is "net iface [up|down] [index]"

Signed-off-by: Jukka Rissanen <[email protected]>
Although very unlikely, make sure that if the net_recv_data() is
called with NULL network interface or packet, we recover that and
return error to the caller.

Signed-off-by: Jukka Rissanen <[email protected]>
@jukkar jukkar force-pushed the net-automatic-testing branch from 4b624c9 to ffcdc23 Compare March 29, 2018 11:03
jukkar and others added 10 commits March 29, 2018 14:05
Instead of one global statistics, collect statistics information
separately for each network interface. This per interface statistics
collection is optional but turned on by default. It can be turned
off if needed, in which case only global statistics are collected.

Signed-off-by: Jukka Rissanen <[email protected]>
Make sure that we return proper network statistics data if
someone asks it via network management interface.

Signed-off-by: Jukka Rissanen <[email protected]>
Simple application that queries network statistics periodically
via net_mgmt interface.

Signed-off-by: Jukka Rissanen <[email protected]>
Make sure we are able to collect ethernet statistics and query
it via net management API.

Signed-off-by: Jukka Rissanen <[email protected]>
Collect ethernet statistics for this driver.

Signed-off-by: Jukka Rissanen <[email protected]>
If ethernet statistics collection is enabled, then print it
to the user.

Signed-off-by: Jukka Rissanen <[email protected]>
Allow creation of TX timestamp thread which will collect TX timestamp
information from device drivers. If the callback is registered, then
it will pass that timestamp information to the relevant party for further
processing. This support will be used by gPTP code in subsequent
commits.

Signed-off-by: Jukka Rissanen <[email protected]>
Signed-off-by: Julien Chevrier <[email protected]>
Defines a PTP clock driver that can be implemented in those network
interface drivers that provide gPTP support.

Signed-off-by: Jukka Rissanen <[email protected]>
Signed-off-by: Julien Chevrier <[email protected]>
Core IEEE 802.1AS (gPTP) support and application interface.

Signed-off-by: Jukka Rissanen <[email protected]>
Signed-off-by: Julien Chevrier <[email protected]>
Fix timestamping in MCUX external library. The nanosecond part of the
frame timestamp wasn't saved.

Signed-off-by: Julien Chevrier <[email protected]>
jukkar added 16 commits March 29, 2018 14:06
If the mcux driver has PTP support, then enable
ENET_ENHANCEDBUFFERDESCRIPTOR_MODE in HAL.

Signed-off-by: Jukka Rissanen <[email protected]>
We need to use only four low order bits from first byte of PTP message
as that contains the message type value.

Signed-off-by: Jukka Rissanen <[email protected]>
This adds packet timestammping support to the driver and configures
various PTP options in ENET.

Signed-off-by: Jukka Rissanen <[email protected]>
Signed-off-by: Julien Chevrier <[email protected]>
The application does not do much, it just registers to a callback
in order to get information about gPTP.

Signed-off-by: Jukka Rissanen <[email protected]>
Test that Tx timestamp callback code is called properly if network
packet timestamping is enabled.

Signed-off-by: Jukka Rissanen <[email protected]>
This will give some extra info about gPTP status and support if
gPTP support is enabled in config file.

Signed-off-by: Jukka Rissanen <[email protected]>
Add gPTP information to documentation.

Signed-off-by: Jukka Rissanen <[email protected]>
Signed-off-by: Julien Chevrier <[email protected]>
Allow this setup as Linux supports this too.

Signed-off-by: Jukka Rissanen <[email protected]>
If VLAN is enabled for specific PTP interface, then manipulate
the ethernet header properly in this case.

Signed-off-by: Jukka Rissanen <[email protected]>
By default gPTP is not run over VLAN but if needed that can be
done by uncommenting statement at the beginning of the file.

Signed-off-by: Jukka Rissanen <[email protected]>
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 <[email protected]>
Set the received PTP packet priority high so that those packets
will be handled first.

Signed-off-by: Jukka Rissanen <[email protected]>
This is not very scientific but can give some hint how much we
are spending in TX and RX paths.

Signed-off-by: Jukka Rissanen <[email protected]>
For debugging purposes it is useful to know which interface
the dropped packet was received.

Signed-off-by: Jukka Rissanen <[email protected]>
Allow gPTP code to be run as a linux process and communicate
with gPTP daemon running in linux host.

Signed-off-by: Jukka Rissanen <[email protected]>
This is a simple network application that is used by automatic
testing scripts. The application currently enables IPv6 and IPv4,
TCP and UDP, VLAN and traffic class support, and echo-server service.

Signed-off-by: Jukka Rissanen <[email protected]>
@jukkar jukkar force-pushed the net-automatic-testing branch from ffcdc23 to 4b1cbb8 Compare March 29, 2018 11:10
@jukkar jukkar changed the title Network test application for automatic testing Network test application for automatic testing [Do not use, this is replaced by another PR] May 21, 2018
jukkar pushed a commit that referenced this pull request Jun 22, 2020
This makes the gatt metrics also available for
gatt write-without-rsp-cb so it now prints the rate of each write:

uart:~$ gatt write-without-response-cb 1e ff 10 10
Write #1: 16 bytes (0 bps)
Write #2: 32 bytes (3445948416 bps)
Write #3: 48 bytes (2596929536 bps)
Write #4: 64 bytes (6400 bps)
Write #5: 80 bytes (8533 bps)
Write #6: 96 bytes (10666 bps)
Write #7: 112 bytes (8533 bps)
Write #8: 128 bytes (9955 bps)
Write #9: 144 bytes (11377 bps)
Write #10: 160 bytes (7680 bps)
Write #11: 176 bytes (8533 bps)
Write #12: 192 bytes (9386 bps)
Write Complete (err 0)
Write #13: 208 bytes (8533 bps)
Write #14: 224 bytes (9244 bps)
Write #15: 240 bytes (9955 bps)
Write #16: 256 bytes (8000 bps)

Signed-off-by: Luiz Augusto von Dentz <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants