Skip to content

Commit

Permalink
Add VZVirtualMachineConfiguration:SocketDevices
Browse files Browse the repository at this point in the history
Since only a single VZVirtioSocketDevice is allowed per virtual machine
instance, it's useful to be able to check whether one is already set or
not in the VZVirtualMachineConfiguration object.
  • Loading branch information
cfergeau committed Oct 17, 2022
1 parent 464091b commit 3a33c57
Show file tree
Hide file tree
Showing 4 changed files with 39 additions and 5 deletions.
16 changes: 16 additions & 0 deletions configuration.go
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,22 @@ func (v *VirtualMachineConfiguration) SetSocketDevicesVirtualMachineConfiguratio
C.setSocketDevicesVZVirtualMachineConfiguration(v.Ptr(), array.Ptr())
}

// SocketDevices return the list of socket device configuration configured in this virtual machine configuration.
// Return an empty array if no socket device configuration is set.
func (v *VirtualMachineConfiguration) SocketDevices() []SocketDeviceConfiguration {
nsArray := &NSArray{
pointer: pointer{
ptr: C.VZVirtualMachineConfiguration_socketDevices(v.Ptr()),
},
}
ptrs := nsArray.ToPointerSlice()
socketDevices := make([]SocketDeviceConfiguration, len(ptrs))
for i, ptr := range ptrs {
socketDevices[i] = newVirtioSocketDeviceConfiguration(ptr)
}
return socketDevices
}

// SetStorageDevicesVirtualMachineConfiguration sets list of disk devices. Empty by default.
func (v *VirtualMachineConfiguration) SetStorageDevicesVirtualMachineConfiguration(cs []StorageDeviceConfiguration) {
ptrs := make([]NSObject, len(cs))
Expand Down
15 changes: 10 additions & 5 deletions socket.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,17 +50,22 @@ func NewVirtioSocketDeviceConfiguration() (*VirtioSocketDeviceConfiguration, err
return nil, ErrUnsupportedOSVersion
}

config := &VirtioSocketDeviceConfiguration{
pointer: pointer{
ptr: C.newVZVirtioSocketDeviceConfiguration(),
},
}
config := newVirtioSocketDeviceConfiguration(C.newVZVirtioSocketDeviceConfiguration())

runtime.SetFinalizer(config, func(self *VirtioSocketDeviceConfiguration) {
self.Release()
})
return config, nil
}

func newVirtioSocketDeviceConfiguration(ptr unsafe.Pointer) *VirtioSocketDeviceConfiguration {
return &VirtioSocketDeviceConfiguration{
pointer: pointer{
ptr: ptr,
},
}
}

// VirtioSocketDevice a device that manages port-based connections between the guest system and the host computer.
//
// Don’t create a VirtioSocketDevice struct directly. Instead, when you request a socket device in your configuration,
Expand Down
1 change: 1 addition & 0 deletions virtualization.h
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,7 @@ void setSerialPortsVZVirtualMachineConfiguration(void *config,
void *serialPorts);
void setSocketDevicesVZVirtualMachineConfiguration(void *config,
void *socketDevices);
void *VZVirtualMachineConfiguration_socketDevices(void *config);
void setStorageDevicesVZVirtualMachineConfiguration(void *config,
void *storageDevices);
void setDirectorySharingDevicesVZVirtualMachineConfiguration(void *config, void *directorySharingDevices);
Expand Down
12 changes: 12 additions & 0 deletions virtualization.m
Original file line number Diff line number Diff line change
Expand Up @@ -273,6 +273,18 @@ void setSocketDevicesVZVirtualMachineConfiguration(void *config,
RAISE_UNSUPPORTED_MACOS_EXCEPTION();
}

/*!
@abstract Return the list of socket devices configurations for this VZVirtualMachineConfiguration. Return an empty array if no socket device configuration is set.
*/
void *VZVirtualMachineConfiguration_socketDevices(void *config)
{
if (@available(macOS 11, *)) {
return [(VZVirtualMachineConfiguration *)config socketDevices]; // NSArray<VZSocketDeviceConfiguration *>
}

RAISE_UNSUPPORTED_MACOS_EXCEPTION();
}

/*!
@abstract List of disk devices. Empty by default.
@see VZVirtioBlockDeviceConfiguration
Expand Down

0 comments on commit 3a33c57

Please sign in to comment.