From cd9446c7d606b998bb8137bd300a5bdb3250602c Mon Sep 17 00:00:00 2001 From: Brian McClain Date: Tue, 27 Jun 2023 15:19:10 -0400 Subject: [PATCH] vcsim: apply PCI UnitNumber offset of 7 for ethernet --- object/virtual_device_list.go | 15 +++++++++++++-- object/virtual_device_list_test.go | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/object/virtual_device_list.go b/object/virtual_device_list.go index 376550653..92797dcda 100644 --- a/object/virtual_device_list.go +++ b/object/virtual_device_list.go @@ -404,9 +404,13 @@ func (l VirtualDeviceList) PickController(kind types.BaseVirtualController) type } // newUnitNumber returns the unit number to use for attaching a new device to the given controller. -func (l VirtualDeviceList) newUnitNumber(c types.BaseVirtualController) int32 { +func (l VirtualDeviceList) newUnitNumber(c types.BaseVirtualController, offset int) int32 { units := make([]bool, 30) + for i := 0; i < offset; i++ { + units[i] = true + } + switch sc := c.(type) { case types.BaseVirtualSCSIController: // The SCSI controller sits on its own bus @@ -455,7 +459,14 @@ func (l VirtualDeviceList) AssignController(device types.BaseVirtualDevice, c ty d := device.GetVirtualDevice() d.ControllerKey = c.GetVirtualController().Key d.UnitNumber = new(int32) - *d.UnitNumber = l.newUnitNumber(c) + + offset := 0 + switch device.(type) { + case types.BaseVirtualEthernetCard: + offset = 7 + } + *d.UnitNumber = l.newUnitNumber(c, offset) + if d.Key == 0 { d.Key = l.newRandomKey() } diff --git a/object/virtual_device_list_test.go b/object/virtual_device_list_test.go index fef4db9e8..466fb02d9 100644 --- a/object/virtual_device_list_test.go +++ b/object/virtual_device_list_test.go @@ -698,7 +698,7 @@ func TestPickController(t *testing.T) { t.Errorf("expected controller key: %d, got: %d\n", test.key, key) } - unit := list.newUnitNumber(c) + unit := list.newUnitNumber(c, 0) if unit != test.unit { t.Errorf("expected unit number: %d, got: %d\n", test.unit, unit) }