FTP Corporation was one of the first vendors to articulate a multi-protocol specification, which they called the Packet Driver (PD) spec. IBM, focussing on Token Ring network technology, developed a specification for their Adapter Support Interface (ASI) drivers (also referred to as the IBM LAN Support or DXMx0MOD "dixie-mod" drivers). The Network Driver Interface Specification (NDIS) was later developed by Microsoft and 3COM as an alternative to FTP's Packet Driver specification. Novell and Apple were the last players to join the multi-protocol driver arena with their Open Datalink Interface (ODI) spec.
Each of the different multi-protocol specifications has its strengths and weaknesses, depending on the communications protocols that need to be supported and the type of network interface card in use. In fact, it is likely that more than one specification will be needed to support the various protocols.
For Ethernet networks, ODI, PD, or NDIS drivers can be used. However, ODI drivers are generally superior because they can support the different Ethernet frame types needed for different communications protocols. NDIS and PD only support one frame type at a time. (An Ethernet frame is like an envelope containing data and unfortunately there are a number of possible types of envelopes in an Ethernet environment.) ASI drivers currently provide the best multi-protocol interface for Token Ring environments and the issue of different frame types is not as problematic as it is in an Ethernet environment.
This document will focus on three communications protocols -- Novell's Internet Packet Exchange/Sequenced Packet Exchange (IPX/SPX) protocols, the Transmission Control Protocol/Internet Protocol (TCP/IP) suite, and IBM's System Network Architecture (SNA) protocols -- and the network drivers that best support those protocols. Installation instructions for each of the four multi- protocol drivers will be given.
(IMPORTANT NOTE: The instructions indicate that a number of driver support files are obtainable from the University of Georgia's anonymous FTP server ftp.uga.edu. The TCP/IP host that is used to download these files MUST be registered in a domain name server. You will be denied anonymous access to ftp.uga.edu if your machine is not registered.)
Commercial DOS-based TCP/IP packages typically use either ODI drivers (Novell's LAN Workplace for DOS) or NDIS or PD implementations (FTP Software's PC/TCP product). These packages usually cost $200 or more per workstation. However, most of the public-domain or shareware TCP/IP applications -- such as Clarkson University's CUTCP Telnet/FTP package, the University of Minnesota's Gopher client, various Post Office Protocol (POP) e-mail clients, or the Trumpet News reader program (for accessing USENET News discussion groups) -- have been written to interface with Packet Drivers for Ethernet cards only. (In fact, there are no PDs that directly interface with Token Ring cards.)
Some Ethernet card manufacturers have implemented their own Packet Drivers. However, the majority of the PDs in existence today were written by individuals at a number of universities and managed by Russell Nelson at Clarkson University. (Russ "the Packet Driver King" has now formed his own company, CRYNWYR, INC., and he supports the public domain PDs for a nominal fee.)
In order to use the non-commercial TCP/IP packages (supporting Packet Drivers) with native ODI, NDIS, or ASI drivers, it is necessary to install a Packet Driver "shim" program to convert those native driver interfaces into a PD interface. The figure in Appendix 1 shows how the various driver and shim programs fit together to support the application programs.
For Ethernet users, the LAN Support package provides an NDIS-to-ASI shim, which means that there must be an NDIS driver available for the network card. If IPX/SPX or TCP/IP support is needed in addition to SNA communications, one must use ODI drivers to communicate directly with the network card and a pair of shim programs to support SNA applications. These configurations are discussed in the section titled "SNA Communications over Ethernet".
Most manufacturers provide diagnostic software which can usually detect hardware parameter conflicts. It is strongly recommended that these diagnostic tests be executed, ideally in an environment where the workstation is the only node on the network. After the network card has passed the diagnostic tests, the hardware parameters (usually obtained from the diagnostic program) can be used to configure the appropriate driver software.
In order to install a given Packet Driver, it is necessary to know the relevant hardware parameters for the network card. (Note: The file INSTALL.DOC in PACKET9S.ZIP describes the relevant parameters for all of the cards supported in the CRYNWYR collection and shows how each of the drivers is invoked.) One also needs to choose an unused DOS software interrupt vector, which is a location in memory that points to the Packet Driver program. Application programs communicate with the PD program through this software interrupt. The interrupt vector 0x60 is typically available and is recommended as a first choice. (Note: The 0x in front of the number 60 indicates that it is a hexadecimal number.) The figure in Appendix 2 shows how the Packet Driver interfaces with the network card and the PD application program.
As an example, suppose you want to communicate via IPX/SPX and TCP/IP and you have a Standard Microsystems (nee Western Digital) Ethernet card, which has a hardware interrupt of 0x7 (hex 7), an I/O port address of 0x280, and a shared RAM memory address of 0xD0000. To invoke the driver, you would add the line
If the Clarkson CUTCP package is utilized, you need to set certain parameters in a file called CONFIG.TEL in order to communicate with a Packet Driver. First, the line hardware=packet must appear in CONFIG.TEL. Second, it is recommended that the line ioaddr=0 be placed in CONFIG.TEL, which indicates that the CUTCP software will look for the first software interrupt vector used by a Packet Driver. (If necessary, one can hard code an interrupt vector number, without the 0x prefix, on the ioaddr= line. For example, ioaddr=60 corresponds to interrupt vector 0x60.) Finally, you may need to specify a packet class using the address= parameter. The default packet class is 0 (Ethernet Version 2), but class 11 (IEEE 802.3 Ethernet) can also be specified.
A text file called NET.CFG provides all of the configuration information needed by the various ODI support programs. NET.CFG is divided into sections with each section delineated by a section header line starting in column one. Subsequent lines in the section, containing relevant configuration information, start in columns two or higher. All of the text is case-insensitive. Appendix 4 gives a sample NET.CFG for an Ethernet card from Standard Microsystems Corporation.
Each MLID program requires a section titled "Link Driver XXX" where XXX is the "internal" name of the MLID. (Note: This internal name may be different than the name given to the MLID executable (COM) file. See manufacturer's installation instructions for the correct name.) The remaining lines in the section specify the hardware parameters required by the MLID for proper communication with the network card. They may also indicate the frame types needed by the various communications protocols. A "virtual" board is created for each frame type specified in NET.CFG. (Note: IPX/SPX communications on the UGA campus uses Ethernet 802.3 frames and standard Token Ring frames. Ethernet Version II frames and Token Ring SNAP frames are needed for TCP/IP communications.) Another of the NET.CFG sections is titled "Link Support" and it contains parameters that are used by LSL.COM such as the number and size of communications buffers. A section titled "Protocol PPP" may also be needed to associate communications protocol PPP with a given MLID. This section minimally contains the line:
In order to support TCP/IP applications that communicate through a Packet Driver interface, it is necessary to use an ODI-to-PD shim program. The public domain program ODIPKT.COM, written by Dan Lanciani at Harvard University, provides the shim function. To invoke ODIPKT.COM, add the following to an appropriate batch file:
The following sample lines need to be added to a batch file to invoke ODI drivers (for an SMC Ethernet card) supporting IPX/SPX and PD-based TCP/IP communications:
The text file PROTOCOL.INI contains the configuration information needed for the NDIS card driver as well as the NDIS applications that communicate with that driver. PROTOCOL.INI is divided up into sections with each section starting with a title surrounded by square brackets []. Lines containing relevant keyword parameters follow the section title line and each section is separated by a blank line. A sample PROTOCOL.INI file for an SMC Ethernet card is shown in Appendix 5.
One of the required sections is titled [PROTOCOL_MANAGER]; the title line has a single line following it which contains the keyword DriverName=PROTMAN$. This corresponds to the program PROTMAN.EXE which facilitates the exchange of configuration information between the NDIS driver and the NDIS application driver. The figure in Appendix 6 shows how PROTMAN.EXE interfaces with the NDIS driver and the application program.
For every NDIS driver there must be a section dealing with the hardware parameters for the card. The hardware parameters include the IRQ number, the shared RAM address, the I/O port address, etc. Other NDIS parameters may involve the number of receive buffers and their size. One critical line in the NDIS driver section is the DriverName=NNN$ keyword where NNN.DOS is the name of the NDIS driver. The title of the NDIS driver section is used in a Bindings= line, which must be specified in every NDIS application section that uses the driver.
To support both IPX/SPX and PD-based TCP/IP packages, an NDIS-to-PD shim program must be loaded. This program, called DIS_PKT9.DOS, was written by Joe Doupnik at Utah State University. The section titled [PKTDRV] in the sample PROTOCOL.INI file (in Appendix 5) shows the relevant keywords needed to support the shim program. The INTVEC=0x60 keyword specifies the software interrupt vector 0x60 and the Bindings=SMCMAC binds the SMC NDIS driver to the PD shim application. (Note: See the last paragraph in the PD installation section for a discussion of Clarkson's CUTCP package and PD support.)
The following sample lines need to be added to CONFIG.SYS to load an SMC NDIS driver:
The NETBIND.EXE program must also be invoked in a batch file to bind the NDIS applications and NDIS driver together. This process is facilitated by PROTMAN.EXE, which is not involved in the driver- to-application communication after binding has occurred. Assuming that one wants to support IPX/SPX communications, the following sample lines need to be added to an appropriate batch file:
DXMA0MOD.SYS must be loaded first and it is required for the other DXM drivers. DXMC0MOD.SYS is the driver that actually communicates with the Token Ring card. DXMT0MOD.SYS is normally used for NETBIOS communications and it is required for PD-based TCP/IP support drivers. The following four lines must be added to CONFIG.SYS to load the dixie-mod drivers:
IBMTOKEN.COM is a shim program that converts the ASI interface to a PD interface. In fact, it emulates an Ethernet card supporting Ethernet Version II frames. To invoke this ASI-to-PD shim program, place the line
To support IPX/SPX communications, an IPX program (IPXASI.COM) that communicates with the LAN Support ASI interface is needed. Because IBMTOKEN.COM insists on opening the Token Ring adapter first, one must use IPXASI.COM driver v2.60, since later versions of IPXLSP.COM also want to be the only programs to open the adapter. The following sample lines can be placed in an appropriate batch file to support IPX/SPX and PD-based TCP/IP communications:
With regard to SNA support, commercial 3270 packages such as Attachmate Extra! for DOS and Attachmate Extra! for Windows communicate through IBM's ASI interface. The DLC DFT option in these packages must be specified when configuring them for Token Ring networks attached to the campus backbone through an IBM 8209 Token Ring to Ethernet bridge.
The installation procedure for this configuration is a combination of the procedures for NDIS and ASI installations. The following lines must be placed in CONFIG.SYS to set up the combined ASI and NDIS drivers:
If IPX/SPX or TCP/IP support is needed in addition to SNA communications, one must use ODI drivers to communicate directly with the network card and a pair of shim programs to support SNA applications. The combination of network drivers on top of ODI is depicted in the figure located in Appendix 10. MLID drivers speak directly to the network card, providing the support for IPX/SPX protocols. (Note: You must have an MLID driver that is linked with Ethernet MSM Module v1.20 or later for this configuration to work.) An ODI-to-NDIS shim program (ODINSUP.COM), written by Novell, provides an intermediate link to the NDIS-to-ASI interface driver (DXME0MOD.SYS) which supports SNA applications. Only TCP/IP applications that directly interface with ODI drivers can be used in this complicated environment.
A section needs to be added to the NET.CFG file to support ODINSUP.COM and the Bindings= keyword in the DXME0MOD.SYS section of PROTOCOL.INI must contain the name of the ODI MLID rather than the section name for the NDIS driver. Appendix 11 provides sample NET.CFG and PROTOCOL.INI files for an SMC Ethernet card.
The CONFIG.SYS lines are essentially the same as shown above for NDIS drivers with the ndis_driver.DOS line removed (ODINSUP.COM takes the place of the direct NDIS driver), e.g.
To support other network cards, one needs to replace the SMCPLUS MLID listed above with the appropriate MLID from the card manufacturer. One also needs to change the sample NET.CFG and PROTOCOL.INI files listed in Appendix 11 to reflect the card in use. (Note: LSL.COM, ODIPKT.COM, ODINSUP.COM, IPXODI.COM, NETX.COM, and sample NET.CFG files can be found in on FTP UGA and PROTMAN.EXE, NETBIND.EXE, DIS_PKT9.ZIP, and sample PROTOCOL.INI files are there as well.)
As far as SNA 3270 support is concerned, AttachMate Extra! Extended for DOS V2.30 (or higher) or AttachMate Extra! for Windows V3.30 must be used. Other 3270 communications products have not been tested and may or may not function in an Ethernet environment. The DLC DFT option in these packages must be specified when configuring them for Ethernet networks attached to the campus backbone.
Whenever possible, it is desirable to utilize memory management software -- such as Quarterdeck's QEMM/QRAM or memory managers supplied by MS-DOS 5.0 or DR-DOS 6.0 -- to load network drivers into high-memory regions above the 640K barrier. In a pinch, it may be possible to unload the network drivers from memory (especially ODI drivers).
Packet Driver Shim Diagram
******************
* Packet Driver *
* Application *
******************
+
+
+
******************
* ODI-, ASI-, or *
* NDIS-to-PD *
* Shim *
******************
+
+
+
****************
* ODI, ASI, or *
* NDIS Driver *
****************
+
+
+
****************
* Network Card *
****************
||||||||
Packet Driver Diagram
***************
************** * PD-Based *
* IPXPD.COM * * TCP/IP *
* Program * * Application *
************** ***************
+ +
+ +
++++++++++++++++++++++
+
+
**********
* Packet *
* Driver *
**********
+
+
*****************
* Ethernet Card *
*****************
||||||||
ODI Driver Diagram
***************
************ * PD-Based *
* NETX.COM * * TCP/IP *
* Program * * Application *
************ ***************
+ +
+ +
+ **************
************** * ODIPKT.COM *
* IPXODI.COM * * ODI-to-PD *
* Program * * Shim *
************** **************
+ +
+ +
+++++++++++++++++++++
+
+
***********
* LSL.COM *
* Program *
***********
+
+
**********
* MLID *
* Driver *
**********
+
+
*****************
* Ethernet Card *
*****************
||||||||
#---------------------------------------------------------------------#
# #
# Sample NET.CFG File #
# for an SMC Ethernet MLID Driver #
# #
#---------------------------------------------------------------------#
#---------------------------------------------------------------------#
# #
# Link Support Layer (LSL.COM) Section #
# #
#---------------------------------------------------------------------#
Link Support
Buffers 6 1514 # 6 Communications buffers, size 1514
MemPool 2048 # Used by some ODI applications
#---------------------------------------------------------------------#
# #
# IPX Protocol Section #
# #
#---------------------------------------------------------------------#
Protocol IPX
Bind SMCPLUS # Binding IPX to first SMC MLID board
#---------------------------------------------------------------------#
# #
# SMCPLUS MLID Section #
# #
#---------------------------------------------------------------------#
Link Driver SMCPLUS
Int 5 # Hardware IRQ number
Port 240 20 # I/O Port Address
Mem 000D0000 2000/10 # Shared RAM Memory Address
Frame Ethernet_802.3 # IPX Frame Type
Frame Ethernet_II # TCP/IP Frame Type
;-----------------------------------------------------------------------;
; ;
; Sample PROTOCOL.INI File ;
; for an SMC Ethernet NDIS Driver ;
; ;
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
; ;
; Protocol Manager Section ;
; ;
;-----------------------------------------------------------------------;
[PROTOCOL_MANAGER]
DriverName=PROTMAN$ ; The PROTMAN.EXE program
;-----------------------------------------------------------------------;
; ;
; Standard Microsystems Network Adapter Section ;
; ;
;-----------------------------------------------------------------------;
[SMCMAC]
DriverName=SMCMAC$ ; SMC NDIS Driver
IRQ=5 ; Hardware IRQ Number
RamAddress=0xB400 ; Shared RAM Memory Address
IOBase=0x240 ; I/O Port Address
ReceiveBuffers=16
ReceiveChains=16
MaxRequests=10
MaxTransmits=10
ReceiveBufSize=1514 ; Receive Buffer Size (1514 bytes)
;-----------------------------------------------------------------------;
; ;
; Packet Driver Shim Section ;
; ;
;-----------------------------------------------------------------------;
[PKTDRV]
DriverName=PKTDRV$ ; Joe Doupnik's DIS_PKT9.DOS shim
Bindings=SMCMAC ; NDIS Driver (section title)
INTVEC=0x60 ; Software Interrupt Vector for PD
CHAINVEC=0x61 ; ?
Novell=Y ; Needed for IPX (802.3) support
NDIS Driver Diagram
***************
############### ************ * PD-Based *
# NDIS # * NETX.COM * * TCP/IP *
# Application # * Program * * Application *
############### ************ ***************
+ + +
+ + +
+ ************* +
+ * IPXPD.COM * +
+ * Program * +
+ ************* +
+ + +
+ + +
+ +++++++++++++++++++++++
+ +
############### +
# NDIS # ****************
# Application # * DIS_PKT9.SYS *
# Driver # * Driver *
############### ****************
+ +
+ +
++++++++++++++++++++++++++++++++
+
+
***************
* PROTMAN.EXE *
* Program *
***************
+
+
**********
* NDIS *
* Driver *
**********
+
+
*****************
* Ethernet Card *
*****************
||||||||
ASI Driver Diagram
***************
*************** ************ * PD-Based *
* SNA 3270 * * NETX.COM * * TCP/IP *
* Application * * Program * * Application *
*************** ************ ***************
+ + +
+ + +
+ + ****************
+ ************** * IBMTOKEN.COM *
+ * IPXASI.COM * * ASI-to-PD *
+ * Program * * Shim *
+ ************** ****************
+ + +
+ + +
++++++++++++++++++++++++++++++++++++++++++
+
+
*************
* ASI *
* Dixie-mod *
* Drivers *
*************
+
+
**************
* Token Ring *
* Card *
**************
||||||||
NDIS & ASI Diagram
***************
* SNA 3270 *
* Application *
***************
+
+
****************
* DXME0MOD.SYS *
* NDIS-to-ASI *
* Shim *
****************
+
+
***************
* PROTMAN.EXE *
* Program *
***************
+
+
**********
* NDIS *
* Driver *
**********
+
+
*****************
* Ethernet Card *
*****************
||||||||
;-----------------------------------------------------------------------;
; ;
; Sample PROTOCOL.INI File ;
; for an SMC Ethernet NDIS Driver ;
; with IBM's ASI Support ;
; ;
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
; ;
; Protocol Manager Section ;
; ;
;-----------------------------------------------------------------------;
[PROTOCOL_MANAGER]
DriverName=PROTMAN$ ; The PROTMAN.EXE program
;-----------------------------------------------------------------------;
; ;
; IBM ETHERAND (DXME0MOD.SYS) Section ;
; ;
;-----------------------------------------------------------------------;
[ETHERAND]
DriverName=DXME0$ ; The DXME0MOD.SYS driver
Bindings=SMCMAC ; The NDIS driver section title
;-----------------------------------------------------------------------;
; ;
; Standard Microsystems Network Adapter Section ;
; ;
;-----------------------------------------------------------------------;
[SMCMAC]
DriverName=SMCMAC$ ; SMC NDIS Driver
IRQ=5 ; Hardware IRQ Number
RamAddress=0xB400 ; Shared RAM Memory Address
IOBase=0x240 ; I/O Port Address
ReceiveBuffers=16
ReceiveChains=16
MaxRequests=10
MaxTransmits=10
ReceiveBufSize=1514 ; Receive Buffer Size (1514 bytes)
ODI, NDIS, & ASI Diagram
***************
************ *************** * ODI-Based *
* NETX.COM * * SNA 3270 * * TCP/IP *
* Program * * Application * * Application *
************ *************** ***************
+ + +
+ + +
************** + +
* IPXODI.COM * + +
* Program * + +
************** + +
+ + +
+ **************** +
+ * DXME0MOD.SYS * +
+ * NDIS-to-ASI * +
+ * Shim * +
+ **************** +
+ + +
+ + +
+ *************** +
+ * PROTMAN.EXE * +
+ * Program * +
+ *************** +
+ + +
+ + +
+ *************** +
+ * ODINSUP.COM * +
+ * ODI-to-NDIS * +
+ * Shim * +
+ *************** +
+ + +
++++++++++++++++++++++++++++++++++++++++++++++++++++
+
***********
* LSL.COM *
* Program *
***********
+
+
**********
* MLID *
* Driver *
**********
+
+
*****************
* Ethernet Card *
*****************
||||||||
#---------------------------------------------------------------------#
# #
# Sample NET.CFG File #
# for an SMC Ethernet MLID Driver #
# with IBM's ASI Support #
# #
#---------------------------------------------------------------------#
#---------------------------------------------------------------------#
# #
# Link Support Layer (LSL.COM) Section #
# #
#---------------------------------------------------------------------#
Link Support
Buffers 6 1514 # 6 Communications buffers, size 1514
MemPool 2048 # Used by some ODI applications
#---------------------------------------------------------------------#
# #
# ODI-to-NDIS Shim Section #
# #
#---------------------------------------------------------------------#
Protocol ODINSUP
Bind SMCPLUS # Binding ODINSUP to SMC MLID board
#---------------------------------------------------------------------#
# #
# IPX Protocol Section #
# #
#---------------------------------------------------------------------#
Protocol IPX
Bind SMCPLUS # Binding IPX to first SMC MLID board
#---------------------------------------------------------------------#
# #
# SMCPLUS MLID Section #
# #
#---------------------------------------------------------------------#
Link Driver SMCPLUS
Int 5 # Hardware IRQ number
Port 240 20 # I/O Port Address
Mem 000D0000 2000/10 # Shared RAM Memory Address
Frame Ethernet_802.3 # IPX Frame Type
Frame Ethernet_II # TCP/IP Frame Type
Frame Ethernet_SNAP # Needed by ODINSUP
Frame Ethernet_802.2 # Needed by ODINSUP
;-----------------------------------------------------------------------;
; ;
; Sample PROTOCOL.INI File ;
; for Novell's ODI-to-NDIS Driver ;
; with IBM's ASI Support ;
; ;
;-----------------------------------------------------------------------;
;-----------------------------------------------------------------------;
; ;
; Protocol Manager Section ;
; ;
;-----------------------------------------------------------------------;
[PROTOCOL_MANAGER]
DriverName=PROTMAN$ ; The PROTMAN.EXE program
;-----------------------------------------------------------------------;
; ;
; IBM ETHERAND (DXME0MOD.SYS) Section ;
; ;
;-----------------------------------------------------------------------;
[ETHERAND]
DriverName=DXME0$ ; The DXME0MOD.SYS driver
Bindings=SMCPLUS ; The SMCPLUS MLID driver name
Approximate Driver Memory Utilization
for an SMC Ethernet Card
(in bytes)
Without IPX/SPX With IPX/SPX
Drivers and NETX Loaded and NETX Loaded
------- --------------- ---------------
Packet Driver 3,776 63,184
ODI + PD Shim Drivers 29,248 88,016
NDIS + PD Shim Drivers 40,512 99,920
ASI + PD Shim Drivers 47,888 109,872
NDIS + ASI Shim Drivers 131,632 n/a
ODI + NDIS Shim + ASI Shim Drivers 124,544 183,312
(Note: The actual memory utilized by your drivers depends on the network card
you are using. Add 2,576 bytes to the first four rows of numbers for Windows
[WINPKT.COM] support.)