Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 43 additions & 1 deletion docs/arceos-modules/network/api.md
Original file line number Diff line number Diff line change
@@ -1 +1,43 @@
# ArceOS 网络层接口
# ArceOS 网络层接口

## sys_socket
创建一个新的套接字。首先,检查传入的域(domain)和套接字类型(s_type)。如果它们有效,则创建一个套接字并设置相应的标志(如非阻塞和关闭时执行)。然后,将套接字分配给当前进程的文件描述符表。

## sys_bind
将套接字绑定到指定的地址(addr)。如果套接字已经绑定成功,则返回绑定操作的结果。这里会使用 socket_address_from 将地址从内存中获取并绑定。

## sys_listen
使服务器套接字开始监听传入的连接请求。此操作主要针对服务端,允许该套接字接受连接。

## sys_accept4
接受一个连接请求,返回新的套接字描述符用于与客户端进行通信。如果套接字被连接,调用 socket.accept 完成连接接收并返回新的文件描述符。处理 flags 标志(例如非阻塞)。

## sys_connect
客户端套接字连接到指定地址。如果套接字未连接,调用 socket.connect 来连接到目标地址。

## sys_get_sock_name
获取套接字的本地地址。如果套接字有效且绑定成功,则返回地址信息。

## sys_getpeername
获取已连接套接字的远程地址。如果套接字处于连接状态,则返回与该套接字相连接的远程主机的地址。

## sys_sendto
向指定的目标地址发送数据。如果套接字未绑定,sendto 会自动绑定套接字。此操作向指定地址发送数据,并处理各种错误情况(如被中断、需要重试等)。

## sys_recvfrom
从套接字接收数据。如果接收成功,返回接收到的数据和发送方的地址。此操作也会处理常见的错误(如套接字未连接、连接重置等)。

## sys_sendmsg
发送一个消息,其中包括数据和地址。消息通过 sendto 发送,处理消息头的 iovec。

## sys_set_sock_opt
设置套接字的选项,如 IP 层、套接字层、TCP 层等。通过 setsockopt 设置套接字的一些配置选项。

## sys_get_sock_opt
获取套接字的配置选项(如 SO_RCVBUF、SO_RCVBUF)。通过 getsockopt 获取套接字配置。

## sys_shutdown
关闭套接字的读取、写入或双向功能(SHUT_RD、SHUT_WR、SHUT_RDWR)。根据 how 参数的不同,执行相应的关闭操作。

## sys_socketpair
创建一对 UNIX 域套接字(AF_UNIX)。通过 make_socketpair 创建一对可以在进程间进行通信的套接字,并返回它们的文件描述符。
25 changes: 24 additions & 1 deletion docs/arceos-modules/network/support.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,27 @@

## smoltcp 支持

## lwip 支持
| 功能 | 支持情况 | 备注 |
|-----------------|----------|------|
| TCP/UDP 协议 | ✅ 支持 | 完整 socket 生命周期管理 |
| DNS 查询 | ✅ 支持 | 使用 smoltcp 实验性 socket |
| IPv4 协议 | ✅ 支持 | 默认配置,广泛使用 |
| IPv6 协议 | ⚠️ 部分支持 | 有部分配置,但无 socket 使用示例 |
| Loopback 支持 | ✅ 支持 | 支持 127.0.0.1、组播加入等 |
| 多接口/多设备支持 | ⚠️ 限制中 | 仅有 `ETH0`,但代码结构允许扩展 |
| 自定义驱动支持 | ✅ 支持 | 通过 `AxNetDevice` 适配 smoltcp |
| 多线程安全 | ✅ 支持 | 使用 `Mutex + RefCell` 组合 |

## lwip 支持

| 功能项 | 支持 | 来源 / 说明 |
|----------------|------|--------------|
| TCP socket | ✅ | 模块 `tcp` 中暴露 `TcpSocket`,推测基于 smoltcp TCP socket 封装 |
| UDP socket | ✅ | 同上 |
| DNS 查询 | ✅ | `resolve_socket_addr` 推测封装 DNS socket |
| 网络驱动 | ✅ | `driver::init()` 非常可能初始化 smoltcp interface 和 device |
| 地址封装 | ✅ | `IpAddr`, `SocketAddr` 表示做了跨平台处理 |
| 多线程安全 | ✅ | 使用 `Mutex<()>` 实现 lwIP 风格网络临界区保护 |
| C语言绑定 | ✅ | 有 `cbindings` 模块表明目标可能包括跨语言支持或内核接口 |
| 网络栈抽象层 | ✅ | 这部分代码可能是对 smoltcp 进行高层封装并提供一致接口 |