1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00
RIOT/pkg
bors[bot] 0fb6a09598
Merge #18903
18903: pkg/tinyusb: add tinyUSB netdev driver r=dylad a=gschorcht

### Contribution description

This PR adds the tinyUSB netdev driver.

The tinyUSB netdev driver is part of the tinyUSB package and is enabled by module `tinyusb_netdev`. It is available for boards that provide the `tinyusb_device` feature.

**Please note** Since the tinyUSB package is distinct from (and incompatible with) the USB stack provided around USBUS in RIOT (see USB), the tinyUSB netdev driver cannot be used together with with any USBUS device class.

The tinyUSB netdev driver uses Ethernet over USB and supports the following protocols:
- CDC ECM (Ethernet Control Model)
- CDC NCM (Network Control Model)
- RNDIS (Microsoft Remote NDIS)

While Linux and macOS support all these protocols, Microsoft Windows only supports the RNDIS protocol and since Windows version 11 also the CDC NCM protocol. macOS supports the RNDIS protocol since version 10.15 (Catalina).

Which protocol is used is selected by the corresponding pseudomodules `tinyusb_class_net_cdc_ecm`, `tinyusb_class_net_cdc_ncm` and `tinyusb_class_net_rndis`.

The CDC ECM protocol (`tinyusb_class_net_cdc_ecm`) and the RNDIS protocol (`tinyusb_class_net_rndis`) can be used simultaneously to support all operating systems, for example :
```
USEMODULE='tinyusb_netdev tinyusb_class_net_rndis tinyusb_class_net_cdc_ecm' \
BOARD=... make -C ... flash
 ```
In this case, the CDC ECM protocol is the default protocol and the RNDIS protocol the alternative protocol defined as second device configuration. The CDC NCM protocol cannot be used together with the CDC ECM or the RNDIS protocol.

This PR includes PR #18983 for now to be compilable. 

Comparison with USBUS CDC ECM (`nucleo-f767zi` board):
```
   text	   data	    bss	    dec	    hex	filename
  65916	    596	  18728	  85240	  14cf8	tests_pkg_tinyusb_netdev.elf
```
```
   text	   data	    bss	    dec	    hex	filename
  63120	    544	  15444	  79108	  13504	tests_usbus_cdc_ecm.elf

```

### Testing procedure

Use a board that is supported by tinyUSB. Compile and flash the test application for each protocol:

1. RNDIS
    ```
    BOARD=... make -j8 -C tests/pkg_tinyusb_netdev flash
    ```
2. CDC ECM
    ```
    CLASS=tinyusb_class_net_cdc_ecm BOARD=... make -j8 -C tests/pkg_tinyusb_netdev flash
    ```
3. CDC NCM
    ```
    CLASS=tinyusb_class_net_cdc_ncm BOARD=... make -j8 -C tests/pkg_tinyusb_netdev flash
    ```
For each test, a network interface should be added on the host. Use command `ifconfig` on USB device and on the host and check that both have a link local address. In syslog there should be an output like the following:
<details>

```
Nov 13 18:14:46 gunny8 kernel: [4611465.480025] usb 1-2.2: new full-speed USB device number 28 using xhci_hcd
Nov 13 18:14:47 gunny8 kernel: [4611465.581641] usb 1-2.2: New USB device found, idVendor=1209, idProduct=7d01, bcdDevice= 1.00
Nov 13 18:14:47 gunny8 kernel: [4611465.581646] usb 1-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Nov 13 18:14:47 gunny8 kernel: [4611465.581650] usb 1-2.2: Product: nucleo-f767zi
Nov 13 18:14:47 gunny8 kernel: [4611465.581653] usb 1-2.2: Manufacturer: RIOT-os.org
Nov 13 18:14:47 gunny8 kernel: [4611465.581654] usb 1-2.2: SerialNumber: 6591620BCB270283
Nov 13 18:14:47 gunny8 vmnetBridge: RTM_NEWLINK: name:usb0 index:508 flags:0x00001002
Nov 13 18:14:47 gunny8 vmnet-natd: RTM_NEWLINK: name:usb0 index:508 flags:0x00001002
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.1066] manager: (usb0): new Ethernet device (/org/freedesktop/NetworkManager/Devices/528)
Nov 13 18:14:47 gunny8 kernel: [4611465.594604] rndis_host 1-2.2:1.0 usb0: register 'rndis_host' at usb-0000:00:14.0-2.2, RNDIS device, fa:db:7c:1b:58:80
Nov 13 18:14:47 gunny8 mtp-probe: checking bus 1, device 28: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2"
Nov 13 18:14:47 gunny8 mtp-probe: bus: 1, device: 28 was not an MTP device
Nov 13 18:14:47 gunny8 systemd-udevd[17796]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
Nov 13 18:14:47 gunny8 vmnet-natd: RTM_NEWLINK: name:usb0 index:508 flags:0x00001002
Nov 13 18:14:47 gunny8 kernel: [4611465.643852] rndis_host 1-2.2:1.0 enp0s20f0u2u2: renamed from usb0
Nov 13 18:14:47 gunny8 vmnetBridge: RTM_NEWLINK: name:usb0 index:508 flags:0x00001002
Nov 13 18:14:47 gunny8 vmnet-natd: RTM_NEWLINK: name:enp0s20f0u2u2 index:508 flags:0x00001002
Nov 13 18:14:47 gunny8 vmnetBridge: RTM_NEWLINK: name:enp0s20f0u2u2 index:508 flags:0x00001002
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.1833] device (usb0): interface index 508 renamed iface from 'usb0' to 'enp0s20f0u2u2'
Nov 13 18:14:47 gunny8 upowerd[2845]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.1
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.2037] device (enp0s20f0u2u2): state change: unmanaged -> unavailable (reason 'managed', sys-iface-state: 'external')
Nov 13 18:14:47 gunny8 vmnet-natd: RTM_NEWLINK: name:enp0s20f0u2u2 index:508 flags:0x00011043
Nov 13 18:14:47 gunny8 vmnetBridge: RTM_NEWLINK: name:enp0s20f0u2u2 index:508 flags:0x00011043
Nov 13 18:14:47 gunny8 vmnetBridge: Adding interface enp0s20f0u2u2 index:508
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.2075] device (enp0s20f0u2u2): carrier: link connected
Nov 13 18:14:47 gunny8 upowerd[2845]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2/1-2.2:1.0
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.2129] settings: (enp0s20f0u2u2): created default wired connection 'Kabelgebundene Verbindung 2'
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <warn>  [1668359687.2142] device (enp0s20f0u2u2): connectivity: "/proc/sys/net/ipv4/conf/enp0s20f0u2u2/rp_filter" is set to "1". This might break connectivity checking for IPv4 on this device
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.2151] device (enp0s20f0u2u2): state change: unavailable -> disconnected (reason 'none', sys-iface-state: 'managed')
Nov 13 18:14:47 gunny8 vmnetBridge: RTM_NEWLINK: name:enp0s20f0u2u2 index:508 flags:0x00011043
Nov 13 18:14:47 gunny8 vmnet-natd: RTM_NEWLINK: name:enp0s20f0u2u2 index:508 flags:0x00011043
Nov 13 18:14:47 gunny8 upowerd[2845]: unhandled action 'bind' on /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.2
Nov 13 18:14:47 gunny8 systemd-udevd[17796]: link_config: autonegotiation is unset or enabled, the speed and duplex are not writable.
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.2403] policy: auto-activating connection 'Kabelgebundene Verbindung 2' (0b1ae45e-c76e-3efb-a2cd-138ca2b2a59c)
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.2414] device (enp0s20f0u2u2): Activation: starting connection 'Kabelgebundene Verbindung 2' (0b1ae45e-c76e-3efb-a2cd-138ca2b2a59c)
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.2419] device (enp0s20f0u2u2): state change: disconnected -> prepare (reason 'none', sys-iface-state: 'managed')
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.2429] device (enp0s20f0u2u2): state change: prepare -> config (reason 'none', sys-iface-state: 'managed')
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.2440] device (enp0s20f0u2u2): state change: config -> ip-config (reason 'none', sys-iface-state: 'managed')
Nov 13 18:14:47 gunny8 NetworkManager[24229]: <info>  [1668359687.2445] dhcp4 (enp0s20f0u2u2): activation: beginning transaction (timeout in 45 seconds)
Nov 13 18:14:47 gunny8 vmnetBridge: RTM_NEWLINK: name:enp0s20f0u2u2 index:508 flags:0x00011043
Nov 13 18:14:47 gunny8 vmnet-natd: RTM_NEWLINK: name:enp0s20f0u2u2 index:508 flags:0x00011043
Nov 13 18:14:47 gunny8 avahi-daemon[1464]: Joining mDNS multicast group on interface enp0s20f0u2u2.IPv6 with address fe80::dba4:adb8:9ffe:d93e.
Nov 13 18:14:47 gunny8 avahi-daemon[1464]: New relevant interface enp0s20f0u2u2.IPv6 for mDNS.
Nov 13 18:14:47 gunny8 avahi-daemon[1464]: Registering new address record for fe80::dba4:adb8:9ffe:d93e on enp0s20f0u2u2.*.
Nov 13 18:14:47 gunny8 kernel: [4611465.895046] userif-1: sent link down event.
Nov 13 18:14:47 gunny8 kernel: [4611465.895052] userif-1: sent link up event.
```

</details>

Ping from and to the host.

### Issues/PRs references

Depends on PR https://github.com/RIOT-OS/RIOT/pull/18983

Co-authored-by: Gunar Schorcht <gunar@schorcht.net>
2023-02-03 09:32:29 +00:00
..
arduino_adafruit_sensor pkg/arduino_adafruit_sensor: add Adafruit Unified Sensor Driver 2022-12-15 18:36:05 +01:00
arduino_api pkg: remove -std=c++11 2022-01-13 17:50:59 +01:00
arduino_sdi_12 pkg/arduino_sdi_12: bump version, fix patches 2022-10-25 10:26:43 +02:00
c25519 pkg/pkg.mk: silence info if QUIETER 2022-06-01 10:54:01 +02:00
cayenne-lpp pkg/*/Kconfig: Add simple kconfig pkgs 2021-04-08 16:34:36 +02:00
ccn-lite pkg/ccn-lite: Fix use after free bug 2022-11-11 22:16:47 +01:00
cifra pkg/cifra: fix build error with redefined assert 2021-12-23 11:04:42 +01:00
cmsis-dsp pkg/cmsis-dsp: cleanup Makefile 2022-04-26 09:26:02 +02:00
cmsis-nn pkg/cmsis-nn: rework deps + model in Kconfig 2022-04-25 13:00:27 +02:00
cn-cbor pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
corejson pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
cryptoauthlib makefiles/cflags.inc.mk: Add -Wno-missing-field-initializers to CXXFLAGS 2022-10-27 14:28:06 +02:00
driver_atwinc15x0 pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
driver_bme680 pkg/driver_bme680: add missing include 2022-09-29 13:12:33 +02:00
driver_sx126x sys/ztimer/kconfig: enable xtimer compat only with timer backend 2021-12-02 09:38:06 +01:00
edhoc-c pkg/edhoc-c: add QQ 2022-06-01 10:48:34 +02:00
elk pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
emlearn pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
esp32_sdk cpu/esp32: move ESP32_SDK_DIR definition here 2022-10-10 20:39:47 +02:00
esp32_sdk_lib_bt_esp32 pkg/esp32_sdk_lib_bt_esp32: add BLE library for ESP32 2022-08-24 09:03:38 +02:00
esp32_sdk_lib_bt_esp32c3 pkg/esp32_sdk_lib_bt_esp32c3: add BLE library for ESP32-C3 2022-08-24 18:02:21 +02:00
esp32_sdk_lib_phy pkg/esp32_sdk_lib_phy: bump version 2022-06-05 11:53:31 +02:00
esp32_sdk_lib_wifi pkg/esp32_sdk_lib_wifi: bump version 2022-06-05 11:53:31 +02:00
esp8266_sdk pkg/esp8266_sdk: fix version string generation 2023-01-10 20:22:40 +01:00
etl pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
fatfs vfs: drop unused abs_path parameter 2022-09-29 22:01:37 +02:00
fff core/irq: Add C++ wrapper 2023-01-13 13:58:07 +01:00
fido2_tests sys/fido2: remove unnecessary module import from Makefile.dep 2022-01-31 16:49:38 +01:00
flatbuffers pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
gecko_sdk pkg/gecko_sdk: add librail 2022-10-15 15:42:13 +02:00
gemmlowp pkg: add Kconfig support for flatbuffers/ruy/tflite-micro 2022-04-27 10:53:50 +02:00
hacl pkg/hacl: documentation link update 2022-04-25 16:05:28 +02:00
heatshrink pkg/*/Kconfig: Add simple kconfig pkgs 2021-04-08 16:34:36 +02:00
jerryscript Merge pull request #18562 from MrKevinWeiss/pr/removemips 2022-09-30 10:47:09 +02:00
jsmn pkg/*/Kconfig: Add simple kconfig pkgs 2021-04-08 16:34:36 +02:00
libb2 pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
libbase58 pkg: silent make commands with RIOT_CI_BUILD=1 2021-03-12 16:05:18 +01:00
libcose pkg/libcose: add RIOT as crypto backend 2022-05-17 10:51:34 +02:00
libfixmath tests/pkg_libfixmath_unittests: adapt test to upstream changes 2023-01-20 17:42:54 +01:00
libhydrogen pkg/libhydrogen: silence gcc 11.2.0 false posive stringop-overflow 2022-09-27 09:36:23 +02:00
libsocketcan pkg/socketcan: add to resolve i386 support on Ubuntu 2022-04-20 11:49:33 +02:00
littlefs Merge pull request #18672 from benpicco/vfs-abs_path 2022-09-30 16:42:57 +02:00
littlefs2 pkg/littlefs2: bump version to 2.5.1 2022-11-10 16:17:24 -05:00
lora-serialization pkg/*/Kconfig: Add simple kconfig pkgs 2021-04-08 16:34:36 +02:00
lorabasics pkg/lorabasics: fix unused parameters warning 2022-08-18 01:05:31 +02:00
lua core/lib: Add macros/utils.h header 2023-01-07 09:47:44 +01:00
lv_drivers pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
lvgl pkg/lvgl: bump to 8.3.4 2022-12-16 09:32:47 +01:00
lwip drivers/mrf24j40: add support for IEEE 802.15.4 Radio HAL 2023-01-19 15:31:06 +01:00
lz4 pkg/lz4: bump version to 1.9.4 2023-01-20 14:49:20 +01:00
mbedtls pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
micro-ecc pkg/*/Kconfig: Add simple kconfig pkgs 2021-04-08 16:34:36 +02:00
microcoap pkg/*/Kconfig: Add simple kconfig pkgs 2021-04-08 16:34:36 +02:00
micropython cpu/mips: Remove all mips 2022-09-27 13:42:37 +02:00
minmea pkg/minmea: bump version 2023-01-20 15:25:25 +01:00
monocypher pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
mynewt-core Merge pull request #18029 from haukepetersen/verbump_nimble_nrfx2022 2022-06-10 04:11:26 +02:00
nanocbor pkg/nanocbor: bump version 2022-08-31 16:29:03 +02:00
nanopb pkg/nanopb: bump version to 0.4.7 2023-01-20 14:37:09 +01:00
nanors pkg/nanors: model in Kconfig 2022-05-03 16:09:20 +02:00
ndn-riot pkg/ndn-riot: add patch to fix CIPHER_AES_128 removal 2022-01-07 17:24:14 +01:00
nimble pkg/nimble/autoadv: fix flag comparisons 2023-02-02 15:45:00 +01:00
nmsis_sdk pkg/nmsis_sdk: add NMSIS SDK for Nuclei-based MCUs 2023-01-24 00:52:02 +01:00
nrfx pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
openthread pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
openwsn doc: fix unbalaced grouping 2022-09-14 15:05:25 +02:00
paho-mqtt Merge #18962 #18999 #19034 2022-12-11 12:03:28 +00:00
qcbor pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
qdsa pkg/qdsa: add -Wno-cast-align 2021-12-03 10:12:37 +01:00
qr-code-generator pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
relic pkg/relic: bump to current master (e3f82e36 from 08.11.21) 2021-11-08 23:18:30 +01:00
ruy pkg: add Kconfig support for flatbuffers/ruy/tflite-micro 2022-04-27 10:53:50 +02:00
semtech-loramac makefiles/cflags.inc.mk: Add -Wno-missing-field-initializers to CXXFLAGS 2022-10-27 14:28:06 +02:00
spiffs vfs: drop unused abs_path parameter 2022-09-29 22:01:37 +02:00
talking_leds pkg: remove -std=c++11 2022-01-13 17:50:59 +01:00
tensorflow-lite makefiles/cflags.inc.mk: Add -Wno-missing-field-initializers to CXXFLAGS 2022-10-27 14:28:06 +02:00
tflite-micro pkg/tflite-micro: fix compilation with GCC >= 12.x 2022-11-11 09:01:02 +01:00
tiny-asn1 pkg/tiny-asn1: Update tiny-asn1 package 2021-10-02 21:27:40 +02:00
tinycbor pkg/tinycbor: bump version 2022-02-02 14:44:50 +01:00
tinycrypt pkg/tinycryp: supress llvm warning 2021-09-07 09:35:00 +02:00
tinydtls pkg/tinydtls: don't set custom log level 2023-01-21 23:09:32 +01:00
tinyusb pkg/tinyusb: add tinyUSB netdev module 2023-02-01 21:58:01 +01:00
tinyvcdiff codespell: fix remaining issues 2022-09-16 14:00:35 +02:00
tlsf doc: fix unbalaced grouping 2022-09-14 15:05:25 +02:00
tweetnacl pkg/*/Kconfig: Add simple kconfig pkgs 2021-04-08 16:34:36 +02:00
u8g2 treewide: make all modules use Kconfig ZTIMER_USEC indirection 2022-03-17 14:33:07 +01:00
ubasic cpu/mips: Remove all mips 2022-09-27 13:42:37 +02:00
ucglib treewide: make all modules use Kconfig ZTIMER_USEC indirection 2022-03-17 14:33:07 +01:00
umorse pkg: silent make commands with RIOT_CI_BUILD=1 2021-03-12 16:05:18 +01:00
utensor pkg/utensor: fix uninitialized variable 2022-11-09 22:47:08 +01:00
uwb-core makefiles/cflags.inc.mk: Add -Wno-missing-field-initializers to CXXFLAGS 2022-10-27 14:28:06 +02:00
uwb-dw1000 pkg/uwb-dw1000: read ch5 pg_delay stored in OTP 2022-04-25 13:32:59 +02:00
uzlib pkg: Move versions to dedicated line 2022-09-26 17:45:54 +02:00
wakaama Merge pull request #18096 from Teufelchen1/feat/port_parsing 2022-09-19 13:40:53 +02:00
wamr pkg/wamr: Update to WAMR-1.1.1 2022-11-29 13:28:46 +01:00
wolfssl pkg/wolfssl: Fix memory leaks in wolfSSL sock_tls 2023-01-24 01:55:06 +00:00
yxml pkg/yxml: add git mirror url 2021-10-01 14:44:10 +02:00
doc.txt buildsystem: document EXTERNAL_PKG_DIRS feature 2022-02-01 19:37:24 +00:00
Kconfig cpu/gdv32: add pm_layered support 2023-01-24 00:52:02 +01:00
local.mk pkg/pkg.mk: better distinguish between source and build directory 2020-06-26 09:25:43 +02:00
Makefile.git pkg/Makefile.git: adapt example to new organization 2020-06-26 09:25:44 +02:00
Makefile.http pkg: add PKG_LICENSE to templates 2020-01-06 00:37:47 +01:00
pkg.mk pkg/pkg.mk: silence info if QUIETER 2022-06-01 10:54:01 +02:00