gh-92658: Add Hyper-V socket support by jborean93 · Pull Request #92755 · python/cpython
The FreeBSD comment about SOCKADDR_HV:
/* In the VM, we support Hyper-V Sockets with AF_HYPERV, and the endpoint is
* <port> (see struct sockaddr_hvs).
*
* On the host, Hyper-V Sockets are supported by Winsock AF_HYPERV:
* https://docs.microsoft.com/en-us/virtualization/hyper-v-on-windows/user-
* guide/make-integration-service, and the endpoint is <VmID, ServiceId> with
* the below sockaddr:
*
* struct SOCKADDR_HV
* {
* ADDRESS_FAMILY Family;
* USHORT Reserved;
* GUID VmId;
* GUID ServiceId;
* };
* Note: VmID is not used by FreeBSD VM and actually it isn't transmitted via
* VMBus, because here it's obvious the host and the VM can easily identify
* each other. Though the VmID is useful on the host, especially in the case
* of Windows container, FreeBSD VM doesn't need it at all.
*
* To be compatible with similar infrastructure in Linux VMs, we have
* to limit the available GUID space of SOCKADDR_HV so that we can create
* a mapping between FreeBSD AF_HYPERV port and SOCKADDR_HV Service GUID.
* The rule of writing Hyper-V Sockets apps on the host and in FreeBSD VM is:
*
****************************************************************************
* The only valid Service GUIDs, from the perspectives of both the host and *
* FreeBSD VM, that can be connected by the other end, must conform to this *
* format: <port>-facb-11e6-bd58-64006a7986d3. *
****************************************************************************
*
* When we write apps on the host to connect(), the GUID ServiceID is used.
* When we write apps in FreeBSD VM to connect(), we only need to specify the
* port and the driver will form the GUID and use that to request the host.
*
* From the perspective of FreeBSD VM, the remote ephemeral port (i.e. the
* auto-generated remote port for a connect request initiated by the host's
* connect()) is set to HVADDR_PORT_UNKNOWN, which is not realy used on the
* FreeBSD guest.
*/
Linux has a similar comment, but it seems it does not define AF_HYPERV. I guess this change should apply on Windows only?