Add lpf IPoIB support#134
Conversation
|
Very interesting. There's rfc4390 that documents the IB flavor of DHCP. Couple potential problems ahead:
None of the above are show-stoppers, just something to be cautious about. |
|
I think they have something like a MAC, it's just obscenely (20 bytes) long. With old ISC DHCPd, the entry for that node would look like this: I'm not quite sure who came up with the translation back to the 6 byte MAC in dhcpd (it's a Mellanox Patch-Set to make it support Infiniband), but all the values are directly derived from one another. I have access to a bunch of hardware to test with, and specially their PXE boot environment is rather particular about doing things correctly. I just read the RFC, and it states that the server does not know the clients hardware address. |
0a03d53 to
fb97d76
Compare
|
Thank you, neat. |
|
I haven't had a chance to give this a test yet, but in theory the code should be complete. The Kernel behaviour in regards to the response address doesn't really matter at all, since the RFC states that the clients must always request a broadcast response. |
85bcbf8 to
235aaa0
Compare
83b2783 to
549afba
Compare
|
I have now finally had the chance to test this, and after fixing two small kinks (confused IFLA_BROADCAST and IFA_BROADCAST and Pkt4 refusing the long CHADDR), it's working just fine. Here's a log of a node booting up via HTTP boot. First instance is the UEFI HTTP boot tool reqeusting an IP, and the second is dhclient in the initrd: Writing reservations for this is super annoying, since the two clients can't agree on neither hwaddr nor cid. |
5db69a2 to
fd98acb
Compare
cba7e01 to
1b17aa3
Compare
|
I've been using this on our network/cluster since a while now, and it's been running without issues. |
c7729ae to
608494e
Compare
f19bcc9 to
920fbbb
Compare
|
Thanks for authoring this. I've really been waiting for this too. I run an HPC center and we use Infiniband throughout all the nodes. Hope it see it in a full release soon! |
c85dbd1 to
34d8e1d
Compare
|
Would be really nice to have, since rhel10, switched to Kea. |
|
Hey, I just wanted to say, we see this contribution and we know it has been outstanding for a while. Right now the team is short-handed but someone will take a look as soon as we can. |
|
This is also at https://gitlab.isc.org/isc-projects/kea/-/merge_requests/2385 and was adopted into https://gitlab.isc.org/isc-projects/kea/-/merge_requests/2445 from there, but seems to have stalled again. |
|
I asked about the abandoned merge request, and the problem is, we can't merge it because we don't have any Infiniband hw to test it with. Is there any software-based emulator that is protocol compliant, that you know of?? |
|
I looked into that before, and unfortunately, there is no way to just attach a virtual IB NIC to a VM. |
+1 from me. We also run IB and can't upgrade to kea without support. Not sure what the future will be for us since rhel10 only has kea. Scary. |
|
I'm using this PRs branch since almost 2 years on our system now, and it works flawlessly. |
|
I may have to do the same. The issue I have is old ISC dhcp crashes on my Rocky 9 installs, so i have moved it to a sole remaining Rocky 8 install. I'd really like to modernize but many HPC clusters use Infiniband. Wish they'd keep ISC updated until Kea can have all features. |
|
Folks, apologies it took so long to get to this. There is a chance we'll merge it this summer. I've acquired IB hardware to test it and found a person who is able to dedicate time for it. I've added a note on gitlab. If anyone experienced with Infiniband could tell us if the hardware we got would be sufficient to have a minimal IB network, that would be much appreciated:
|
|
That should definitely be enough. You shouldn't even need the Switch, just plug the two machines together directly. The problem with the card you picked is primarily that it's really old, ConnectX-2. The driver in the kernel for that is pretty "crusty". |
|
Yeah, we don't exactly have a budget for something modern and the MHQH29B-XTR cards were cheap, available and had Infiniband written on the box 😉 We already have the hardware, so we'll experiment and see what works. |
This is probably enough just be careful with drivers. You'll probably want to run Debian or something similar cause mlx4 was removed in a lot of other distros (mainly rocky and rhel) I would avoid sriov in this setup, the open source subnet manager and early switch firmware doesn't support it so you would need to run some ancient versions of mlnx ofed. Honestly I wouldn't recommend using the switch sm either but it should be fine for a simple test. If it's any help I can test anything/help with any fabric issues as I've worked extensively with infiniband, and just for the record this PR works amazingly in my setup (8 nodes connect x5 + sb7890) where I'm even doing some fairly fancy stuff with Infiniband Partitions + Proxy ARP + pxe + dhcp 121. I'm sharing the same server with Ethernet devices (with and without vlan devices). The only oddity that I've run into (which makes sense) is that when doing host reservations you have to put 20: before the client-id reported by the system. This is visible in leases search in stork. Build instructions can extracted from the Dockerfile here If you need remote access to a modern dev cluster I can get you that if you need. I have a 3 node cluster with semi modern Connect X4s I can wipe. |
I'd like to replace good old dhcpd with something more modern, but we have an InfiniBand network, and thus need IPoIB support for DHCP4.
This is my current work in progress for adding support to the linux lpf side of things.
It's not quite complete, since I'd like to gather some feedback on the interest and way of implementation first, so here is what I got so far.
I couldn't find any documentation on the IPoIB raw header format, but by looking at it, it seems to be just the 20 byte long hwaddr followed by the same 2 byte ethernet protocol type, and two bytes which are always zero.
Based on that, I ended up with this patch.
There is still one issue, which is that in case of a broadcast, InfiniBand does not neccesarily have a generic broadcast address. Instead it has to be queried from the interface, which will need to be added to the generic interface code still.