arch/sim: Add AF_LOCAL support to host usrsock

The sim host usrsock backend only accepted INET/NETLINK domains and
translated socket addresses through plain struct sockaddr. That prevents
simulated applications from using POSIX AF_LOCAL sockets through the
standard socket API when CONFIG_NET_USRSOCK is used.

Add AF_LOCAL address conversion for struct sockaddr_un, allow PF_LOCAL
sockets through usrsock, handle NuttX socket type flags, and poll host
descriptors from the sim usrsock work item so nonblocking
connect/read/write readiness is reported back to NuttX. Use
sockaddr_storage for native address translation so larger address
structures are not truncated.

Testing:

  - Host: Ubuntu 22.04 x86_64.

  - Board/config: sim:nsh with CONFIG_NET_USRSOCK=y and
    CONFIG_EXAMPLES_HELLO=y.

  - make clean && make -j16.

  - Ran a temporary hello example that connected to host AF_UNIX
    SOCK_STREAM and SOCK_SEQPACKET sockets through NuttX socket(),
    connect(), write(), and read(). Both received pong and printed
    "AF_LOCAL usrsock test passed".

Assisted-by: Claude:Claude-Fable-5
Signed-off-by: Lingao Meng <menglingao@xiaomi.com>
4 files changed
tree: 509714b9c1369b29a1a42943746bb2500b67e2e4
  1. .github/
  2. arch/
  3. audio/
  4. binfmt/
  5. boards/
  6. cmake/
  7. crypto/
  8. Documentation/
  9. drivers/
  10. dummy/
  11. fs/
  12. graphics/
  13. include/
  14. libs/
  15. mm/
  16. net/
  17. openamp/
  18. pass1/
  19. sched/
  20. syscall/
  21. tools/
  22. video/
  23. wireless/
  24. .asf.yaml
  25. .codespell-ignore-lines
  26. .codespellrc
  27. .editorconfig
  28. .gitignore
  29. .gitmessage
  30. .pre-commit-config.yaml
  31. .yamllint
  32. AUTHORS
  33. CMakeLists.txt
  34. CONTRIBUTING.md
  35. INVIOLABLES.md
  36. Kconfig
  37. LICENSE
  38. Makefile
  39. NOTICE
  40. README.md
  41. ReleaseNotes
README.md

POSIX Badge License Issues Tracking Badge Contributors GitHub Build Badge Documentation Badge MemBrowse

Apache NuttX is a real-time operating system (RTOS) with an emphasis on standards compliance and small footprint. Scalable from 8-bit to 64-bit microcontroller environments, the primary governing standards in NuttX are POSIX and ANSI standards. Additional standard APIs from Unix and other common RTOSs (such as VxWorks) are adopted for functionality not available under these standards, or for functionality that is not appropriate for deeply-embedded environments (such as fork()).

For brevity, many parts of the documentation will refer to Apache NuttX as simply NuttX.

Getting Started

First time on NuttX? Read the Getting Started guide! If you don't have a board available, NuttX has its own simulator that you can run on terminal.

Documentation

You can find the current NuttX documentation on the Documentation Page.

Alternatively, you can build the documentation yourself by following the Documentation Build Instructions.

The old NuttX documentation is still available in the Apache wiki.

Supported Boards

NuttX supports a wide variety of platforms. See the full list on the Supported Platforms page.

Contributing

If you wish to contribute to the NuttX project, read the Contributing guidelines for information on Git usage, coding standard, workflow and the NuttX principles.

License

The code in this repository is under either the Apache 2 license, or a license compatible with the Apache 2 license. See the License Page for more information.