Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sys/net/nanocoap: Add CoAP over TCP support #21048

Draft
wants to merge 22 commits into
base: master
Choose a base branch
from

Conversation

maribu
Copy link
Member

@maribu maribu commented Nov 26, 2024

Contribution description

This PR adds CoAP over TCP support to nanocoap. It is still work in progress, with many rough edges. This will get updated and filled in with more details as the PR evolves.

Testing procedure

Run sudo ./dist/tools/tapsetup/tapsetup

Server

NETWORK_STACK=lwip make BOARD=native -C examples/nanocoap_server -j && ./examples/nanocoap_server/bin/native/nanocoap_server.elf -w tap1

Wait for the IPv6 address to show up

Client

USEMODULE=nanocoap_tcp make BOARD=native -C tests/net/nanocoap_cli all flash term -j

Then in the RIOT shell run e.g.

url get coap+tcp://[fe80::24de:d0ff:fe85:bdb2]/riot/ver

Issues/PRs references

Depends on and includes: #20900

@github-actions github-actions bot added Area: network Area: Networking Area: tests Area: tests and testing framework Area: build system Area: Build system Area: pkg Area: External package ports Area: CoAP Area: Constrained Application Protocol implementations Area: sys Area: System Area: examples Area: Example Applications labels Nov 26, 2024
@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch 2 times, most recently from ec3b453 to 765fdf1 Compare December 17, 2024 14:42
@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch from 765fdf1 to ec5a1f7 Compare January 7, 2025 19:51
@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch 2 times, most recently from eca9688 to 647a436 Compare January 13, 2025 17:51
@github-actions github-actions bot added Area: doc Area: Documentation Area: tools Area: Supplementary tools labels Jan 13, 2025
@benpicco benpicco added the CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR label Jan 14, 2025
@riot-ci
Copy link

riot-ci commented Jan 14, 2025

Murdock results

FAILED

d536e43 net/nanocoap: Send separate response from server socket

Artifacts

@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch 10 times, most recently from a8d54ba to e374672 Compare January 23, 2025 22:15
@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch from e374672 to 5dfd557 Compare February 4, 2025 16:40
maribu and others added 2 commits February 12, 2025 21:37
Using a constant is easier than explaining where the magic 1 came from
in size estimations.
Co-authored-by: mguetschow <mikolai.guetschow@tu-dresden.de>
@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch 5 times, most recently from e2d9153 to 51ce848 Compare February 12, 2025 23:01
This allows using and compiling the URL handling functions of sock_util
without a network stack used.
@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch 5 times, most recently from be2c919 to de1a3bf Compare February 15, 2025 22:54
@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch 2 times, most recently from 4b7137b to f2187b0 Compare February 26, 2025 14:24
@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch 2 times, most recently from dc2e02e to f7518ef Compare March 3, 2025 17:15
maribu added 5 commits March 3, 2025 18:40
This changes the Makefile to easily setup lwIP as network stack, while
keeping GNRC as the default.

If lwIP is used on one of the larger boards, the app will be build with
CoAP over TCP support enabled.
@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch from f7518ef to d86f93d Compare March 3, 2025 17:40
maribu added 7 commits March 4, 2025 14:09
And test this on native with CoAP over WebSocket+YOLO
And hook up CoAP over WebSocket+YOLO
This implements a trivial reverse proxy that can translate between
different transports for CoAP.

The proxy is relatively limited in that each proxy instance can only
forward one request at a time, reducing throughput and increasing
latency significantly. It also strips the forwarded reply of any CoAP
options (or sends an error if the response contained critical options).
This proxy allows using CoAP over YOLO with regular CoAP over WebSocket
clients by forwarding binary messages received via WebSocket to a given
UDP endpoint and the replies back to the WebSocket.
This makes sure the separate response is send using the network
interface the request was received on.
@maribu maribu force-pushed the sys/net/nanocoap/transport-tcp branch from d86f93d to d536e43 Compare March 4, 2025 13:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Area: build system Area: Build system Area: CoAP Area: Constrained Application Protocol implementations Area: doc Area: Documentation Area: examples Area: Example Applications Area: network Area: Networking Area: pkg Area: External package ports Area: sys Area: System Area: tests Area: tests and testing framework Area: tools Area: Supplementary tools CI: ready for build If set, CI server will compile all applications for all available boards for the labeled PR
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants