Installation instructions for the packet driver collection Document conventions All numbers in this document are given in C-style representation. Decimal is expressed as 11, hexadecimal is expressed as 0x0B, octal is expressed as 013. All reference to network hardware addresses (source, destination and multicast) and demultiplexing information for the packet headers assumes they are represented as they would be in a MAC-level packet header being passed to the send_pkt() function. Using the packet drivers The packet driver must be installed prior to use. Since each packet driver takes only a few thousand bytes, this is best done in your autoexec.bat. Since the Ethernet boards typically have jumpers on board, the packet driver must be informed of the values of these jumpers (auto-configure is possible, but can disturb other boards). The first parameter is the software interrupt used to communicate with the packet driver. And again, because each board is different, the rest of the parameters will be different. All parameters must be specified in C-style representation. Decimal is expressed as 11, hexadecimal is expressed as 0x0B, octal is expressed as 013. Any numbers that the packet driver prints will be in the same notation. Before installing the packet driver, you must choose a software interrupt number in the range between 0x60 and 0x80. Some of these interrupts are used for other purposes, so your first choice may not work. See Appendix A for the section of Ralf Brown's interrupt list between 0x60 and 0x80. Running a packet driver with no specifications will give a usage message. The parameters for each packet driver are documented below. The -n option is used to convert IPX packets between the Ethernet II type 8137 encapsulation used by BYU's PDSHELL IPX interface code and the 802.3-style encapsulation normally used on Ethernet by Netware servers, shells and boot PROMs. It will also convert incoming type 8137 packets to type 8138 so that Netware doesn't get confused. The -d option is used to delay the initialization of the Ethernet card until the packet driver is used for the first time. See PROMBOOT.NOT for how to use -d and -n in a PROM boot environment. The -w switch is used for Windows. Install the packet driver before running MS-Windows. This switch does not prevent Windows from swapping your network application out of memory, it simply detects when that has happened, and drops the packets on the floor. 3Com 3C501 usage: 3C501 [-n] [-d] [-w] packet_int_no [int_no [io_addr]] The 3c501 driver requires two additional parameters -- the hardware interrupt number and the I/O address. The defaults are 3 and 0x300. 3Com 3C503 usage: 3C503 [-n] [-d] [-w] packet_int_no [int_level(2-5) [io_addr [cable_type]]] The 3c503 driver requires three additional parameters -- the hardware interrupt number, the I/O address, and the cable type. The 3c503 can be attached to thick or thin Ethernet cables, and the selection is made in software. The cable type parameter should be zero for thick, and one for thin. The defaults are 2, 0x300, and 1 (thin). The 3c503 uses shared memory whose address is set by jumpers, but the software can ask the board what the address is. 3Com 3c505 usage: 3c505 [-n] [-d] [-w] packet_int_no [int_no [io_addr [base_addr]]] The 3c505 driver requires three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. The defaults are 2 and 0x300 and 0xd000. 3Com 3c507 usage: 3c507 [-n] [-d] [-w] packet_int_no [int_no [io_addr [base_addr]]] The 3c507 will determine its parameters by reading the board. The only time you would need to specify the parameters is when you have multiple 3c507s in the same machine. The 3c507 driver will use three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. 3Com 3c523 usage: 3c523 [-n] [-d] [-w] packet_int_no [int_no [io_addr [base_addr]]] The 3c523 driver requires three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. The defaults are 3 and 0x300 and 0xc000. ARCNET usage: arcnet [-n] [-d] [-w] packet_int_no [int_no [io_addr [base_addr]]] The ARCNET driver requires three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. The defaults are 5 and 0x2e0 and 0xd800. Note that a packet driver client must specifically support ARCNET. The only known client is Phil Karn's (KA9Q) networking package, NOS. AT&T usage: at&t [-n] [-d] [-w] packet_int_no [int_no [io_addr [base_addr]]] The AT&T driver requires three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. The defaults are 2 and 0x360 and 0xd000. This driver supports the StarLAN 1, StarLAN 10 NAU, EN100 and StarLAN Fiber NAU. D-Link DE-600 usage: de600 [-n] [-d] [-w] packet_int_no The D-Link Pocket Lan Adapter packet driver requires no additional parameters. Digital Equipment Corporation DEPCA usage: depca [-n] [-d] [-w] [ [ []]] The DEPCA packet driver requires three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. The defaults are 5 and 0x300 and 0xd000. The packet driver will resolve the io_addr automatically if io_addr is set to '?', e.g. depca 0x7e 5 ? 0xd000. Mitel Express usage: express [-n] [-d] [-w] [-n] [ []] The Mitel Express packet driver has one optional switch, and two optional parameters. The defaults to SLIP, and the defaults to 7. The -n switch instructs card to be an NT. The should be SLIP or a number. HP EtherTwist/Starlan10/ThinLan usage: hppclan [-n] [-d] [-w] packet_int_no [int_no [io_addr]] The hppclan driver supports 8 and 16 bit HP LAN cards based on the National 8390 chip. Earlier HP LAN cards should use the 3Com 3C501 driver. The hppclan driver requires two additional parameters -- the hardware interrupt number and the I/O address. The defaults are 3 and 0x300. On IBM PS/2 Microchannel machines, the defaults are read from the PS/2 configuration NOVRAM and additional parameters are not normally required. IBM Token Ring usage: ibmtoken [-n] [-d] [-w] packet_int_no [adapter_no] The IBM Token Ring packet driver requires one additional parameters -- the adapter number. The default is zero. See IBMTOKEN.DOC for more information. LocalTalk usage: localtlk [-n] [-d] [-w] [] The LocalTalk packet driver requires atalk.sys to be installed. Because it is not an Ethernet class driver, it requires special code in the client. See LOCALTLK.NOT for more details. NCR ET-105 usage: ncret105 [-n] [-d] [-w] The NCR ET-105 driver requires four additional parameters -- the hardware interrupt number, the I/O address, the memory base address, and the Ethernet address. The Ethernet address assigned to any particular board is printed on sticky labels that come with the board. Novell IPX usage: ipxpkt [-n] [-d] [-w] packet_int_no The ipxpkt packet driver simulates Ethernet on Novell IPX protocol. BICC Data Networks' ISOLAN 4110 ethernet usage: isolan [-n] [-d] [-w] packet_int_no [int_no [base_addr]] The BICC Isolan requires three additional parameters -- the hardware interrupt number and the memory base address. The defaults are 2 and 0xb800h. Netbios usage: nb [-n] [-d] [-w] packet_int_no ip.ad.dr.ess [receive queue size] The netbios packet driver transports IP packets over NetBIOS. Novell ne1000 usage: ne1000 [-n] [-d] [-w] packet_int_no [int_no [io_addr]] The ne1000 driver requires two additional parameters -- the hardware interrupt number and the I/O address. The defaults are 3 and 0x300. Novell ne/2 usage: ne2 [-n] [-d] [-w] The ne/2 driver requires no additional parameters. Novell ne2000 usage: ne2000 [-n] [-d] [-w] packet_int_no [int_no [io_addr]] The ne2000 driver requires two additional parameters -- the hardware interrupt number and the I/O address. The defaults are 2 and 0x300. Racal-Interlan (Formerly Interlan) NI5010 usage: NI5010 [-n] [-d] [-w] packet_int_no [int_no [io_addr]] The NI5010 driver requires two additional parameters -- the hardware interrupt number and the I/O address. The defaults are 3 and 0x300. Racal-Interlan (Formerly Micom-Interlan) NI5210 usage: ni5210 [-n] [-d] [-w] packet_int_no [int_no [io_addr [base_addr]]] The NI5210 driver requires three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. The defaults are 2 and 0x360 and 0xd000. Note that Interlan sets the default memory base to 0xa000, which is brain-damaged, because that area of memory is specifically reserved for video adapters, and in fact the EGA and VGA use it. Racal-Interlan NI6510 usage: ni6510 [-n] [-d] [-w] packet_int_no [int_no [io_addr]] The ni6510 driver has two additional parameters -- the hardware interrupt number and the I/O address. The defaults are 2 and auto-sense. These parameters do not need to be set unless the auto-sense routine fails, or otherwise disrupts operation of your PC. Racal-Interlan (Formerly Micom-Interlan) NI9210 usage: ni9210 [-n] [-d] [-w] packet_int_no [int_no [io_addr [base_addr]]] The ni9210 driver requires three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. The defaults are 2 and 0x360 and 0xd000. NTI 16 usage: nti16 [-n] [-d] [-w] packet_int_no [int_no [io_addr [base_addr]]] The nti16 driver requires three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. The defaults are 3 and 0x338 and 0xd000. SLIP8250 usage: SLIP8250 [-n] [-d] [-w] packet_int_no [-h] [driver_class] [int_no] [io_addr] [baud_rate] [send_buf_size] [recv_buf_size] The driver_class should be SLIP, KISS, AX.25, or a number. The SLIP8250 driver is not strictly an Ethernet adapter, however some software packages (such as KA9Q's NET and NCSA Telnet) support Serial Line IP (SLIP). SLIP must be specially supported because it doesn't use ARP and has no hardware addresses prepended to its packets. The PDS is not clear on this, but the packet driver does the SLIP encoding. The parameters are as follows. The -h flag is included if you wish to use hardware handshaking (the packet driver will then suspend the transmission of characters while CTS is low). The driver_class is the class that is returned to a client of the packet driver spec in the driver_info call. The int_no is the hardware interrupt number, defaults to 4 (COM1). The io_addr is the hardware I/O address, defaults to 0x3f8 (COM1). The baud_rate defaults to 4800 baud. The send_buf_size and recv_buf_size default to 3000 each. Ungermann-Bass NIC-PC usage: ubnicpc [-n] [-d] [-w] The UB NIC-PC driver requires two additional parameters, the hardware interrupt number, and the memory base address. Ungermann-Bass NIC-PS/2 usage: ubnicps2 [-n] [-d] [-w] The UB NIC-PS/2 requires three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. The defaults are the contents of the POS registers, so the only time you would need to use the parameters is if you're using two NIC-PS/2 boards in one machine. Tiara Lancard usage: tiara [-n] [-d] [-w] packet_int_no [int_no [io_addr]] The Tiara driver runs the Tiara LANCARD/E cards, both eight and sixteen bit cards. The Tiara driver requires two additional parameters, the hardware interrupt number, and the I/O port. Western Digital WD8003 E EBT EB ET/A and E/A usage: WD8003E [-n] [-d] [-w] packet_int_no [-o] [int_level [io_addr [mem_base]]] The WD8003E driver runs the Western Digital E, EBT, EB, ET/A, and E/A Ethernet cards. The WD8003E requires three additional parameters -- the hardware interrupt number, the I/O address, and the memory base address. The defaults are 2 and 0x280 and 0xd000. The wd8003 cards do not enable their memory until configuration time. Some 386 memory mappers will map memory into the area that the card intends to use. You should be able to configure your software to leave this area of memory alone. Also driver will refuse to map memory into occupied memory. The occupied memory test fails on some machines, so the optional switch -o allows you to disable the check for occupied memory. Errorlevels Some of the packet drivers return error codes. Some of these error codes indicate fatal errors, and some are merely warnings. For the moment, you must consult the source to see what the errorcodes mean. For example, pktchk returns 0 if a packet driver exists at a given address, and 1 if not. You might use it in a batch file that only installs a packet driver if one is not found. rem only install the packet driver if there isn't one rem already. pktchk 0x7e if errorlevel 0 goto gotit ni5210 0x7e :gotit The "errorlevel" test is true if the errorlevel is less than or equal to the parameter. Utility Programs There are also several utility programs for packet drivers: PKTADDR usage: pktaddr packet_int_no [ethernet_addr] If the second argument is given, the Ethernet address of the given packet driver is set. The Ethernet address is printed out. PKTALL usage: pktall packet_int_no All packets are received and discarded from the given packet driver. This program is of most use with PKTMODE and TRACE. PKTCHK usage: pktchk packet_int_no [packet_int_no] Test for existance of a packet driver. Returns with errorlevel 0 if the specified interrupt has a packet driver. If the second argument is given, all interrupts in the range are checked for a packet driver. If no packet driver is found at all, errorlevel 1 is returned. PKTMODE usage: pktmode packet_int_no [receive_mode] If the second argument is given, the receive mode of the given packet driver is set. A decimal number from the list of modes should be used. All the possible modes are printed out. Unimplemented modes are marked with "xx", and the current mode is marked with "->". PKTMULTI usage: pktmulti packet_int_no [-f filename | address ...] The specified addresses are set as allowed multicast addresses. If no list of addresses is given, then the current list of addresses is printed. The addresses may either be specified on the command line, or in a file using the -f option. When a file is used, any whitespace in the file is ignored. PKTSTAT usage: pktstat first_int_no [last_int_no] The statistics for all packet drivers in the given range are printed. The default range is 0x60 through 0x80. The meanings of the columns are given below. pkt_in is the number of packets ever received by this driver. pkt_out is the number of packets ever transmitted by this driver. byt_in is the number of bytes ever received by this driver. byt_out is the number of bytes ever transmitted by this driver. pk_drop Packets dropped because there was no handler for that Ethernet packet type. err_in Dependent upon the packet driver. err_out Dependent upon the packet driver. PKTSEND usage: pktsend packet_int_no [-r] [-f filename | packet] The specified packet is sent using the specified packet driver. The -r option says to repeat sending as fast as possible. You shouldn't use this option very often. The packet may either be specified on the command line, or in a file using the -f option. When a file is used, any whitespace in the file is ignored. PKTRING usage: pktring [-m] dest_packet_int_no src_packet_int_no Test two packet drivers loaded on two Ethernet cards in the same machine. Sends packets of every possible length using the driver located at src_packet_int_no to the driver located at dest_packet_int_no. If the -m switch is used, then the various receive modes are tested. Note that the multicast tests (modes four and five) do not work properly yet. TERMIN usage: termin [-s] packet_int_no The specified packet driver is terminated, and its memory recovered. The s-option (stop) is used to prepare for termination. The in-use flag for all handles are cleared. This prevents upcalls to handlers that are to be removed and also makes it possible to later terminate the packet driver even though handles are not released. Actually, doing termin -s after prom boot is like cutting the branch you are sitting on. Recipe for removing packet driver, IPX and NET: pktdrvr 0x7c .... MARKNET C:IPX&NET3.MRK PDIPX NET3 . . . NET3 u ; unload netx to avoid communication timeout TERMIN -s 0x7c ; pkt drvr no longer calls any nonexistent rcvrs RELNET ipxet3.mrk ; IPX is "removed" TERMIN 0x7c ; It is now safe to terminate the packet driver TRACE usage: trace packet_int_no [buffer_size] Trace is very useful for debugging packet driver troubles. Trace lets you trace all transactions between a user program and the packet driver. The transactions are stored in a memory buffer whose size is set with buffer_size. The default size is 10,000 bytes. When you run trace, it sets itself up and then spawns COMMAND.COM so that you can run a network program that uses the packet driver. After you quit your network session, you issue an "EXIT" command. This returns you to trace, which writes the transaction log to "TRACE.OUT". The following program, DUMP, interprets TRACE.OUT. DUMP usage: dump Interprets the contents of TRACE.OUT as written by TRACE. Appendix A Interrupt usage in the range 0x60 through 0x80, from Ralf Brown's interrupt list. 60 -- -- reserved for user interrupt 60 -- -- FTP Driver - PC/TCP Packet Driver Specification 60 01 FF FTP Driver - DRIVER INFO 60 02 -- FTP Driver - ACCESS TYPE 60 03 -- FTP Driver - RELEASE TYPE 60 04 -- FTP Driver - SEND PACKET 60 05 -- FTP Driver - TERMINATE DRIVER FOR HANDLE 60 06 -- FTP Driver - GET ADDRESS 60 07 -- FTP Driver - RESET INTERFACE 60 11 -- 10-NET - LOCK AND WAIT 60 12 -- 10-NET - LOCK 60 13 -- 10-NET - UNLOCK 60 20 -- FTP Driver - SET RECEIVE MODE 60 21 -- FTP Driver - GET RECEIVE MODE 60 24 -- FTP Driver - GET STATISTICS 61 -- -- reserved for user interrupt 62 -- -- reserved for user interrupt 63 -- -- reserved for user interrupt 64 -- -- reserved for user interrupt 65 -- -- reserved for user interrupt 66 -- -- reserved for user interrupt 67 -- -- LIM EMS ... 67 DE 00 Virtual Control Program Interface - INSTALLATION CHECK ... 68 01 -- APPC/PC ... 69 -- -- unused 6A -- -- unused 6B -- -- unused 6C -- -- system resume vector (CONVERTIBLE) 6C -- -- DOS 3.2 Realtime Clock update 6D -- -- VGA - internal 6E -- -- unused 6F -- -- Novell NetWare - PCOX API (3270 PC terminal interface) 6F 00 -- 10-NET - LOGIN ... 70 -- -- IRQ8 - AT/XT286/PS50+ - REAL-TIME CLOCK 71 -- -- IRQ9 - AT/XT286/PS50+ - LAN ADAPTER 1 72 -- -- IRQ10 - AT/XT286/PS50+ - RESERVED 73 -- -- IRQ11 - AT/XT286/PS50+ - RESERVED 74 -- -- IRQ12 - PS50+ - MOUSE INTERRUPT 75 -- -- IRQ13 - AT/XT286/PS50+ - 80287 ERROR 76 -- -- IRQ14 - AT/XT286/PS50+ - FIXED DISK 77 -- -- IRQ15 - AT/XT286/PS50+ - RESERVED 78 -- -- not used 79 -- -- not used 7A -- -- Novell NetWare - LOW-LEVEL API 7A -- -- AutoCAD Device Interface 7B -- -- not used 7C -- -- not used 7D -- -- not used 7E -- -- not used 7F -- -- HDILOAD.EXE - 8514/A VIDEO CONTROLLER INTERFACE 7F -- -- HLLAPI (High-Level Language API) 80 -- -- reserved for BASIC