Networking FreeDOS - NDIS driver installation

Overview

    (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://
  drivesnapshot.de/en/makebootdisk.htm). 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: http://www.ndis.com/faq/ndis201.txt) 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 him.
    * The MAC driver and the protocol driver load and configure themselve
      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: http://www.yale.edu/pclt/WINWORLD/NDIS.HTM). 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:
    ftp://ftp.microsoft.com/bussys/Clients/MSCLIENT/DSK3-1.EXE
    ftp://ftp.microsoft.com/bussys/Clients/MSCLIENT/DSK3-2.EXE
  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: ftp://ftp.cc.umanitoba.ca/
  software/pc_network/dis_pkt9.zip) or alternatively the slightly newer
  (version 11) "DIS_PKT.DOS"(see: http://danlan.com/pdr_shim/odipkt/
  odipkt.zip). 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: http://groups.google.de/group/comp.protocols.tcp-ip.ibmpc/msg/
  17b6041f7a3cde7c?dmode=source) FTP, adding a chain vector interrupt may
  improve packet processing speed and reliability. Users saw "a 10-fold
  increase in performance" (see: http://groups.google.de/group/
  comp.protocols.nfs/msg/9b0c2e0d6aa47b32?dmode=source). To avoid EMM386
  errors, some recommend (see: http://groups.google.de/group/
  bit.listserv.banyan-l/msg/aa961def5901f506?dmode=source) 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: http://
  groups.google.de/group/comp.protocols.tcp-ip.ibmpc/msg/
  64f2b6060ff2b438?dmode=source) 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: http://www.horstmuc.de/
  wbat32.htm).

Installation

  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".

Reboot

  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)

  Copyright © 2007 Ulrich Hansen, Mainz (Germany), modified 2010
  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.1 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"