Linux Networking breaks on Proxmox VM with VirtIO #1162
|
In my experiment, I compiled the source code to form a native environment It's a one in one out setup based on an Ubuntu 24.04 Noble VM However, I have tested the zero entrypoint approach And here is the database UERANSIM is able to establish the PDU session Here are some log screenshots at the very moment of deadlock Here is the pcap captured from veth-core Any idea on the phenomenon, folks ? |
Replies: 4 comments 34 replies
|
Hello @Robin-Rhee, thanks for opening this discussion. It looks like you are locking yourself out of the VM, but I'm not quite sure why. @ghislainbourgeois do you see what I'm missing? |
|
Summary:
|
|
@gruyaume @ghislainbourgeois I came back to make a Proxmox test VM with Ella co-hosting with OCUDU PDU session could be successfully established Pinged the Internet successfully via No problem with DNS resolution But it failed to access Internet through a browser Then I gave up the veth approach, and embraced the physical NIC method Still allocate them to different namespaces respectively Finally the Internet can be accessed in the browser I have read through those guides on eBPF and XDP in the Ella portal Could you be so kinds as to elaborate or supplement the knowledge base about the following topics ?
And maybe in an appropriate time being, you would fix the problem 😄😄 |
|
Hi @Robin-Rhee, I reproduced your exact issue on a QEMU/KVM VM with an e1000 NIC (small packets fine, anything past ~200 bytes fails). I think we found the root cause (thanks to AI). The fixDisable TX-checksum offload on both ends of your N3 veth pair: What's going onWhen a program sends traffic over a veth, Linux normally skips computing the packet's checksum and leaves a note saying "the network card will finish this checksum at byte X later." So your gNB's GTP packets reach Ella Core with an incomplete checksum plus that note. Ella Core's user plane strips the outer GTP header (in XDP) but Linux's generic-XDP path doesn't update that "finish at byte X" note when it shifts the packet forward. The note now points at the wrong place. When the packet finally leaves the NIC, the card writes a checksum at that wrong spot and mangles the packet, so it gets dropped downstream. Why small packets survive but large ones don't on e1000: the stale "byte X" lands past the end of short packets (card leaves them alone) but inside longer ones (card corrupts them), that's your ~200-byte cliff. On a virtio NIC the same problem breaks every size. Whose issue is this?It's a gap in Linux's generic (SKB-mode) XDP: the kernel shifts the packet but never updates the checksum note — not Ella's own logic, and it's triggered by a checksum-offload setting on your gNB's veth, which Ella doesn't control. It seems to be a known sharp edge in the XDP world: Cilium's and the XDP maintainers' own test scripts disable checksum offload on veths because XDP-forwarded packets otherwise end up with invalid checksums. Two things make it disappear:
Since your NIC can't do native XDP, the |














Hi @Robin-Rhee, I reproduced your exact issue on a QEMU/KVM VM with an e1000 NIC (small packets fine, anything past ~200 bytes fails). I think we found the root cause (thanks to AI).
The fix
Disable TX-checksum offload on both ends of your N3 veth pair:
What's going on
When a program sends traffic over a veth, Linux normally skips computing the packet's checksum and leaves a note saying "the network card will finish this checksum at byte X later." So your gNB's GTP packets reach Ella Core with an incomplete checksum plus that note.
Ella Core's user plane strips the outer GTP header (in XDP) but Linux's g…