Supported API for native Thunderbolt host-to-host communication?

I'm looking into direct communication between a Mac and a Linux machine connected over Thunderbolt.

Thunderbolt networking works fine, but I'd like to explore whether it's possible to transfer data using native Thunderbolt DMA, without going through the TCP/IP stack. I've looked through the IOKit and DriverKit documentation, but most of what I've found relates to drivers for PCIe devices connected over Thunderbolt rather than communication between two hosts.

A couple of questions:

  1. Is there a supported API for discovering Thunderbolt XDomain services and establishing native DMA-backed send/receive paths between hosts?

  2. Can this be done from userspace or DriverKit, or would it require a kernel extension?

Ideally, I'd also like to keep the existing Thunderbolt networking interface working alongside it. Any pointers to relevant APIs or documentation would be appreciated.

Thanks!

Answered by DTS Engineer in 911925022

There are two well-trodden paths for custom communication over Thunderbolt:

It sounds like you want to dig into the second one (-:

Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

There are two well-trodden paths for custom communication over Thunderbolt:

It sounds like you want to dig into the second one (-:

Share and Enjoy
—
Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

Thanks Quinn!

I've looked into TN3205, but from what I understand, RDMA over Thunderbolt requires Thunderbolt 5 hardware.

I'm currently using a base Mac mini M4 (Thunderbolt 4) connected to a Linux machine. Thunderbolt IP works fine, but I'm interested in exploring native DMA-backed communication without going through TCP/IP.

Is there a supported way to access Thunderbolt XDomain services or establish native send/receive paths on this hardware, perhaps through IOKit or DriverKit? Or is Thunderbolt IP the only supported option here?