Welcome to Symantec Connect.  Log in or register to participate.
Login to participate
Endpoint Management & Virtualization ArticlesRSS

PCIDetect and How it Works in a Multi-NIC Configuration

Admin's picture

Altiris tries to maintain current drivers and their device ID's the best we can. However, we are not linked to the manufacturer of NICs, so if they add a new device ID to an existing driver, we will not know it until we are informed by a client.

Contents

OEMSetup.inf
PCIDetect.ini
How This All Gets Put Together
What we learn from this output
How PCIDetect works with loading drivers
How do you fix this issue?

It is important to know how to fix issues where NICs are not loading even though you are sure you have the correct driver.

There are 2 files which are the most important when creating a Multi-NIC configuration for PXE or embedded Bootworks partitions: OEMSetup.inf and PCIDetect.ini.

OEMSetup.inf

The OEMSetup.inf file is located in Bootwiz\platforms\dos\drivers\Microsoft (if you are using DOS) or
\Bootwiz\platforms\Winpe\x86\Drivers\std\I386\inf (if you are using WinPE).

Here is an example of the Intel\P100VE_1 as seen in 6.5 code today:

; OEMSETUP.INF for Lan Server 4.0 DOS client
 
[PCI]
VENDOR_ID=8086
DEVICE_ID=103B
[disks]
1 = \DOS, "Intel PRO/100+ PCI Adapter Driver Disk", E100B_1
[netcard]
a$E100B="Intel PRO 100 and 100 VM Adapter Family -
3/5/03",0,ndis,ethernet,real,a$E100B,a$E100B_nif
[a$E100B]
devdir=1:E100B.dos
device=E100B.dos,@devdir\E100B.dos
[a$E100B_nif]
Drivername=E100B$
param=Speed,"Line Speed (Mbits/sec)",text,"Auto-
Speed,10,100","Auto-Speed",0x3c
param=ForceDuplex,"Force Duplex Mode",text,"Auto,1,2","Auto",0x3c

The OEMSetup.inf file is the file we use for right-click install Bootworks functions as well, so it is important that new Device ID.s are directed to Altiris Development so that they can be added for future code releases.

PCIDetect.ini

The PCIDetect.ini file is created during the boot disk creation process and is located in the net\pcidetect.ini of the PXE image or the Bootworks partition.

Here is an example of a PCIDetect.ini file:

[ALTIRIS_PCI_NICS]
3Com EtherLink III (3C590) PCI Busmaster=10B7:5900,\net\_590
AMD PCNET Adapter Family=1022:2000,\net\pcnet
Broadcom NetXtreme Ethernet (for HP BC 1000
blades)=14e4:1653;14e4:166E;14e4:1696;14e4:16A6,\net\BC1000
Intel PRO 100 and 100 VM Adapter Family -
3/5/03=8086:103B,\net\P100VE_1

The INI file shows many things, but the important part of this example is the location of the driver that is trying to be loaded (see bold above). To fix issues where the PCIDetect is not seeing the
driver you think you are using, you need to fix the correct OEMSetup.inf file in your code.

How This All Gets Put Together

When creating the boot disk, you select multiple NICs and Boot Disk Creator takes the device and vendor IDs and adds them to the INI file.

The PXE image contains the PCIDetect.exe which is a tool we use to find the vendor and device ID of all Devices in a machine. We specifically use it to match up NIC Vendor and Device ID's to know which driver to load in a multi-NIC configuration.

This is what is used to compare the PCIDetect output with what the PXE image has.

Sample output of PCIDetect.exe using this command:

pcidtect.exe -l > output.txt
PCI Bus Num = 0, PCI Device Num = 0, VendorID = 0x8086, DeviceID =
0x3340
PCI Bus Num = 0, PCI Device Num = 1, VendorID = 0x8086, DeviceID =
0x3341
PCI Bus Num = 0, PCI Device Num = 29, VendorID = 0x8086, DeviceID =
0x24c2
PCI Bus Num = 0, PCI Device Num = 29, VendorID = 0x8086, DeviceID =
0x24c4
PCI Bus Num = 0, PCI Device Num = 30, VendorID = 0x8086, DeviceID =
0x24cd
PCI Bus Num = 0, PCI Device Num = 30, VendorID = 0x8086, DeviceID =
0x2448
PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID =
0x24cc
PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID =
0x24ca
PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID =
0x24c5
PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID =
0x24c6
PCI Bus Num = 1, PCI Device Num = 0, VendorID = 0x1023, DeviceID =
0x2100
PCI Bus Num = 2, PCI Device Num = 8, VendorID = 0x8086, DeviceID =
0x103d
PCI Bus Num = 2, PCI Device Num = 10, VendorID = 0x8086, DeviceID =
0x1043
PCI Bus Num = 2, PCI Device Num = 11, VendorID = 0x1179, DeviceID =
0x617
PCI Bus Num = 2, PCI Device Num = 13, VendorID = 0x1179, DeviceID =
0x805

What we learn from this output

You can go to various sites to get this information, but these are the basics of what we need:

bus num 0 =  Intel Corporation 82855PM Processor to I/O Controller 
Vendor ID is 8086 Device 3340 
Bus num 1 = Mobility Radeon 9000 Video Card of some sort because the 
vendor ID is 1002 Device 4c66 
Bus Num 2  = Intel(R) PRO/Wireless 2100 LAN Card Driver Vendor 8086 
Device 1043 
Bus Num 2 = PRO/100 VE Network Connection Vendor 8086 Device 103d 
Bus Num 2 = CardBus Controller Vendor 1524 Device 1421 

How PCIDetect works with loading drivers

We take the output from the PCIDetect and try to match it up with the PCIDetect.ini file.

Output from PCIDetect:

PCI Bus Num = 0, PCI Device Num = 0, VendorID = 0x8086, DeviceID =
0x3340
PCI Bus Num = 0, PCI Device Num = 1, VendorID = 0x8086, DeviceID =
0x3341
PCI Bus Num = 0, PCI Device Num = 29, VendorID = 0x8086, DeviceID =
0x24c2
PCI Bus Num = 0, PCI Device Num = 29, VendorID = 0x8086, DeviceID =
0x24c4
PCI Bus Num = 0, PCI Device Num = 30, VendorID = 0x8086, DeviceID =
0x24cd
PCI Bus Num = 0, PCI Device Num = 30, VendorID = 0x8086, DeviceID =
0x2448
PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID =
0x24cc
PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID =
0x24ca
PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID =
0x24c5
PCI Bus Num = 0, PCI Device Num = 31, VendorID = 0x8086, DeviceID =
0x24c6
PCI Bus Num = 1, PCI Device Num = 0, VendorID = 0x1023, DeviceID =
0x2100
PCI Bus Num = 2, PCI Device Num = 8, VendorID = 0x8086, DeviceID =
0x103d
PCI Bus Num = 2, PCI Device Num = 10, VendorID = 0x8086, DeviceID =
0x1043
PCI Bus Num = 2, PCI Device Num = 11, VendorID = 0x1179, DeviceID =
0x617
PCI Bus Num = 2, PCI Device Num = 13, VendorID = 0x1179, DeviceID =
0x805

Compare this to the PCIDetect.ini file:

3Com EtherLink III (3C590) PCI Busmaster=10B7:5900,\net\_590
AMD PCNET Adapter Family=1022:2000,\net\pcnet
Broadcom NetXtreme Ethernet (for HP BC 1000
blades)=14e4:1653;14e4:166E;14e4:1696;14e4:16A6,\net\BC1000
Intel PRO 100 and 100 VM Adapter Family -
3/5/03=8086:103B,\net\P100VE_1

They do not match up, so whatever is first on the list will be forced to load even if it does not work; in this case, the 3com card.

How do you fix this issue?

You fix this issue by modifying the PCI section of the OEMSetup.inf file by adding an additional device ID to look like this:

[PCI]
VENDOR_ID=8086
DEVICE_ID=103B;103D

You overwrite the existing file in the directory
Bootwiz\platforms\dos\drivers\Microsoft\ intel\pro100ve_1\oemsetup.inf

You then recreate the Bootworks package or the PXE image so that the PCIDetect.ini file has the new data and looks like the following:

[ALTIRIS_PCI_NICS]
3Com EtherLink III (3C590) PCI Busmaster=10B7:5900,\net\_590
AMD PCNET Adapter Family=1022:2000,\net\pcnet
Broadcom NetXtreme Ethernet (for HP BC 1000
blades)=14e4:1653;14e4:166E;14e4:1696;14e4:16A6,\net\bc1000
Intel PRO 100 and 100 VM Adapter Family -
3/5/03=8086:103B;8086:103D,\net\P100VE_1

Note: The default driver which loads is always the first driver in the PCIDetect.ini file if nothing matches.

If you have a problematic computer that you cannot find the correct device ID for, then put that computer's driver first in the INI file. If there is a match, we force the subdirectory driver to load into the root and the computer will boot with the matching driver.

hendrj's picture

PCIdtect.exe not in bootimage

I made a dos bootimage, with multi nic. But there is no detection of the multiple nic's. If i edit the bootimage, i don't see pcidtect.exe in the image. Is this normal? I'm using DS 6.8 SP2