FreeDOS help system (hhstndrd 1.0.8 en)[ndis_ins]

Networking FreeDOS - NDIS driver



(Picture: Overview of the NDIS architecture) Drivers based on the "Network Driver Interface Specification" (NDIS) are the default in the Windows world. The most recent version is NDIS 6 which is used in Windows Vista. Windows 98 used NDIS 5, Windows 95 came with NDIS 3.1. In DOS you have to use the real-mode driver NDIS2.

Where to find them

It is most likely a NDIS driver exists for your network card. Look for a directory called "NDIS2" in your cards installation files. If you can't find a driver, take a look at this site (see: http:// (*01)). The ending of the driver name has to be *.DOS, so for instance the driver of the 3Com 3C574 PC-Card is called "EL3C574.DOS".

How they work

In the language of the NDIS architecture these drivers are called "Media Access Control" (MAC) drivers. The MAC driver is only one component of the NDIS architecture as you can see in the figure above. According to the NDIS 2.1 documentation (see: (*02)) NDIS seems to work like that: * Commands in FDCONFIG.SYS (FreeDOS) or CONFIG.SYS (other DOS) load the Protocol Manager driver PROTMAN.DOS, the MAC driver and the protocol driver. This can be done by lines for each of these drivers or by starting the "Installable File System Helper" driver, which is loaded by "DEVICEHIGH=IFSHLP.SYS" and starts the Protocol Manager, the MAC and the protocol drivers according to PROTOCOL.INI. * The Protocol Manager reads the configuration from PROTOCOL.INI and makes them available to the MAC driver and protocol driver which load after it. * The MAC driver and the protocol driver load and configure themselves according to that information. They identify themselves to the Protocol Manager. * Before MAC driver and protocol driver can communicate, they have to be bound together, so they can access each others "entry points" (communication ports). This bind process is controlled by the Protocol Manager based on information in PROTOCOL.INI. * The binding sequence can be triggered by NET.EXE or NETBIND.COM (which can be done in AUTOEXEC.BAT). * The Protocol Manager (PROTMAN.DOS) then starts the memory resident (Terminate and Stay Resident - TSR) program PROTMAN.EXE to execute the bind command and to control the correct ordering of drivers. * After binding has occurred, the MAC and the protocol driver communi- cate directly to each other. The Protocol Manager is not involved in this communication process any longer, so NETBIND.COM frees most of the memory previously reserved by the Protocol Manager. The configuration of NDIS under DOS has changed over time with different versions of the package. Some hints about the differences can be found here (see: (*03)). In this document, I am assuming that we use the NDIS files shipped with MS client 3.0. As this section is all about getting packet driver based TCP/IP appli- cations up and running with DOS we will not go into details about MS client here, this is already explained elsewhere.

Additional files needed

So how can we use the NDIS2 MAC driver that came with our network interface card for TCP/IP networking? As we have learned from the description above, we need some more files. These are: * The Protocol Manager ("PROTMAN.DOS" and "PROTMAN.EXE") * The bind utility ("NETBIND.COM") These files are part of the MS client 3.0 which can be downloaded here: (*04) (*05) The three files mentioned are part of "DSK3-1.EXE". Use the utility "EXPAND.EXE" included on the first disk to uncompress these files. * Copy DSK3-1.EXE to a directory like C:\MSCLIENT1. Avoid a long path if you do this in Windows. 16-bit software won't execute, if the path is too long. * Run DSK3-1.EXE to unpack its content. * Decompress PROTMAN.DO_ and PROTMAN.EX_. expand -r protman.do_ expand -r protman.ex_ * NETBIND.COM is already uncompressed. Now you can take and use the three files. Read the LICENSE.TXT file before you start using the files. The software is free for internal use. Neither the distribution nor a modification is allowed.

The converter/shim

The last piece we need is the "Packet Driver to NDIS Converter". Get the widely used "DIS_PKT9.DOS" (version 9, see: software/pc_network/ (*06)) or alternatively the slightly newer (version 11) "DIS_PKT.DOS"(see: (*07)). There are no differences in usage and handling. Both were written by Prof. Joe R. Doupnik (Utah State University) and Dan Lanciani (Harvard University). The copyright holds the now historic FTP Software, Inc., which luckily released this driver as public domain, free for use, distribution, change and with sourcecode.

Configuration of NDIS drivers

As I already mentioned, this is just a minimal installation of the MS client 3.0. The only purpose is to use packet-driver-based TCP/IP applications. For this purpose: Copy the four files PROTMAN.DOS PROTMAN.EXE NETBIND.COM DIS_PKT.DOS into a directory, for instance C:\NET. Copy also the MAC driver of your network interface card, for instance: EL3C574.DOS into this directory. Now we have to create the configuration file needed for the NDIS architecture: Create a file with the name PROTOCOL.INI inside the C:\NET directory. For our minimal configuration it just needs the following lines: --- PROTOCOL.INI --- [protman] DriverName=PROTMAN$ [EL3C574] DriverName=EL3C574$ [PKTDRV] drivername=PKTDRV$ bindings=EL3C574 intvec=0x60 chainvec=0x68 Explanation of the parameters: Like other *.ini files, PROTOCOL.INI is structured into section names in square brackets and item names with values assigned to them. [protman] DriverName=PROTMAN$ The first section [protman] defines the Protocol Manager. Like described above, the Protocol Manager is loaded as driver PROTMAN.DOS which is called "PROTMAN$" here. Section and line are mandatory. [EL3C574] DriverName=EL3C574$ The section [EL3C574] defines the network interface card. By default the section itself is named after the card - this is useful, if you have more than one network card and use different sections for different cards. So the section name is the first value to change here. It would be a good idea to name it after your own network card. But you may as well rename the section to "netcard", "NIC" or even "baked_beans" - whatever you like, as long as you also change all the other lines in PROTOCOL.INI that point to that section. The next line of this section is "DriverName=EL3C574$". It defines the driver for the network interface card. In our example this is EL3C574.DOS, which is called "EL3C574$" here. Most certainly you will use a different NIC than the one mentioned in the example. So you will have to change this line. You find the correct name of the driver in a text-file called "PROTOCOL.INI" that should be part of the NDIS driver files supplied with your card. It is also possible to add more lines to this section, so you can define special settings for your network card. Consult the "PROTOCOL.INI" supplied with your NDIS driver for more information. But in many cases the line with the drivername should be enough. [PKTDRV] drivername=PKTDRV$ bindings=EL3C574 intvec=0x60 chainvec=0x68 The next section "[PKTDRV]" defines our Packet Driver to NDIS Converter, which is "DIS_PKT.DOS" or "DIS_PKT9.DOS". Both are called by the name "PKTDRV$". It is important that the converter will bind to the driver of the network card. This is done by the next line "bindings=EL3C574". Please note that this name includes no "$" letter - it refers to the name of the section that defines the driver, not to the driver itself. So if you had called this section "[baked_beans]" as suggested above, you'd have to write "bindings=baked_beans" here ;-). The item "intvec" specifies the software interrupt vector used by the packet driver interface. As already explained, this should be the hexadecimal value 0x60 per default. The "chainvec" item also defines an available software interrupt. Its function is still a mystery to me. According to packet driver inventor (see: 17b6041f7a3cde7c?dmode=source (*08)) FTP, adding a chain vector interrupt may improve packet processing speed and reliability. Users saw "a 10-fold increase in performance" (see: group/comp.protocols.nfs/msg/9b0c2e0d6aa47b32?dmode=source (*09)). To avoid EMM386 errors, some recommend (see: group/bit.listserv.banyan-l/msg/aa961def5901f506?dmode=source (*10)) to set an interrupt that increases the vector by decimal 8. So if the intvec is 0x60 (that is decimal 96), then the chainvec should be decimal 104 (96+8) which is hexadecimal 0x68. This is also described (see: msg/64f2b6060ff2b438?dmode=source (*11)) by one of the authors of DIS_PKT.DOS, Dan Lanciani. Please write if you find out more. These are all settings in PROTOCOL.INI needed for our purpose. A last hint: If you consider changing some of these values at each boot, for instance by choices presented by a DOS boot menu, you may find Horst Schaeffer's freeware "Inifile" helpful (see: wbat32.htm (*12)).


The last thing left to do now is to load the drivers at boot. So change your system files to contain the following lines: --- FDCONFIG.SYS (FreeDOS) --- --- or CONFIG.SYS (MS DOS/other DOS) --- DEVICEHIGH=C:\NET\PROTMAN.DOS /I:C:\NET DEVICEHIGH=C:\NET\EL3C574.DOS DEVICEHIGH=C:\NET\DIS_PKT.DOS The "/I" parameter tells the Protocol Manager the location of PROTOCOL.INI. This is not needed if both are in the same directory. --- AUTOEXEC.BAT --- C:\NET\NETBIND.COM Note that NETBIND.COM can not be loaded high and should just be exe- cuted from AUTOEXEC.BAT. If you try to load it like a driver, it will abort with the message "run-time error R6009 - not enough space for environment".


That's all. Reboot the system and use a simple TCP/IP application like ping to test if everything is working. (Picture: Boot messages of NDIS) (*01) OK (*02) (*03) edu/pclt/WINWORLD/NDIS.HTM (*04) and: EXE (*05) and: EXE and: and: and: and: and: (*06) OK (*07) (*08)!topic/ networking.tcp-ip/Ekxg5Y5pP0g (*09)!original/comp.protocols. nfs/Xe1WnbPu0og/Mnukag0uDJsJ (*10)!original/bit.listserv. banyan-l/v6HiU41jovQ/BvUBWe8dlqoJ (*11)!original/comp.protocols .tcp-ip.ibmpc/-/OLTyDwa28mQJ (*12) ------------------------------------------------------------------------------ Copyright (C) 2007 Ulrich Hansen, Mainz (Germany), modified 2010 and 2020 by W.Spiegl. For more information see here. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation. A copy of the license is included in the section entitled "GNU Free Documentation License 1.2".