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

Add udp multicast support #37

Merged
merged 3 commits into from
Apr 30, 2024
Merged

Conversation

YXalix
Copy link

@YXalix YXalix commented Apr 24, 2024

fastdds所需的udp多播支持

  • 添加udp bind()的端口冲突检查
  • 添加IP_MULTICAST_TTL支持
  • 添加IP_ADD_MEMBERSHIP支持

未实现功能

  • SO_REUSEADDR支持 (需要对smoltcp进行修改, 能否讨论下具体方案)

@Azure-stars
Copy link

fastdds所需的udp多播支持

  • 添加udp bind()的端口冲突检查
  • 添加IP_MULTICAST_TTL支持
  • 添加IP_ADD_MEMBERSHIP支持

未实现功能

  • SO_REUSEADDR支持 (需要对smoltcp进行修改, 能否讨论下具体方案)

Starry 原先使用 1 年前的 smoltcp 依赖 是为了使用loopback来作为轮询方式通过 libc test 的 socket 测例,而在当时的 ArceOS 中使用的 以太网 模型无法通过。如果想要用上最新的 smoltcp,一个方法可以是先尝试是否可以用最新的 smoltcp 库加以太网模型通过 libc test 的 socket 测例,之后再尝试支持 SO_REUSEADDR。

@Azure-stars
Copy link

fastdds所需的udp多播支持

  • 添加udp bind()的端口冲突检查
  • 添加IP_MULTICAST_TTL支持
  • 添加IP_ADD_MEMBERSHIP支持

未实现功能

  • SO_REUSEADDR支持 (需要对smoltcp进行修改, 能否讨论下具体方案)

Starry 原先使用 1 年前的 smoltcp 依赖 是为了使用loopback来作为轮询方式通过 libc test 的 socket 测例,而在当时的 ArceOS 中使用的 以太网 模型无法通过。如果想要用上最新的 smoltcp,一个方法可以是先尝试是否可以用最新的 smoltcp 库加以太网模型通过 libc test 的 socket 测例,之后再尝试支持 SO_REUSEADDR。

顺带一提 是如何确定是 smoltcp 库的错误导致出现了 SO_REUSEADDR 的错误呢?之前也有 smoltcp 库报错,但是实际上是内核本身的缓冲区设置过小导致出现了问题。

@YXalix
Copy link
Author

YXalix commented Apr 24, 2024

目前fastdds需要使用SO_REUSEADDR, 来让两个bind在广播地址上的udpsocket都能接收到消息, 但是现在smoltcp逻辑是找到第一个符合地址的socket就返回了, 这样就导致另一个socket recv不到数据

fastdds所需的udp多播支持

  • 添加udp bind()的端口冲突检查
  • 添加IP_MULTICAST_TTL支持
  • 添加IP_ADD_MEMBERSHIP支持

未实现功能

  • SO_REUSEADDR支持 (需要对smoltcp进行修改, 能否讨论下具体方案)

Starry 原先使用 1 年前的 smoltcp 依赖 是为了使用loopback来作为轮询方式通过 libc test 的 socket 测例,而在当时的 ArceOS 中使用的 以太网 模型无法通过。如果想要用上最新的 smoltcp,一个方法可以是先尝试是否可以用最新的 smoltcp 库加以太网模型通过 libc test 的 socket 测例,之后再尝试支持 SO_REUSEADDR。

顺带一提 是如何确定是 smoltcp 库的错误导致出现了 SO_REUSEADDR 的错误呢?之前也有 smoltcp 库报错,但是实际上是内核本身的缓冲区设置过小导致出现了问题。

@Azure-stars
Copy link

址上的udpsocket都能接收到消息, 但是现在smoltcp逻辑是找到第一个符合地址的socket就返回了

如果可能的话,建议是对接最新的 smoltcp 库,先兼容原有功能,如 libc test,然后再尝试进行修改。 @scPointer 有何建议呢

@scPointer
Copy link

如果可能的话,建议是对接最新的 smoltcp 库,先兼容原有功能,如 libc test,然后再尝试进行修改。 @scPointer 有何建议呢

可以检查 smoltcp 最新的版本是否能过目前 Arceos 和 Starry 里的所有网络测例,如果可以,就同步 /~https://github.com/rcore-os/smoltcp 到最新版本,然后在这个仓库(rcore-os/smoltcp)上加你想要的 patch。再修改 Cargo.toml 让 Starry 使用 /~https://github.com/rcore-os/smoltcp

这样做的原因是我们没法预期 /~https://github.com/smoltcp-rs/smoltcp/ 什么时候合 PR,延续现在的模式使用 rcore-os 做 patch,只更新 patch 的代码会稳妥一些 @YXalix

@YXalix
Copy link
Author

YXalix commented Apr 25, 2024

可以检查 smoltcp 最新的版本是否能过目前 Arceos 和 Starry 里的所有网络测例,如果可以,就同步 /~https://github.com/rcore-os/smoltcp 到最新版本,然后在这个仓库(rcore-os/smoltcp)上加你想要的 patch。再修改 Cargo.toml 让 Starry 使用 /~https://github.com/rcore-os/smoltcp

这样做的原因是我们没法预期 /~https://github.com/smoltcp-rs/smoltcp/ 什么时候合 PR,延续现在的模式使用 rcore-os 做 patch,只更新 patch 的代码会稳妥一些 @YXalix

赞同, 那我在smoltcp最新的版本来试着做做看🌟

Copy link

@scPointer scPointer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

把之前说的关于改 smoltcp 的 commit 加一下,其他的没什么问题

@@ -283,6 +316,15 @@ impl UdpSocket {
f()
} else {
loop {
#[cfg(feature = "signal")]

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个地方目前暂时使用不安全的符号链接跳转,之后考虑 Starry 的单向依赖性质的时候可以把信号部分移植到底层,从而避免直接调用 Unsafe 代码。

@Azure-stars Azure-stars merged commit 3c5b42e into Arceos-monolithic:main Apr 30, 2024
17 checks passed
pengzechen pushed a commit to pengzechen/hypervisor that referenced this pull request May 1, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants