Novell Home

Connect Computers to Servers Quickly and Easily Using PCID CD

Novell Cool Solutions: Feature

Digg This - Slashdot This

Posted: 23 Mar 2004
 

Included is the documentation and the floppy images as well as the actual ISO image of the PCID CD.

PCID was developed by Novell as an internal tool for IS, Test Groups, and Lab Managers to greatly improve the time it takes to connect computers to various NetWare, Linux, and Windows servers from DOS. Anyone who has tried to image a computer from an image server, perform an over the wire install of an OS, copy data off of a hard drive when the Operating System has crashed, etc. knows that loading the proper network client and Network Interface Card (NIC) drivers in DOS can be a very time consuming and difficult process. PCID simplifies this process by detecting the NIC through PCI bus scanning calls and then loading the appropriate driver. In short, you do not need to know what is in the computer to connect it to a network.

Why is this an improvement? Let's review what we currently have to do to get a computer to connect to a server. First of all we have to know what NIC or NICs are in the computer. This is probably the most time consuming part of the process. In order to find out what the NIC is we will either need to open the case of the computer and try to look up the NIC Manufacturer and Model number off the card, try to find the manuals to the computer (if we still have them) to see if the manual makes mention of the NIC Manufacturer and Model number, or find a PCI bus scanning utility which will list the PCI Vendor ID and Product ID. In either case, this can be very time consuming not to mention frustrating when multiple computers of different types need to be connected to the server.

Second, we need to find the correct driver for the NIC and the network client we are using. Typically, we might have disks with these drivers on them. However, sometimes we have to download these drivers from the vendors website. This is where the fun really begins. Some vendors like to make driver varients which are slightly different between similar NIC model numbers. Unless you know exactly which varient it is, you get to play trial and error until you find the correct driver. To make matters worse this driver may not work in another computer that has a similar but slightly different NIC.

Lastly, we have to remember everything we did on the computer to get it to load the right driver and connect to the server. The fun gets to start all over again on the next computer we need to use. Chances are the hardware in the next computer is not the same as the previous computer we worked on (unless you strictly enforce only one brand and make of a computer in your workplace :-) ).

PCID eliminates this problem by automating the discovery of the NIC or NICs in the computer, reporting the Manufacturer, Model Number and Model Name, and even loading the appropriate driver without any user intervention. With PCID you can customize your own boot disk that will get any computer onto the network using either the IPX or IP protocol stacks and either the NetWare 16-bit, NetWare 32-bit, or LANMAN clients.

How Does It Work?

The core of the PCID utility is made up of the following files:

- pcid.exe <- The main executable
- nicload.exe <- The "lite" executable for floppy disks
- lmnic.exe <- The "lite" LANMAN executable
- lanload.bat <- The Novell 32-bit Client driver loader.
- system.tmp <- The LANMAN template file that becomes system.ini
- protocol.ini     <- The LANMAN template file that becomes protocol.ini
- pcidevs.txt <- The PCI vendor list
- netdrvr.txt <- The NIC driver list

All of the files must be together in the same directory for complete functionality and proper operation. Let's cover each of the files in more detail.

PCID.EXE
PCID.EXE is a multi-function utility that performs various tasks related to the PCI Bus of IBM-Compatible computers. For help on PCID.EXE type 'pcid.exe -?'. The following output is displayed to the screen:

Help for PCI Detector rev 1.7.0
__________________________________________
Usage: PCID [-?] [-B] [-D] [-H] [-P] [-S] [-L:x] [-F:x]

-? : Displays this help screen!
-B : Enable display of the Bus, Device & Function information
-D : Do a hex-dump of each device''s entire configuration space
-H : Use direct hardware access (instead of the BIOS) to retrieve PCI Info
May be required for accurate reporting on Intel 430FX chipset+Award BIOS
-P : Pause screen output after each device
-S : Create a brief, summary report only; only devices and IRQs listed
-L:x : Loads Network driver automatically where x =
(1)6-bit IPX Client, (3)2-bit IP Client
-F:x : Find device based on class type where x =
(S)torage, (N)etwork, (V)ideo, (M)ultimedia, (B)ridge,
(C)ommunications

On the surface PCID.EXE may look like other PCI scanning utilities. However, there is a major difference. PCID.EXE has an option '-L:x' which allows PCID to automatically load NIC drivers. Passing the -L:x option to PCID.EXE causes PCID to scan the PCI bus using either the PCI BIOS or a direct hardware scan (see the '-H' option above) and catagorizes all adapters into either Storage, Network, Video, etc. PCID.EXE will also scan Card Bus cards as long as Card Bus Services is loaded (this may or may not exist on DOS yet).

Once PCID.EXE scans the bus and catagorizes the available adapters it will filter out all PCI and CardBus adapters except the Network Adapters (NIC). If more than 1 NIC is found in the computer then PCID.EXE will display a menu of all of the NICs found with a number assignment that the user can select from. This menu has a 10 second timeout that will select the first NIC in the menu if no key is pressed. The NIC driver for the selected NIC will be automatically loaded. This makes it possible to have automated boots without user intevention. If only 1 NIC is found in the computer then no menu is displayed and the NIC driver is loaded for the found NIC.

In order to load the correct NIC driver, PCID.EXE uses the following directory structure:

You will notice that each NIC vendor has its own directory under the NICDrvrs directory. Under each vendor directory there should be a LAN, ODI, and LANMAN directory. These directories are for each of the respective clients that PCID.EXE is compatible with. The LAN directoy is for the Novell 32-bit Client drivers. The ODI directory is for the Novell 16-bit ODI Client drivers. The LANMAN directory is for the Microsoft LANMAN Client drivers. Each of these clients are determined by passing the appropriate client type after the '-L:x' switch on the PCID.EXE command line or the 'x' switch on the NICLOAD.EXE command line. Please note that for very good reasons which we will not discuss here the LANMAN client loader is only found in the LMNIC.EXE executable. The Novell 16-bit and 32-bit client loaders are found in either the PCID.EXE or the NICLOAD.EXE executables.

To determine which driver to load and from which manufacturer directory PCID.EXE (as well as all of the other utilities NICLOAD.EXE and LMNIC.EXE) uses the NETDRVR.TXT file. More on this file can be found in the NETDRVR.TXT file description section below.

After execution, PCID.EXE will return an ERRORLEVEL which can be read to determine NIC driver loading success or failure. This allows PCID.EXE to be scripted in batch files when loading clients to only proceed with the rest of the client load if the NIC driver successfully loaded.

NICLOAD.EXE
NICLOAD.EXE is a single-function utility that was created to provide a small foot print solution for floppy disk implementations. The NICLOAD.EXE is a code subset of the PCID.EXE that will only detect the NIC and load the driver. Therefore, there is only one command line switch that can be passed to NICLOAD.EXE. Typing 'nicload.exe -?' will show the following help screen:

Help for NIC Loader rev 1.70
______________________________________
Usage: NICLOAD [-?] [x]

-? : Displays this help screen!
x : Loads Network driver automatically where x =
  (1)6-bit IPX Client, (3)2-bit IP Client

Notice that the '-L:' switch is not needed. All that is needed is a '1' for the Novell 16-bit IPX client or '2' for the Novell 32-bit IP client. The functionality of the NIC loader feature is exactly the same as PCID.EXE.

LMNIC.EXE
LMNIC.EXE is a single-function utility that was created to provide a small foot print solution for floppy disk implementations of the Microsoft LANMAN client. The LMNIC.EXE is a similar but separate code subset of the PCID.EXE that will only detect the NIC and load the LANMAN driver. LMNIC.EXE is the only utility that will attempt to load LANMAN drivers.

LMNIC.EXE functions slightly different than PCID.EXE or NICLOAD.EXE because of the way the Microsoft LANMAN client loads. To help you understand the difference we need to take a quick look at the differences between the loading of the Novell clients and the loading of the Microsoft LANMAN client. Both Novell clients (16-bit and 32-bit) leave the NIC driver loading up to the end-user. For example, after loading the Link Support Layer (LSL) in the Novell 16-bit ODI client the user is expected to load the correct driver manually or through a script.

However, the Microsoft LANMAN client loads the driver when the client service is executed. To know what driver to load the LANMAN client relies on configuration files (SYSTEM.INI and PROTOCOL.INI) which specifically state what NIC driver needs to load. As a result, the only way a LANMAN NIC driver can be dynamically loaded is to change these two configuration files on the fly. For this reason the LMNIC.EXE does not actually try to load LANMAN NIC drivers like the PCID.EXE and NICLOAD.EXE utilities try to do for the Novell client drivers. Instead, LMNIC.EXE modifies the SYSTEM.INI and PROTOCOL.INI (LMNIC.EXE uses templates SYSTEM.TMP and PROTOCOL.TMP as a base) before the LANMAN client is launched.

In order to write files (SYSTEM.INI and PROTOCOL.INI) for the LANMAN client to read, a RAMDisk should be used. This serves two purposes. First, in the case where you are booting the PCID utilities from a CD-ROM there is no way to write to the CD-ROM and it is not a good assumption to think that a hard drive is available to write to. Second, to keep things consistent between floppy boots and CD-ROM boots it is simpler to assume that the LANMAN client will always use a RAMDisk to load.

To account for the dynamic nature of the RAMDisk drive letter in DOS the LMNIC.EXE needs to have the current path at the time the LMNIC.EXE executable is run set to the RAMDisk drive letter. LMNIC.EXE then needs to know which drive letter the NICDrvrs directory is located to copy the correct driver to the RAMDisk. To accomplish this the LMNIC.EXE takes a command line switch of '-D:x' where x is the drive letter where the NICDrvrs directory can be found.

Therefore, there is only one command line switch that can be passed to LMNIC.EXE. Typing 'lmnic.exe -?' will show the following help screen:

Help for LMNIC rev 1.70
______________________________________

Usage: LMNIC [-?] [-D:x]

-? : Displays this help screen!
-D:x : Driver storage driver letter where x is the driver letter.

Notice that the '-L:' switch is not needed. This is because LMNIC.EXE only loads the LANMAN client. No need to differentiate the client. ;-)

LANLOAD.BAT
LANLOAD.BAT is only used by PCID.EXE and NICLOAD.EXE to load the Novell 32-bit client driver. The reason for this is that the Novell 32-bit client uses the NIOS service and thus any drivers or client modules are loaded by calling the 'load module.xxx' command. Both PCID.EXE and NICLOAD.EXE are not able to call this command line directly. Therefore, PCID.EXE and NICLOAD.EXE call the LANLOAD.BAT batch file passing the driver name as a parameter to the batch file to actually load the driver into the NIOS service. The ugly things we have to do in DOS to get things to work. :-(

SYSTEM.TMP
This file is simply the SYSTEM.INI file used by the LANMAN client to load the LANMAN NIC driver. There is nothing special about it other than the name change. LMNIC.EXE needs this file with the name SYSTEM.TMP to read in the data and write out a new file named SYSTEM.INI with the detected driver name added.

PROTOCOL.TMP
This file is simply the PROTOCOL.INI file used by the LANMAN client to load the LANMAN NIC driver and bind it to the protocol. There is nothing special about it other than the name change. LMNIC.EXE needs this file with the name PROTOCOL.TMP to read in the data and write out a new file named PROTOCOL.INI with the detected driver name added.

PCIDEVS.TXT
PCIDEVS.TXT is a customizable data text file created and maintained by Craig Hart (please visit http://members.datafast.net.au/dft0802 for more information and updates to this file). All credit and kudos go to Craig Hart for maintaining this list.

PCID.EXE is the only program that uses this data file. Both NICLOAD.EXE and LMNIC.EXE have no need for this file. This data file is only used when PCID.EXE is called to return PCI or cardbus adapter information; essentially any mode other than automatic driver loading mode '-L:x'. This file contains all of the Human Friendly information needed by PCID.EXE to decode PCI Manufacturer/Model/Revision Hex Codes into Manufacturer Names and Product Model Names that humans can understand. As mentioned before, this file is not used when PCID.EXE is in automatic driver loading mode '-L:x'.

NETDRVR.TXT
NETDRVR.TXT is a customizable data text file created and maintained by Steve Lindsey of Novell, Inc. as a subset of Craig Hart's PCIDEVS.TXT file. Please direct any questions or changes to this file to srlindsey@novell.com. All of the utilities PCID.EXE, NICLOAD.EXE, and LMNIC.EXE use this file to match PCI HardwareIDs to drivers.

Because this file is in text format you should be able to customize it to your liking by adding and updating new drivers. To do this we need to go over the proper formatting of the file. General rules for the file are that:
  • A ';' character preceding any line will remark the line causing the line not to be read in and parsed. Please note that all lines in this data file must have at least 1 character on a line. If you want to add a blank line for asthetics and ease of reading then please make sure a ';' character is at the beginning of the line. Not providing a ';' at the beginning of a blank line will cause an abnormal program termination.
  • A '/' character preceding any line defines the directory under the main NICDRVRS directory where the following driver definitions will be found. PCID.EXE, NICLOAD.EXE, and LMNIC.EXE will look in this directory to load the driver. Remember that all drivers listed after this declaration will be assumed to be in the directory.
  • A line that starts with an 8 digit Hex number is the driver definition line. This line is made up of 5 columns in the following order:
  • 1) PCI HardwareID (the 8 digit Hex Number)
    2) Novell 16-bit ODI driver
    3) Novell 32-bit LAN driver
    4) Microsoft LANMAN driver
    5) Human Name for driver

    Keep in mind that any driver entry made in the NETDRVR.TXT file should have a corresponding driver matching the correct client type in the /NICDRVRS/{manufacturer name}/{client type} directory (see the directory structure definition under the PCID.EXE section of this document).

    Other Files
    All other files on the PCID CD are support files for bootable CDROM support, RAMDisk, Memory Management, and DRDOS utilities that enhance the usability of the CD.

    Example Batch Files

    The following batch files illustrate how to use each of the utilities PCID.EXE, NICLOAD.EXE, and LMNIC.EXE

    Batch File Using PCID.EXE to Load Novell 16-bit Client

    The following batch file will automatically load the Novell 16-bit client using the PCID.EXE utility. Note that the process of loading the client is the same:

    • LSL
    • Driver (Now PCID.EXE -L:1)
    • IPXODI
    • VLM

    Instead of loading the driver though, you can put the 'PCID.EXE -L:1' in its place to have the NIC automatically detected and the correct ODI driver loaded.

    @echo off
    
    lsl
    
    PCID -L:1
    if ERRORLEVEL 1 goto PCIDFailure
    if ERRORLEVEL 0 goto PCIDSuccess
    goto end
    
    
    :PCIDSuccess
    echo.
    echo PCID was successful.
    
    ipxodi
    vlm
    
    goto end
    
    :PCIDFailure
    echo.
    echo PCID ended with a failure.
    goto end
    
    :end
    

    Batch File Using NICLOAD.EXE to Load Novell 16-bit Client

    The following batch file will automatically load the Novell 16-bit client using the NICLOAD.EXE utility. Note that the process of loading the client is the same:

    • LSL
    • Driver (now NICLOAD.EXE 1)
    • IPXODI
    • VLM

    Instead of loading the driver though, you can put the 'NICLOAD.EXE 1' in its place to have the NIC automatically detected and the correct ODI driver loaded.

    @echo off
    
    lsl
    
    NICLOAD 1
    if ERRORLEVEL 1 goto NICLOADFailure
    if ERRORLEVEL 0 goto NICLOADSuccess
    goto end
    
    
    :NICLOADSuccess
    echo.
    echo NICLOAD was successful.
    
    ipxodi
    vlm
    image.bat
    goto end
    
    :NICLOADFailure
    echo.
    echo NICLOAD ended with a failure.
    goto end
    
    :end
    

    Batch File Using PCID.EXE to Load Novell 32-bit Client

    The following batch file will automatically load the Novell 32-bit client using the PCID.EXE utility. Note that the process of loading the client is the same:

    • NIOS
    • load NBIC32.NLM
    • load LSLC32.NLM
    • load CMCM.NLM
    • load ETHERTSM.NLM
    • load Driver (now PCID.EXE -L:3)
    • load TCPIP.NLM
    • load TRANNTA.NLM
    • load SRVLOC.NLM
    • load CLIENT32.NLM

    Instead of loading the driver though, you can put the 'PCID.EXE -L:3' in its place to have the NIC automatically detected and the correct LAN driver loaded.

    @echo off
    
    NIOS.EXE 
    LOAD NBIC32.NLM
    LOAD LSLC32.NLM
    LOAD CMSM.NLM
    LOAD ETHERTSM.NLM
    
    PCID -L:3
    if ERRORLEVEL 1 goto PCIDFailure
    if ERRORLEVEL 0 goto PCIDSuccess
    goto end
    
    
    :PCIDSuccess
    echo.
    echo PCID was successful.
    
    wait 5
    LOAD TCPIP.NLM
    rem IPREAD.COM "IP Address:"
    LOAD TRANNTA.NLM
    LOAD SRVLOC.NLM
    wait 5
    LOAD CLIENT32.NLM
    
    goto end
    
    :PCIDFailure
    echo.
    echo PCID ended with a failure.
    goto end
    
    
    :end
    

    Batch File Using NICLOAD.EXE to Load Novell 32-bit Client

    The following batch file will automatically load the Novell 32-bit client using the NICLOAD.EXE utility. Note that the process of loading the client is the same:

    • NIOS
    • load NBIC32.NLM
    • load LSLC32.NLM
    • load CMCM.NLM
    • load ETHERTSM.NLM
    • load Driver (now NICLOAD.EXE 3)
    • load TCPIP.NLM
    • load TRANNTA.NLM
    • load SRVLOC.NLM
    • load CLIENT32.NLM

    Instead of loading the driver though, you can put the 'NICLOAD.EXE 3' in its place to have the NIC automatically detected and the correct LAN driver loaded.

    @echo off
    
    NIOS.EXE 
    LOAD NBIC32.NLM
    LOAD LSLC32.NLM
    LOAD CMSM.NLM
    LOAD ETHERTSM.NLM
    
    NICLOAD 3
    if ERRORLEVEL 1 goto NICLoadFailure
    if ERRORLEVEL 0 goto NICLoadSuccess
    goto end
    
    
    :NICLoadSuccess
    echo.
    echo NICLOAD was successful.
    
    wait 5
    LOAD TCPIP.NLM
    rem IPREAD.COM "IP Address:"
    LOAD TRANNTA.NLM
    LOAD SRVLOC.NLM
    wait 5
    LOAD CLIENT32.NLM
    
    goto end
    
    :NICLoadFailure
    echo.
    echo NICLOAD ended with a failure.
    goto end
    
    
    :end
    

    Batch File Using LMNIC.EXE to Load LANMAN Client

    The following batch file will automatically load the Microsoft LANMAN client using the LMNIC.EXE utility. Remember that you need to have a RAMDisk to make this work. XMSDSK is a great utility to accomplish this and can be downloaded for free from http://www.simtel.net/product.php?url_fb_product_page=4825. Also, take note that this example assumes that a compressed file (LMNIC.ZIP) contains all of the LANMAN client files, all NICDRVRS files in the correct directory structure and all PCID files (in this case LMNIC.EXE). The files are simply decompressed into the RAMDisk and then LMNIC.EXE is launched to modify the SYSTEM.INI and PROTOCOL.INI files. Modification of these files is actually done by reading in the SYSTEM.TMP file and writing out a new SYSTEM.INI file with the driver modification. The same goes for the PROTOCOL.TMP file becoming the PROTOCOL.INI file.

    @echo off
    %MyDrive%:\XMSDSK 3000 W: /t /y	<- Note that RAMDisk is created on drive W:
    if not exist w:\nul goto XMSERROR
    W:
    cls
    SET TZ=MST7MDT
    echo Decompressing Disk Image.  Please Wait ....
    %MyDrive%:\unzip -qq %MyDrive%:\lmnic   <- Note that the LANMAN client is compressed 
    path=%path%;w:\;w:\net;
    
    echo Starting MS Networking Services.  Please Wait ....
    cd net
    lmnic -d:%MyDrive%
    
    if ERRORLEVEL 1 goto LMNICFailure
    if ERRORLEVEL 0 goto LMNICSuccess
    goto end
    
    
    :LMNICSuccess
    echo.
    echo NICLOAD was successful.
    call startnet
    echo.
    echo MS Client Ready.
    echo Type NET USE {drive:} \\servername\share
    goto end
    
    :LMNICFailure
    echo.
    echo NICLOAD ended with a failure.
    goto end
    
    
    :XMSERROR
    echo.
    echo Unable to create RAM Disk in High Memory.
    echo Try limiting the available memory to less than 1 GB or switch
    echo to Install Mode in BIOS on applicable servers.
    goto end
    
    :end
    
    XMSDSK requires access to upper memory so you will need at least 
              himem.sys loaded to use it.
    

    The PCID CD At Your Service

    Novell has prepared a bootable CD with all of the PCID files and client support for all of the possible clients; Novell 16-bit and 32-bit clients and the Microsoft LANMAN client. The CD has been tested on a lot of desktop computers as well as server class computers. However, it is impossible to test all of the computers in the world. Therefore, it is left up to you to work out any bugs or incompatibilities found.

    You can create your own bootable CD by using any CD Writing software. A floppy boot image is included on the root of this CD named ANAL.IMA. This floppy boot image will:

    • boot the CD
    • load memory management (both UMB and XMS support)
    • load the CDROM drivers for DOS (both IDE and SCSI)
    • assign a drive letter of R: ~ V: to mount the CDROM to. The %MyDrive% environment variable is set with the drive letter of the CDROM for your reference.
    • release the EL Torrito virtual floppy support to relenquish the A: drive back to the floppy.
    • and then goto the CDROM drive letter and run STARTUP.BAT

    Therefore, you just need to make sure there is a STARTUP.BAT a the root of the CDROM drive. You can then do whatever you desire on the CD.

    Please feel free to modify this CD to your liking. Just make sure that you respect the Licenses and Copyright rules set forth by the owners and vendors of the files on this CD. Please read below.

    Credits, Disclaimers and Copyrights

    You may only use the PCID utility, and clients and drivers distributed with it ("Software"), if you accept the following terms. The Software may contain errors and is not supported by Novell or another licensor. Your use of the Software is at your own risk.

    This CD contains many Open Source and ShareWare utilities that are freely available on the Internet. Please respect the owners of these utilities by respecting the licensing and copyrights they have put forth. A list of these licenses and copyrights can be found in the "Documentation" directory of this CD.

    A special thanks to Craig Hart for his time and efforts in maintaining the PCIDEVS.TXT file which helps to answer the question "What is in this computer anyway?" Keep up the good work.

    All drivers and clients contained on this CD are distributed with permission by the respective Vendors. NOVELL AND ITS LICENSORS MAKES NO WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY, TITLE, NON-INFRINGEMENT, OR FITNESS FOR A PARTICULAR PURPOSE. NOVELL AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY LOSS OR DAMAGE ARISING FROM OR RELATED TO YOUR USE OF THE SOFTWARE.

    Download

    You can download this utility from here.


    Novell Cool Solutions (corporate web communities) are produced by WebWise Solutions. www.webwiseone.com

    © 2014 Novell