IMPORTANT NOTE: This is a demo & test version of ndis3pkt 2.9. It is restricted to sending 75/receiving 200 packets per boot. New features of ndis3pkt 2.x: 2.9: -Better connection tracking when multiplexor is turned off 2.8: -Virtual intermediate mode is now independent of multiplexor -Multiplexor picks up connections that were made while it was off 2.7: -Experimental ring-0 interface 2.6: -ME compatibility 2.5: -A Win32 API NDIS intermediate driver mode 2.4: -Windows98SE compatibility -LRU tcp multiplexor session management (table-full warning now once-only) 2.3: (not released) 2.2: -Windows98 compatibility BEWARE: Windows98 support involved a change in the internal driver name. Therefore, you must completely uninstall (this should include deleting ndis3pkt.inf from the WINDOWS/INF directory) and re-install when switching between 2.2 and any earlier version. 2.1: -A Win32 API for direct application access to raw packets 2.0: -Support for the dialup adapter with or without MSTCP -Support for IP address multiplexing with MSTCP -Better integration with OSR2 Plug & Play -Better support for power system suspend (power management) Refer to ORDER.TXT in ndis3pk2.zip for information on obtaining a full version of ndis3pkt 2.9. NDIS3PKT 2.9 demo (c) Copyright Daniel D. Lanciani 1994-2003 All rights reserved. This demonstration version of NDIS3PKT is licensed exclusively for testing and evaluation purposes. NDIS3PKT may not be distributed for profit, nor may it be included in products or otherwise distributed by commercial entities to their clients or customers without the prior written permission of the author. TO THE EXTENT ALLOWED BY APPLICABLE LAW, NDIS3PKT IS PROVIDED "AS IS", WITH NO EXPRESS OR IMPLIED WARRANTY, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL THE AUTHOR BE LIABLE FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE NDIS3PKT EVEN IF THE AUTHOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. These copyright, license, and disclaimer notices must be included with all copies of NDIS3PKT. Ndis3pkt.386 is a Windows VxD (Virtual Device) which provides a packet driver interface on top of NDIS version 3.0 or 3.1. It allows packet driver applications to be used under WfWG 3.11 and Windows9x without loading any real-mode software components. Ndis3pkt performs all the VM (virtual machine) switching required to insure that the correct application receives packet upcalls, i.e., it includes the functionality of winpkt. (The WINPKT signature is also provided for applications which check specifically.) In addition, ndis3pkt is willing to deliver the same packet type (and even the same packet) to multiple clients in multiple VMs. A tcp multiplexor option allows several tcp stacks to exist on the same IP address under most conditions. Although it is now possible to share the same IP address between MSTCP and one or more packet driver tcp/ip stacks, this activity adds some per-packet overhead. An option is therefore provided to disable the MSTCP portion of the multiplexor. With mstcpmux set to false, you must allocate a separate IP address for MSTCP. (The packet driver tcp stacks can all share one other IP address.) With a LAN connection, the choice of using two IP addresses is largely a performance vs. administrative tradeoff. For dialup connections, it is usually impractical to allocate a second IP address to the port, so mstcpmux must generally be left enabled. Ndis3pkt attempts to minimize the load on Windows by keeping at most a single VM callback pending at any time. This implies that a stalled VM for which a callback is pending may prevent packet reception. The driver tries to avoid such a situation by refraining from delivering packets to applications in VMs which are suspended; however, it may be possible to fool the code by suspending a VM at the wrong moment. In such a case, resuming the VM in question will restart packet reception. There are two ways to install ndis3pkt. Manual installation is possible with WfWG 3.11 and Windows9x. Plug-and-Play installation is possible only with Windows9x. Manual Installation: First, be certain that NDIS3 is loaded and running. In system.ini, load ndis3pkt.386 from the [386Enh] section: device=ndis3pkt.386 Add a new section to system.ini: [ndis3pkt] netcard0=ms$elnkii where ms$elnkii should be replaced with the name of your local network adapter card. (A good place to find this name is the BINDINGS= line of the [NETBEUI] section of the protocol.ini file--assuming netbeui is installed.) Windows9x generally uses simple numberic names for NDIS3 even if symbolic names are used in protocol.ini: netcard0=0000 You can also specify the null string: netcard0= This reserves the packet driver interrupt slot for the specified card but does not bind to the card at startup. Late binding is used to support Plug-and-Play under Windows9x and will not work without the Plug-and-Play installation described below. Additional options for [ndis3pkt] section (none required): buffers=# Allocate # buffers for packets (max 50, min 2, default 10). v86stacksize=# Set size of stack used on packet driver upcall (max 8192, min 64, default 128). rif0=# Set first default RIF byte for Ethernet over Token Ring (default 0xc2). rif1=# Set second default RIF byte for Ethernet over Token Ring (default 0x20). alwayssched=true|false Force schedule (not call) of initial VM on packet receive (default true). tcpmux=true|false Enable tcp multiplexor (default true). mstcpmux=true|false Enable additional tcp multiplexor for MSTCP if tcpmux is enabled (default true). warnmuxfull=true|false Issue warning when tcp multiplexor table fills the first time (default true). ignorelocalbroadcast=true|false Ignore broadcast packets that originate in the local machine (default true). intvec0=# Specify packet service interrupt (default 0x69). net80230=true|false Force 802.3 framing and packet class 11 (default false). IT IS EXTREMELY UNLIKELY THAT YOU WANT TO USE THIS OPTION. fakeether0=true|false Pretend to be an Ethernet device even on Token Ring (default false). (It is possible to support more than one network card using additional keys, e.g., netcard1=, intvec1=, net80231=, fakeether1=, etc. The default interrupt vectors continue from 0x6a.) No further configuration should be necessary. Once the driver is loaded, packet driver applications should be usable from DOS boxes and the system VM. Plug-and-Play Installation (Windows9x only): Place ndis3pkt.386, ndis3pkt.inf, and ndis3ndi.dll in a directory or on a floppy disk. From the network control panel, select add-protocol and indicate that you have a driver disk (the disk/directory with the ndis3pkt files). The network device installer should: -Add necessary registry entries -Copy ndis3pkt files to the appropriate Windows directories -Add an [ndis3pkt] section to system.ini with a netcard0= line If you have multiple network interface cards, be sure to examine their bindings under ``properties'' to be sure only the one you want is attached to ndis3pkt. When Windows is restarted, the packet driver interface should be available. The name of the network card is supplied by the configuration manager and there is no need to edit the netcard0= line in system.ini. Other ndis3pkt settings can be configured from the network control panel under the Advanced tab of the properties dialog. ------------------------------------------------------------------------------ Notes on the dialup adapter: -The tcp/ip header compression option of the dialup adapter seems to corrupt some transmissions from packet driver applications. If you notice slow response, try disabling this option in the tcp/ip properties of your dialup host configuration. -There have been some questions about setting the IP address for packet driver applications when that address is determined dynamically by the dialup adapter. If your server supports an open protocol like bootp/DHCP then your application can use that protocol through ndis3pkt to obtain the dynamic IP address. If not then you must configure the address manually. There should be a way to make address assignment automatic (after all, Microsoft's tcp/ip stack gets the information), but Microsoft does not follow its own NDIS documentation in this respect. Instead they use what they refer to as a "totally undoced" API so third-party products cannot fully support the dialup adapter. If anyone has any useful information on this subject I would be interested in seeing it. I've used up a priority support incident with Microsoft only to be told that I'm not allowed to write a "WAN aware" protocol. ------------------------------------------------------------------------------ Starting with version 2.1, ndis3pkt provides a Win32 DeviceIoControl API to support direct packet access by 32-bit applications. Sample functions for calling the API are provided in the file ndis3api.c. The API is *not* compatible with WfWG 3.11's Win32s sub-system. ------------------------------------------------------------------------------ Starting with version 2.5, ndis3pkt provides a Win32 API for implementing user-mode intermediate drivers. Refer to WIN32IM.TXT for more information. ------------------------------------------------------------------------------ Please send bug reports to ddl@danlan.com or Dan Lanciani 185 Atlantic Road Gloucester, MA 01930 (978) 283-4974 Fax: (978) 281-7191