TRITON PCI Pass Through Configuration

Modified: 08 Sep 2022 04:28 UTC

Here is a list of the detailed steps and example required in order to pass a network device from a Compute Node to a Bhyve VM. This may be required in order to set up GPU or Network Devices needed for specific Bhyve hardware virtual machines.

This is the sysinfo for our CN:

{
  "Live Image": "20200520T174734Z",
  "System Type": "SunOS",
  "Boot Time": "1592237300",
  "Datacenter Name": "commercial-QA",
  "SDC Version": "7.0",
  "Manufacturer": "",
  "Product": "",
  "Serial Number": "5F0P842",
  "SKU Number": "SKU=NotProvided;ModelName=",
  "HW Version": "",
  "HW Family": "",
  "Setup": "true",
  "VM Capable": true,
  "Bhyve Capable": true,
  "Bhyve Max Vcpus": 32,
  "HVM API": true,
  "CPU Type": "Intel(R) Xeon(R) CPU E5-2690 v3 @ 2.60GHz",
  "CPU Virtualization": "vmx",
  "CPU Physical Cores": 2,
  "Admin NIC Tag": "admin",
  "Admin IP": "172.20.5.43",
  "UUID": "44454c4c-4600-1030-8050-b5c04f383432",
  "Hostname": "5F0P842",
  "CPU Total Cores": 48,
  "CPU Socket Count": 2,
  "CPU Core Count": 24,
  "CPU Online Count": 48,
  "CPU Count": 48,
  "MiB of Memory": "262050",
  "Zpool": "zones",
  "Zpool Encrypted": false,
  "Zpool Disks": "c0t5000C5007EFC7D53d0,c0t5000C5007EFE417Bd0,c0t5000C5007F01443Fd0,c0t5000C5007F01B31Bd0,c0t5000C5007F01FBA7d0,c0t5000C5007F0220EBd0,c0t5000C5007F022513d0,c0t5000C5007F023307d0,c0t5000C5007F025F4Bd0,c0t5000C5007F028953d0,c0t5000C5007F02B0DBd0,c0t5000C5007F02DFE3d0,c0t5000C5007F031A77d0,c0t5000C5007F033BDBd0,c0t5000C5007F033DBBd0,c2t5000CCA0490C8B39d0",
  "Zpool Profile": "mirror",
  "Zpool Creation": 1591147003,
  "Zpool Size in GiB": 7540,
  "Zpool Recovery": {
  },
  "Disks": {
    "c0t5000C5007EFC7D53d0": {"Size in GB": 1200},
    "c0t5000C5007EFE417Bd0": {"Size in GB": 1200},
    "c0t5000C5007F01443Fd0": {"Size in GB": 1200},
    "c0t5000C5007F01B31Bd0": {"Size in GB": 1200},
    "c0t5000C5007F01FBA7d0": {"Size in GB": 1200},
    "c0t5000C5007F0220EBd0": {"Size in GB": 1200},
    "c0t5000C5007F022513d0": {"Size in GB": 1200},
    "c0t5000C5007F023307d0": {"Size in GB": 1200},
    "c0t5000C5007F025F4Bd0": {"Size in GB": 1200},
    "c0t5000C5007F028953d0": {"Size in GB": 1200},
    "c0t5000C5007F02B0DBd0": {"Size in GB": 1200},
    "c0t5000C5007F02DFE3d0": {"Size in GB": 1200},
    "c0t5000C5007F031A77d0": {"Size in GB": 1200},
    "c0t5000C5007F033BDBd0": {"Size in GB": 1200},
    "c0t5000C5007F033DBBd0": {"Size in GB": 1200},
    "c2t5000CCA0490C8B39d0": {"Size in GB": 100}
  },
  "Boot Parameters": {
    "smt_enabled": "true",
    "module_name_0": "networking.json",
    "hostname": "5F0P842",
    "rabbitmq": "guest:guest:172.20.5.23:5672",
    "rabbitmq_dns": "guest:guest:rabbitmq.commercial-QA.joyent.com:5672",
    "admin_nic": "ec:f4:bb:d2:95:b0",
    "external_nic": "a0:36:9f:5f:aa:d6",
    "console": "text",
    "text_mode": "115200,8,n,1,-",
    "boot_args": "",
    "bootargs": "",
    "plat_max_ncpus": "192",
    "boot_max_ncpus": "48"
  },
  "Psrinfo": {
    "smt_enabled": "true"
  },
  "SDC Agents": [
    {
      "name": "smartlogin",
      "version": "0.2.2-release-20200521-20200520T163746Z-g7a01474"
    },
    {
      "name": "cn-agent",
      "version": "2.14.1"
    },
    {
      "name": "config-agent",
      "version": "1.8.4"
    },
    {
      "name": "amon-agent",
      "version": "1.0.1"
    },
    {
      "name": "hagfish-watcher",
      "version": "1.0.1-release-20200521-20200520T163346Z-gabb3c72"
    },
    {
      "name": "vm-agent",
      "version": "1.8.3"
    },
    {
      "name": "amon-relay",
      "version": "1.0.1"
    },
    {
      "name": "net-agent",
      "version": "2.3.3"
    },
    {
      "name": "firewaller",
      "version": "1.6.0"
    },
    {
      "name": "agents_core",
      "version": "2.2.2"
    },
    {
      "name": "cmon-agent",
      "version": "1.17.0"
    }
  ],
  "Network Interfaces": {
    "igb0": {"MAC Address": "ec:f4:bb:d2:95:b4", "ip4addr": "", "Link Status": "down", "NIC Names": []},
    "igb1": {"MAC Address": "ec:f4:bb:d2:95:b5", "ip4addr": "", "Link Status": "down", "NIC Names": []},
    "ixgbe2": {"MAC Address": "ec:f4:bb:d2:95:b0", "ip4addr": "172.20.5.43", "Link Status": "up", "NIC Names": ["admin"]},
    "ixgbe0": {"MAC Address": "a0:36:9f:5f:aa:d4", "ip4addr": "", "Link Status": "down", "NIC Names": []},
    "ixgbe3": {"MAC Address": "ec:f4:bb:d2:95:b2", "ip4addr": "", "Link Status": "up", "NIC Names": ["external"]},
    "ixgbe1": {"MAC Address": "a0:36:9f:5f:aa:d6", "ip4addr": "", "Link Status": "down", "NIC Names": []}
  },
  "Virtual Network Interfaces": {
  },
  "Link Aggregations": {
  }
}

Network interfaces ixgbe0 and ixgbe1 aren't used by the CN itself. Let's pick the first one and use it for the Bhyve VM.

1. Use prtconf -Dd to find which device to pass

prtconf -Dd

The command produces the following output:

 System Configuration:     i86pc
 Memory size: 262050 Megabytes
System Peripherals (Software Nodes):
    i86pc (driver name: rootnex)
     scsi_vhci, instance #0 (driver name: scsi_vhci)
     disk, instance #2 (driver name: sd)
     disk, instance #3 (driver name: sd)
     disk, instance #4 (driver name: sd)
     disk, instance #5 (driver name: sd)
     disk, instance #6 (driver name: sd)
     disk, instance #7 (driver name: sd)
     disk, instance #8 (driver name: sd)
     disk, instance #9 (driver name: sd)
     disk, instance #10 (driver name: sd)
     disk, instance #11 (driver name: sd)
     disk, instance #12 (driver name: sd)
     disk, instance #13 (driver name: sd)
     disk, instance #14 (driver name: sd)
     disk, instance #15 (driver name: sd)
     disk, instance #16 (driver name: sd)
    ramdisk, instance #0 (driver name: ramdisk)
    pci, instance #0 (driver name: npe)
    pci8086,0 (pciex8086,2f00) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DMI2]
    pci8086,2f02 (pciex8086,2f02) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 1] (driver name: pcieb)
    pci8086,2f04 (pciex8086,2f04) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 2] (driver name: pcieb)
    pci8086,2f06 (pciex8086,2f06) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 2] (driver name: pcieb)
    pci8086,2f08 (pciex8086,2f08) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3], instance #0 (driver name: pcieb)
    pci1028,1f72 (pciex8086,10fb) [Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection], instance #2 (driver name: ixgbe)
    pci1028,1f72 (pciex8086,10fb) [Intel Corporation 82599ES 10-Gigabit SFI/SFP+ Network Connection], instance #3 (driver name: ixgbe) 
   pci8086,2f0a (pciex8086,2f0a) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3] (driver name: pcieb)
    pci8086,2f28 (pciex8086,2f28) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Address Map, VTd_Misc, System Management], instance #0 (driver name: imcstub)
    pci8086,2f29 (pciex8086,2f29) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Hot Plug]
    pci8086,2f2a (pciex8086,2f2a) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 RAS, Control Status and Global Errors]
    pci8086,0 (pciex8086,2f2c) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 I/O APIC]
    pci1028,600 (pciex8086,8d7c) [Intel Corporation C610/X99 series chipset SPSR]
    pci1028,600 (pciex8086,8d3a) [Intel Corporation C610/X99 series chipset MEI Controller #1]
    pci1028,600 (pciex8086,8d3b) [Intel Corporation C610/X99 series chipset MEI Controller #2]
    pci1028,600 (pciex8086,8d2d) [Intel Corporation C610/X99 series chipset USB Enhanced Host Controller #2], instance #0 (driver name: ehci)
        hub, instance #1 (driver name: hubd)
            storage, instance #0 (driver name: scsa2usb)
                disk, instance #0 (driver name: sd)
            hub, instance #2 (driver name: hubd)
    pci8086,8d10 (pciex8086,8d10) [Intel Corporation C610/X99 series chipset PCI Express Root Port #1] (driver name: pcieb)
    pci8086,8d18 (pciex8086,8d18) [Intel Corporation C610/X99 series chipset PCI Express Root Port #5], instance #1 (driver name: pcieb)
        pci1028,1f73 (pciex8086,1521) [Intel Corporation I350 Gigabit Network Connection], instance #0 (driver name: igb)
        pci1028,1f73 (pciex8086,1521) [Intel Corporation I350 Gigabit Network Connection], instance #1 (driver name: igb)
    pci8086,8d1e (pciex8086,8d1e) [Intel Corporation C610/X99 series chipset PCI Express Root Port #8], instance #2 (driver name: pcieb)
        pci1912,1d (pciex1912,1d) [Renesas Technology Corp. SH7758 PCIe Switch [PS]], instance #3 (driver name: pcieb)
            pci1912,1d (pciex1912,1d) [Renesas Technology Corp. SH7758 PCIe Switch [PS]], instance #4 (driver name: pcieb)
                pci1912,1a (pciex1912,1a) [Renesas Technology Corp. SH7758 PCIe-PCI Bridge [PPB]], instance #5 (driver name: pcieb)
                    display (pci102b,534) [Matrox Electronics Systems Ltd. G200eR2], instance #0 (driver name: vgatext)
    pci1028,600 (pciex8086,8d26) [Intel Corporation C610/X99 series chipset USB Enhanced Host Controller #1], instance #1 (driver name: ehci)
        hub, instance #0 (driver name: hubd)
    isa (pciex8086,8d44) [Intel Corporation C610/X99 series chipset LPC Controller], instance #0 (driver name: isa)
        asy, instance #0 (driver name: asy)
        asy, instance #1 (driver name: asy)
        motherboard
        pit_beep, instance #0 (driver name: pit_beep)
ioapics
    ioapic, instance #0
    ioapic, instance #1
pci, instance #0 (driver name: pci)
    pci8086,2f80 (pci8086,2f80) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0]
    pci8086,2f32 (pci8086,2f32) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0]
    pci8086,2f83 (pci8086,2f83) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0]
    pci8086,2f90 (pci8086,2f90) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1]
    pci8086,2f33 (pci8086,2f33) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1]
    pci8086,2f93 (pci8086,2f93) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1]
    pci8086,2f81 (pci8086,2f81) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring]
    pci8086,2f36 (pci8086,2f36) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring]
    pci8086,2f37 (pci8086,2f37) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring]
    pci8086,2fe0 (pci8086,2fe0) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe1 (pci8086,2fe1) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe2 (pci8086,2fe2) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe3 (pci8086,2fe3) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe4 (pci8086,2fe4) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe5 (pci8086,2fe5) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe6 (pci8086,2fe6) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe7 (pci8086,2fe7) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe8 (pci8086,2fe8) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe9 (pci8086,2fe9) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fea (pci8086,2fea) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2feb (pci8086,2feb) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2ff8 (pci8086,2ff8) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent]
    pci8086,2ff9 (pci8086,2ff9) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent]
    pci8086,2ffa (pci8086,2ffa) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent]
    pci8086,2ffb (pci8086,2ffb) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent]
    pci8086,2fe0 (pci8086,2ffc) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers], instance #16 (driver name: imcstub)
    pci8086,2fe0 (pci8086,2ffd) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers], instance #17 (driver name: imcstub)
    pci8086,2fe0 (pci8086,2ffe) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers]
    pci8086,2f1d (pci8086,2f1d) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCIe Ring Interface]
    pci8086,2f34 (pci8086,2f34) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCIe Ring Interface]
    pci8086,2f1e (pci8086,2f1e) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers], instance #18 (driver name: imcstub)
    pci8086,2f7d (pci8086,2f7d) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers]
    pci8086,2f1f (pci8086,2f1f) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers], instance #19 (driver name: imcstub)
    pci8086,2fa0 (pci8086,2fa0) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0], instance #20 (driver name: imcstub)
    pci8086,2f30 (pci8086,2f30) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0]
    pci8086,2f70 (pci8086,2f70) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0 Debug]
    pci8086,2f60 (pci8086,2f60) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1], instance #21 (driver name: imcstub)
    pci8086,2f38 (pci8086,2f38) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1]
    pci8086,2f78 (pci8086,2f78) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1 Debug]
    pci8086,2fa8 (pci8086,2fa8) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers], instance #22 (driver name: imcstub)
    pci8086,2f71 (pci8086,2f71) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers], instance #23 (driver name: imcstub)
    pci8086,2faa (pci8086,2faa) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder], instance #24 (driver name: imcstub)
    pci8086,2fab (pci8086,2fab) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder], instance #25 (driver name: imcstub)
    pci8086,2fae (pci8086,2fae) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Channel 0/1 Broadcast]
    pci8086,2faf (pci8086,2faf) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Global Broadcast]
    pci8086,2fb0 (pci8086,2fb0) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 Thermal Control]
    pci8086,2fb1 (pci8086,2fb1) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 Thermal Control]
    pci8086,2fb2 (pci8086,2fb2) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 ERROR Registers]
    pci8086,2fb3 (pci8086,2fb3) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 ERROR Registers]
    pci8086,2fbc (pci8086,2fbc) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1]
    pci8086,2fbd (pci8086,2fbd) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1]
    pci8086,2fbe (pci8086,2fbe) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1]
    pci8086,2fbf (pci8086,2fbf) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1]
    pci8086,2f68 (pci8086,2f68) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers], instance #26 (driver name: imcstub)
    pci8086,2f79 (pci8086,2f79) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers], instance #27 (driver name: imcstub)
    pci8086,2f6a (pci8086,2f6a) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder], instance #28 (driver name: imcstub)
    pci8086,2f6b (pci8086,2f6b) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder], instance #29 (driver name: imcstub)
    pci8086,2f6e (pci8086,2f6e) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Channel 2/3 Broadcast]
    pci8086,2f6f (pci8086,2f6f) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Global Broadcast]
    pci8086,2fd0 (pci8086,2fd0) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 Thermal Control]
    pci8086,2fd1 (pci8086,2fd1) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 Thermal Control]
    pci8086,2fd2 (pci8086,2fd2) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 ERROR Registers]
    pci8086,2fd3 (pci8086,2fd3) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 ERROR Registers]
    pci8086,2fb8 (pci8086,2fb8) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3]
    pci8086,2fb9 (pci8086,2fb9) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3]
    pci8086,2fba (pci8086,2fba) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3]
    pci8086,2fbb (pci8086,2fbb) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3]
    pci8086,2f98 (pci8086,2f98) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit]
    pci8086,2f99 (pci8086,2f99) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit]
    pci8086,2f9a (pci8086,2f9a) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit]
    pci8086,2fc0 (pci8086,2fc0) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit]
    pci8086,2f9c (pci8086,2f9c) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit]
    pci8086,2f88 (pci8086,2f88) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 VCU]
    pci8086,2f8a (pci8086,2f8a) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 VCU]
pci, instance #1 (driver name: npe)
    pci8086,2f02 (pciex8086,2f02) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 1] (driver name: pcieb)
    pci8086,2f04 (pciex8086,2f04) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 2], instance #6 (driver name: pcieb)
        pci1000,30e0 (pciex1000,97) [Broadcom / LSI SAS3008 PCI-Express Fusion-MPT SAS-3], instance #0 (driver name: mpt_sas)
            iport, instance #1 (driver name: mpt_sas)
                smp, instance #0 (driver name: smp)
                disk, instance #1 (driver name: sd)
                enclosure, instance #0 (driver name: ses)
            iport, instance #2 (driver name: mpt_sas)
    pci8086,2f08 (pciex8086,2f08) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3] (driver name: pcieb)
    pci8086,2f0a (pciex8086,2f0a) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCI Express Root Port 3], instance #7 (driver name: pcieb)
        pci8086,7b11 (pciex8086,154d) [Intel Corporation Ethernet 10G 2P X520 Adapter], instance #0 (driver name: ixgbe)
        pci8086,7b11 (pciex8086,154d) [Intel Corporation Ethernet 10G 2P X520 Adapter], instance #1 (driver name: ixgbe)
    pci8086,2f28 (pciex8086,2f28) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Address Map, VTd_Misc, System Management], instance #1 (driver name: imcstub)
    pci8086,2f29 (pciex8086,2f29) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Hot Plug]
    pci8086,2f2a (pciex8086,2f2a) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 RAS, Control Status and Global Errors]
    pci8086,0 (pciex8086,2f2c) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 I/O APIC]
pci, instance #1 (driver name: pci)
    pci8086,2f80 (pci8086,2f80) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0]
    pci8086,2f32 (pci8086,2f32) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0]
    pci8086,2f83 (pci8086,2f83) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 0]
    pci8086,2f90 (pci8086,2f90) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1]
    pci8086,2f33 (pci8086,2f33) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1]
    pci8086,2f93 (pci8086,2f93) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 QPI Link 1]
    pci8086,2f81 (pci8086,2f81) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring]
    pci8086,2f36 (pci8086,2f36) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring]
    pci8086,2f37 (pci8086,2f37) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 R3 QPI Link 0 & 1 Monitoring]
    pci8086,2fe0 (pci8086,2fe0) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe1 (pci8086,2fe1) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe2 (pci8086,2fe2) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe3 (pci8086,2fe3) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe4 (pci8086,2fe4) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe5 (pci8086,2fe5) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe6 (pci8086,2fe6) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe7 (pci8086,2fe7) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe8 (pci8086,2fe8) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fe9 (pci8086,2fe9) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2fea (pci8086,2fea) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2feb (pci8086,2feb) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Unicast Registers]
    pci8086,2ff8 (pci8086,2ff8) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent]
    pci8086,2ff9 (pci8086,2ff9) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent]
    pci8086,2ffa (pci8086,2ffa) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent]
    pci8086,2ffb (pci8086,2ffb) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Buffered Ring Agent]
    pci8086,2fe0 (pci8086,2ffc) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers], instance #2 (driver name: imcstub)
    pci8086,2fe0 (pci8086,2ffd) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers], instance #3 (driver name: imcstub)
    pci8086,2fe0 (pci8086,2ffe) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 System Address Decoder & Broadcast Registers]
    pci8086,2f1d (pci8086,2f1d) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCIe Ring Interface]
    pci8086,2f34 (pci8086,2f34) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 PCIe Ring Interface]
    pci8086,2f1e (pci8086,2f1e) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers], instance #4 (driver name: imcstub)
    pci8086,2f7d (pci8086,2f7d) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers]
    pci8086,2f1f (pci8086,2f1f) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Scratchpad & Semaphore Registers], instance #5 (driver name: imcstub)
    pci8086,2fa0 (pci8086,2fa0) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0], instance #6 (driver name: imcstub)
    pci8086,2f30 (pci8086,2f30) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0]
    pci8086,2f70 (pci8086,2f70) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 0 Debug]
    pci8086,2f60 (pci8086,2f60) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1], instance #7 (driver name: imcstub)
    pci8086,2f38 (pci8086,2f38) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1]
    pci8086,2f78 (pci8086,2f78) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Home Agent 1 Debug]
    pci8086,2fa8 (pci8086,2fa8) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers], instance #8 (driver name: imcstub)
    pci8086,2f71 (pci8086,2f71) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Target Address, Thermal & RAS Registers], instance #9 (driver name: imcstub)
    pci8086,2faa (pci8086,2faa) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder], instance #10 (driver name: imcstub)
    pci8086,2fab (pci8086,2fab) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel Target Address Decoder], instance #11 (driver name: imcstub)
    pci8086,2fae (pci8086,2fae) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Channel 0/1 Broadcast]
    pci8086,2faf (pci8086,2faf) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Global Broadcast]
    pci8086,2fb0 (pci8086,2fb0) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 Thermal Control]
    pci8086,2fb1 (pci8086,2fb1) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 Thermal Control]
    pci8086,2fb2 (pci8086,2fb2) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 0 ERROR Registers]
    pci8086,2fb3 (pci8086,2fb3) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 0 Channel 1 ERROR Registers]
    pci8086,2fbc (pci8086,2fbc) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1]
    pci8086,2fbd (pci8086,2fbd) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1]
    pci8086,2fbe (pci8086,2fbe) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1]
    pci8086,2fbf (pci8086,2fbf) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 0 & 1]
    pci8086,2f68 (pci8086,2f68) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers], instance #12 (driver name: imcstub)
    pci8086,2f79 (pci8086,2f79) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Target Address, Thermal & RAS Registers], instance #13 (driver name: imcstub)
    pci8086,2f6a (pci8086,2f6a) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder], instance #14 (driver name: imcstub)
    pci8086,2f6b (pci8086,2f6b) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel Target Address Decoder], instance #15 (driver name: imcstub)
    pci8086,2f6e (pci8086,2f6e) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Channel 2/3 Broadcast]
    pci8086,2f6f (pci8086,2f6f) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO Global Broadcast]
    pci8086,2fd0 (pci8086,2fd0) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 Thermal Control]
    pci8086,2fd1 (pci8086,2fd1) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 Thermal Control]
    pci8086,2fd2 (pci8086,2fd2) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 0 ERROR Registers]
    pci8086,2fd3 (pci8086,2fd3) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Integrated Memory Controller 1 Channel 1 ERROR Registers]
    pci8086,2fb8 (pci8086,2fb8) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3]
    pci8086,2fb9 (pci8086,2fb9) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3]
    pci8086,2fba (pci8086,2fba) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3]
    pci8086,2fbb (pci8086,2fbb) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 DDRIO (VMSE) 2 & 3]
    pci8086,2f98 (pci8086,2f98) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit]
    pci8086,2f99 (pci8086,2f99) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit]
    pci8086,2f9a (pci8086,2f9a) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit]
    pci8086,2fc0 (pci8086,2fc0) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit]
    pci8086,2f9c (pci8086,2f9c) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 Power Control Unit]
    pci8086,2f88 (pci8086,2f88) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 VCU]
    pci8086,2f8a (pci8086,2f8a) [Intel Corporation Xeon E7 v3/Xeon E5 v3/Core i7 VCU]
fw, instance #0 (driver name: acpinex)
    sb, instance #1 (driver name: acpinex)
        socket, instance #2 (driver name: acpinex)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
        socket, instance #3 (driver name: acpinex)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
            cpu (driver name: cpudrv)
        usbroothub, instance #4 (driver name: acpinex)
            port, instance #7 (driver name: acpinex)
                port, instance #8 (driver name: acpinex)
                port, instance #9 (driver name: acpinex)
                port, instance #10 (driver name: acpinex)
                port, instance #11 (driver name: acpinex)
                port, instance #12 (driver name: acpinex)
                port, instance #13 (driver name: acpinex)
        usbroothub, instance #5 (driver name: acpinex)
            port, instance #6 (driver name: acpinex)
                port, instance #14 (driver name: acpinex)
                port, instance #15 (driver name: acpinex)
                port, instance #16 (driver name: acpinex)
                port, instance #17 (driver name: acpinex)
                port, instance #18 (driver name: acpinex)
                port, instance #19 (driver name: acpinex)
                port, instance #20 (driver name: acpinex)
                port, instance #21 (driver name: acpinex)

  motherboard
  used-resources
  iscsi, instance #0 (driver name: iscsi)
  options, instance #0 (driver name: options)
  pseudo, instance #0 (driver name: pseudo)
  xsvc, instance #0 (driver name: xsvc)

The device information for our ixgbe0 interface is:

pci8086,7b11 (pciex8086,154d) [Intel Corporation Ethernet 10G 2P X520 Adapter], 
instance #0 (driver name: ixgbe)¬

The beginning of this line is exactly the new line we want to add to ppt_matches file, which may or not have any additional contents: pci10de,15f0 pci8086,7b11

Then, for ppt_aliases we want the full device path prefixed by ppt which, on this case is: ppt "/pci@75,0/pci8086,2f0a@3,2/pci8086,7b11@0"

We can obtain this value from the output of the command prtconf -Ddv which will have a value assigned to dev_path for the device we're looking for: dev_path=/pci@75,0/pci8086,2f0a@3,2/pci8086,7b11@0:ixgbe0

(The full output of prtconf -Ddv is omitted for clarity)

2. Base64 encode ppt_matches and ppt_aliases and post them to CNAPI

Once we have the contents of these files, the contents need to be base64 encoded before we can post to CNAPI. The following is an example of how to do this using NodeJS:

$ node
> var fs = require('fs');
undefined
> var d = fs.readFileSync('/tmp/ppt_matches');
undefined
> d.toString('base64');
cGNpMTBkZSwxNWYwCnBjaTgwODYsN2IxMQo=
> d.toString();
'pci10de,15f0\npci8086,7b11\n
> var dd = fs.readFileSync('/tmp/ppt_aliases');
undefined
> dd.toString('base64');
cHB0ICIvcGNpQDc1LDAvcGNpODA4NiwyZjBhQDMsMi9wY2k4MDg2LDdiMTFAMDppeGdiZTAiCg==
> dd.toString();
ppt "/pci@75,0/pci8086,2f0a@3,2/pci8086,7b11@0:ixgbe0"\n
> var dd = fs.readFileSync('/tmp/ppt_aliases');
undefined
> dd.toString('base64');
cHB0ICIvcGNpQDc1LDAvcGNpODA4NiwyZjBhQDMsMi9wY2k4MDg2LDdiMTFAMCIK
> dd.toString();
ppt "/pci@75,0/pci8086,2f0a@3,2/pci8086,7b11@0"\n

sdc-cnapi /boot/44454c4c-4600-1030-8050-b5c04f383432 -X PUT -d '{
    "boot_modules": [ {
    "path": "etc/ppt_matches","content": "cGNpMTBkZSwxNWYwCnBjaTgwODYsN2IxMQo=" }, {
    "path": "etc/ppt_aliases", "content": "cHB0ICIvcGNpQDc1LDAvcGNpODA4NiwyZjBhQDMsMi9wY2k4MDg2LDdiMTFAMCIK" }
]}'

Once the contents have been added to CNAPI, the next time booter refresh its cache for our CN, these files will be written to /tftpboot and the boot files will be modified as follows:

[root@5fedc9ef-871b-4436-853b-40af5a0657d5 (commercial-QA:dhcpd0) ~]# cat /tftpboot/boot.ipxe.01ECF4BBD295B0
#!ipxe
kernel http://${next-server}/os/20200520T174734Z/platform/i86pc/kernel/amd64/unix -B         hostname=5F0P842,rabbitmq=guest:guest:172.20.5.23:5672,rabbitmq_dns=guest:guest:rabbitmq.commercial-QA.joyent.com:5672,admin_nic=ec:f4:bb:d2:95:b0,external_nic=ec:f4:bb:d2:95:b2,console=text,text-mode="115200,8,n,1,-"
module http://${next-server}/os/20200520T174734Z/platform/i86pc/amd64/boot_archive type=rootfs name=ramdisk
module http://${next-server}/os/20200520T174734Z/platform/i86pc/amd64/boot_archive.hash type=hash name=ramdisk
module http://${next-server}/bootfs/ecf4bbd295b0/networking.json type=file name=networking.json
module http://${next-server}/bootfs/ecf4bbd295b0/networking.json.hash type=hash name=networking.json
module http://${next-server}/bootfs/ecf4bbd295b0/etc/ppt_aliases type=file name=etc/ppt_aliases
module http://${next-server}/bootfs/ecf4bbd295b0/etc/ppt_matches type=file name=etc/ppt_matches

[root@5fedc9ef-871b-4436-853b-40af5a0657d5 (commercial-QA:dhcpd0) ~]# cat /tftpboot/bootfs/ecf4bbd295b0/etc/ppt_matches
pci10de,15f0
pci8086,7b11

[root@5fedc9ef-871b-4436-853b-40af5a0657d5 (commercial-QA:dhcpd0) ~]# cat /tftpboot/bootfs/ecf4bbd295b0/etc/ppt_aliases
ppt "/pci@75,0/pci8086,2f0a@3,2/pci8086,7b11@0"

Once these files are present the node can be rebooted.

3. Reboot the CN and verify that the device config has been modified

With the new configuration, our device should be displayed by pptadm:

[root@5F0P842 (commercial-QA) ~]# pptadm list -a
DEV        VENDOR DEVICE PATH
/dev/ppt0  8086   154d   /pci@75,0/pci8086,2f0a@3,2/pci8086,7b11@0

and prtconf should show that it's using ppt now: [root@5F0P842 (commercial-QA) ~]# prtconf -Dd /devices/pci@75,0/pci8086,2f0a@3,2/pci8086,7b11@0 pci8086,7b11 (pciex8086,154d) [Intel Corporation Ethernet 10G 2P X520 Adapter], instance #0 (driver name: ppt)

Note that our boot module files are stored at /system/boot/etc/[ppt_matches|ppt_aliases], not on the default /etc/... path

4. Finally, we need to configure the bhyve VM we want to make use of the device from.

For this example, this is the VM config previous to the addition of the Network Interface:

[root@5F0P842 (commercial-QA) ~]# zonecfg -z 861905ad-00b7-4220-b6ce-18b6e7cc5e0e info device
device:
  match: /dev/zvol/rdsk/zones/861905ad-00b7-4220-b6ce-18b6e7cc5e0e/disk0
  property: (name=boot,value="true")
  property: (name=model,value="virtio")
  property: (name=media,value="disk")
  property: (name=image-size,value="10240")
  property: (name=image-uuid,value="9aa48095-da9d-41ca-a094-31d1fb476b98")
  property: (name=pci-slot,value="0:4:0")
  property: (name=uuid,value="f2062b2e-ac34-eee2-8e63-9bd4311dedb4")
device:
match: /dev/zvol/rdsk/zones/861905ad-00b7-4220-b6ce-18b6e7cc5e0e/disk1
  property: (name=boot,value="false")
  property: (name=model,value="virtio")
  property: (name=media,value="disk")
  property: (name=size,value="14336")
  property: (name=pci-slot,value="0:4:1")
  property: (name=uuid,value="2c09339a-48c0-c0e8-8000-fb982e9e4817")

Then, we use zonecfg to add the new device:

[root@5F0P842 (commercial-QA) ~]# zonecfg -z 861905ad-00b7-4220-b6ce-18b6e7cc5e0e
zonecfg:861905ad-00b7-4220-b6ce-18b6e7cc5e0e> add device
zonecfg:861905ad-00b7-4220-b6ce-18b6e7cc5e0e:device> set match="/devices/pci@75,0/pci8086,2f0a@3,2/pci8086,7b11@0:ppt"
zonecfg:861905ad-00b7-4220-b6ce-18b6e7cc5e0e:device> add property (name=model,value="passthru")
zonecfg:861905ad-00b7-4220-b6ce-18b6e7cc5e0e:device> add property (name=pci-slot,value="0:8:0")
zonecfg:861905ad-00b7-4220-b6ce-18b6e7cc5e0e:device> end
zonecfg:861905ad-00b7-4220-b6ce-18b6e7cc5e0e> exit

And restart the VM for the changes to take effect:

[root@5F0P842 (commercial-QA) ~]# vmadm list
 UUID                                  TYPE  RAM      STATE             ALIAS
861905ad-00b7-4220-b6ce-18b6e7cc5e0e  BHYV  1024     running           bhyve0
[root@5F0P842 (commercial-QA) ~]# vmadm reboot 861905ad-00b7-4220-b6ce-18b6e7cc5e0e
Successfully completed reboot for VM 861905ad-00b7-4220-b6ce-18b6e7cc5e0e
[root@5F0P842 (commercial-QA) ~]# zonecfg -z 861905ad-00b7-4220-b6ce-18b6e7cc5e0e info device
device:
  match: /dev/zvol/rdsk/zones/861905ad-00b7-4220-b6ce-18b6e7cc5e0e/disk0
  property: (name=boot,value="true")
  property: (name=model,value="virtio")
  property: (name=media,value="disk")
  property: (name=image-size,value="10240")
  property: (name=image-uuid,value="9aa48095-da9d-41ca-a094-31d1fb476b98")
  property: (name=pci-slot,value="0:4:0")
  property: (name=uuid,value="f2062b2e-ac34-eee2-8e63-9bd4311dedb4")
device:
  match: /dev/zvol/rdsk/zones/861905ad-00b7-4220-b6ce-18b6e7cc5e0e/disk1
  property: (name=boot,value="false")
  property: (name=model,value="virtio")
  property: (name=media,value="disk")
  property: (name=size,value="14336")
  property: (name=pci-slot,value="0:4:1")
  property: (name=uuid,value="2c09339a-48c0-c0e8-8000-fb982e9e4817")
device:
  match: /devices/pci@75,0/pci8086,2f0a@3,2/pci8086,7b11@0:ppt
  property: (name=model,value="passthru")
  property: (name=pci-slot,value="0:8:0")

Once we log into the VM, we should be able to "see" the Network Interface:

ubuntu@861905ad-00b7-4220-b6ce-18b6e7cc5e0e:~$ lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma]
00:04.0 SCSI storage controller: Red Hat, Inc. Virtio block device
00:04.1 SCSI storage controller: Red Hat, Inc. Virtio block device
00:06.0 Ethernet controller: Red Hat, Inc. Virtio network device
00:08.0 Ethernet controller: Intel Corporation Ethernet 10G 2P X520 Adapter (rev 01)
00:1e.0 VGA compatible controller: Device fb5d:40fb
00:1e.1 USB controller: Intel Corporation 7 Series/C210 Series Chipset Family USB xHCI Host Controller
00:1f.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
ubuntu@861905ad-00b7-4220-b6ce-18b6e7cc5e0e:~$ ifconfig -a
enp0s8: flags=4098<BROADCAST,MULTICAST>  mtu 1500
    ether a0:36:9f:5f:aa:d4  txqueuelen 1000  (Ethernet)
    RX packets 0  bytes 0 (0.0 B)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 0  bytes 0 (0.0 B)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
    inet 127.0.0.1  netmask 255.0.0.0
    inet6 ::1  prefixlen 128  scopeid 0x10<host>
    loop  txqueuelen 1000  (Local Loopback)
    RX packets 92  bytes 7096 (7.0 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 92  bytes 7096 (7.0 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

net0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 172.21.5.14  netmask 255.255.255.0  broadcast 172.21.5.255
    inet6 fe80::92b8:d0ff:fe38:5ac3  prefixlen 64  scopeid 0x20<link>
    ether 90:b8:d0:38:5a:c3  txqueuelen 1000  (Ethernet)
    RX packets 129  bytes 22559 (22.5 KB)
    RX errors 0  dropped 0  overruns 0  frame 0
    TX packets 108  bytes 18590 (18.5 KB)
    TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0