nanovms / ops

ops - build and run nanos unikernels
https://ops.city
MIT License
1.3k stars 132 forks source link

Udp reading and multicasting error #1339

Open aratz-lasa opened 2 years ago

aratz-lasa commented 2 years ago

Hello,

I'm working on an Golang application that makes use of QUIC UDP, and I'm getting the following error when I try to run it on nanovms/ops: read udp 0.0.0.0:60866: recvmmsg: function not implemented

Does someone know what may be happening?

francescolavra commented 2 years ago

Hi, the recvmmsg syscall is currently not implemented in the Nanos kernel, thus your application gets an error when it tries to call recvmmsg().

aratz-lasa commented 2 years ago

Thank you very much for the fast answer.

On the other hand, is there any way to enable multicasting on the network interfaces of Nanos kernel?

francescolavra commented 2 years ago

Not yet, as of now you can transmit multicast packets but reception of multicast traffic is not supported.

francescolavra commented 2 years ago

The recvmmsg syscall is now implemented in the Nanos kernel, so when the next nightly build is published in a few hours you should be able to use it in your QUIC UDP application, by creating your Ops image with the nightly kernel build (just add the -n command line flag to your Ops command to create the image). As for the multicasting feature, we could add support for multicast traffic reception, but it wouldn't work in most public clouds because cloud providers usually don't offer multicast capabilities (i.e. an instance running on a public cloud such as GCP or AWS cannot subscribe to multicast groups). So I'm not sure it's worth adding this feature to the Nanos kernel; @aratz-lasa perhaps if could elaborate more on your use case it would help us decide whether it makes sense to add this feature to Nanos.

aratz-lasa commented 2 years ago

@francescolavra amazing! Thank you for the update, this will allow me to deploy my application through nanovms.

Don't worry, there is no need for multicasting. I ended up developing an alternative mechanism of port discovery, so that when multicasting is disabled, we fallback to it.