home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
lan
/
drivrs30
/
packet_d.108
< prev
next >
Wrap
Text File
|
1989-02-20
|
28KB
|
1,189 lines
PC/TCP Version 1.08 Packet Driver Specification 1
FTP Software, Inc.
PC/TCP Packet Driver Specification
Revision 1.08
December-12-1988
Developed by:
FTP Software, Inc.
P.O. Box 150
Kendall Sq. Branch
Boston, MA 02142
(617) 868-4878
Note: this document is public domain and may be distributed
freely and without fee or permission. FTP Software's name
and this notice must appear on any reproduction of this
document.
Support of a hardware interface, or mention of an interface
manufacturer, by the Packet Driver specification does not
necessarily indicate that the manufacturer endorses this
specification.
1 Introduction and Motivation
This document describes the programming interface to PC/TCP
packet drivers. Packet drivers provide a simple, common
programming interface that allows multiple applications to
share a network interface at the data link level. The packet
drivers demultiplex incoming packets amongst the
applications by using the network media type field.
Different versions of PC/TCP exist for different network
media (Ethernet, 802.5 ring, serial lines), but through the
use of the packet driver, the actual brand or model of the
network interface can be hidden from the application.
The packet driver provides calls to initiate access to a
specific packet type, to end access to it, to send a packet,
to get statistics on the network interface and to get
information about the interface.
Protocol implementations that use the packet driver can
completely coexist on a PC and can make use of one another's
services, whereas multiple applications which do not use the
driver do not coexist on one machine properly. Through use
2 PC/TCP Version 1.08 Packet Driver Specification
FTP Software, Inc.
of the packet driver, a user could run TCP/IP, DECnet, and a
proprietary protocol implementation such as Banyan's,
LifeNet's, Novell's or 3COM's without the difficulties
associated with preempting the network interface.
Applications which use the packet driver can also run on new
network hardware of the same class without being modified;
only a new packet driver need be supplied.
Two levels of packet drivers are described in this
specification. The first is the basic packet driver, which
provides minimal functionality but should be simple to
implement and which uses very few host resources. The basic
driver provides operations to broadcast and receive packets.
The second driver is the extended packet driver, which is a
superset of the basic driver. The extended driver supports
less commonly used functions of the network interface such
as multicast, and also gathers statistics on use of the
interface and makes these available to the application.
Functions which are available in only the extended packet
driver are noted as such in their descriptions. All basic
packet driver functions are available in the extended
driver.
2 Identifying network interfaces
Network interfaces are named by a triplet of integers,
<class, type, number>. The first is the class of interface.
The class tells what kind of media the interface is for:
DEC/Intel/Xerox/Ethernet, IEEE 802.3 Ethernet, IEEE
802.5/Token Ring, ProNET-10, Broadband Ethernet, Appletalk,
serial line, etc.
The second number is the type of interface: this specifies a
particular instance of an interface supporting a class of
medium. Interface types for Ethernet might name these
interfaces: 3COM 3C501 or 3C505, Interlan NI5010, Univation,
BICC Data Networks ISOLAN, Ungermann-Bass NIC, etc.
Interface types for IEEE 802.5 might name these interfaces:
IBM Token Ring adapter, Proteon p1340, etc.
The last number is the interface number. If a machine is
equipped with more than one interface of a class and type,
the interfaces must be numbered to distinguish between them.
An appendix details constants for classes and types. The
class of an interface is an 8-bit integer, and its type is a
16 bit integer. Class and type constants are managed by FTP
Software. Contact FTP to register a new class or type
number.
PC/TCP Version 1.08 Packet Driver Specification 3
FTP Software, Inc.
The type 0xFFFF is a wildcard type which matches any
interface in the specified class. It is unnecessary to
wildcard interface numbers, as 0 will always correspond to
the first interface of the specified class and type.
This specification has no provision for the support of
multiple network interfaces (with similar or different
characteristics) via a single Packet Driver and associated
interrupt. We feel that this issue is best addressed by
loading several Packet Drivers, one per interface, with
different interrupts (although all may be included in a
single TSR software module). Applications software must
check the class and type returned from a driver_info() call
already, to make sure that the Packet Driver is for the
correct media and packet format. This can easily be
generalized by searching for another Packet Driver if the
first is not of the right kind.
3 Initiating driver operations
The packet driver is invoked via a software interrupt in the
range 0x60 through 0x80. This document does not specify a
particular interrupt, but describes a mechanism for locating
which interrupt the driver uses. The interrupt must be
configurable to avoid conflicts with other pieces of
software that also use software interrupts. The program
which installs the packet driver should provide some
mechanism for the user to specify the interrupt.
The handler for the interrupt is assumed to start with 3
bytes of exectuable code; this can either be a 3-byte jump
instruction, or a 2-byte jump followed by a NOP (do not
specify "jmp short" unless you also specify an explicit
NOP). This must be followed by the null-terminated ASCII
text string "PKT DRVR". To find the interrupt being used by
the driver, an application should scan through the handlers
for vectors 0x60 through 0x80 until it finds one with the
text string "PKT DRVR" in it.
4 Programming interface
All functions are accessed via the software interrupt
determined to be the driver's via the mechanism described
earlier. On entry, register AH contains the code of the
function desired.
The handle is an arbitrary integer value associated with
each MAC-level demultiplexing type that has been established
via the access_type call. Internally to the packet driver,
4 PC/TCP Version 1.08 Packet Driver Specification
FTP Software, Inc.
it will probably be a pointer, or a table offset. The
application calling the packet driver cannot depend on it
assuming any particular range, or any other characteristics.
Note that some of the functions defined below are labelled
as extended driver functions. Because these are not
required for basic network operations, their implementation
may be considered optional. Programs wishing to use these
functions should use the driver_info() function to determine
if they are available in a given packet driver.
4.1 Entry conditions
FTP Software applications which call the packet driver are
coded in Microsoft C and assembly language. All necessary
registers are saved by FTP's routines before the INT
instruction to call the packet driver is executed. Our
current receiver() functions behave as follows: DS and the
flags are saved and restored. All other registers may be
modified, and should be saved by the packet driver, if
necessary. Processor interrupts may be enabled while in the
upcall, but the upcall doesn't assume interrupts are
disabled on entry. On entry, receiver() switches to a local
stack. Current FTP Software receiver() routines may modify
all registers except DS, so the caller must save and restore
any that must be preserved across the call.
Note that some older versions of PC/TCP may enable
interrupts during the upcall, and leave them enabled on
return to the Packet Driver.
4.2 Byte ordering
Developers should note that, on many networks and protocol
families, the byte-ordering of 16-bit quantities on the
network is opposite to the native byte-order of the PC.
(802.5 Token Ring is an exception). This means that DEC-
Intel-Xerox ethertype values passed to access_type() must be
swapped (passed in network order). The IEE 802.3 length
field needs similar handling, and care should be taken with
packets passed to send_pkt(), so they are in the proper
order.
4.3 driver_info()
driver_info(handle) AH == 1 AL == FF
int handle; BX /* Optional */
error return:
PC/TCP Version 1.08 Packet Driver Specification 5
FTP Software, Inc.
carry flag set
error code DH
possible errors:
BAD_HANDLE /* older drivers only
*/
non-error return:
carry flag clear
version BX
class CH
type DX
number CL
name DS:SI
basic/extended AL
1 == basic, 2 == extended, FF == not
installed
This function returns information about the interface. The
version is assumed to be an internal hardware driver
identifier. In earlier versions of this spec, the handle
argument (which must have been obtained via access_type())
was required. It is now optional, but drivers developed
according to versions of this spec previous to 1.07 may
require it, so implementers should take care.
4.4 access_type()
int access_type(if_class, if_type, if_number, type, typelen,
receiver) AH == 2
int if_class; AL
int if_type; BX
int if_number; DL
char far *type; DS:SI
unsigned typelen; CX
int (far *receiver)(); ES:DI
error return:
carry flag set
error code DH
possible errors:
NO_CLASS
NO_TYPE
NO_NUMBER
BAD_TYPE
NO_SPACE
TYPE_INUSE
non-error return:
carry flag clear
handle AX
receiver call:
6 PC/TCP Version 1.08 Packet Driver Specification
FTP Software, Inc.
(*receiver)(handle, flag, len [, buffer])
int handle; BX
int flag; AX
unsigned len; CX
if AX == 1,
char far *buffer; DS:SI
Initiates access to packets of the specified type. The
argument type is a pointer to a packet type specification.
The argument typelen is the length in bytes of the type
field. The argument receiver is a pointer to a subroutine
which is called when a packet is received. If the typelen
argument is 0, this indicates that the caller wants to match
all packets (match all requests may be refused by packet
drivers developed to conform to versions of this spec
previous to 1.07).
When a packet is received, receiver is called twice by the
packet driver. The first time is to request a buffer from
the application to copy the packet into. AX == 0 on this
call. The application should return a pointer to the buffer
in ES:DI. If the application has no buffers, it may return
0:0 in ES:DI, and the driver should throw away the packet
and not perform the second call.
It is important that the packet length (CX) be valid on the
AX == 0 call, so that the receiver can allocate a buffer of
the proper size. This length (as well as the copy performed
prior to the AX == 1 call) must include the Ethernet header
and all received data, but not the trailing checksum.
On the second call, AX == 1. This call indicates that the
copy has been completed, and the application may do as it
wishes with the buffer. The buffer that the packet was
copied into is pointed to by DS:SI.
4.5 release_type()
int release_type(handle) AH == 3
int handle; BX
error return:
carry flag set
error code DH
possible errors:
BAD_HANDLE
non-error return:
carry flag clear
PC/TCP Version 1.08 Packet Driver Specification 7
FTP Software, Inc.
This function ends access to packets associated with a
handle returned by access_type(). The handle is no longer
valid.
4.6 send_pkt()
int send_pkt(buffer, length) AH == 4
char far *buffer; DS:SI
unsigned length; CX
error return:
carry flag set
error code DH
possible errors:
CANT_SEND
non-error return:
carry flag clear
Transmits length bytes of data, starting at buffer. The
application must supply the entire packet, including local
network headers. Any MAC or LLC information in use for
packet demultiplexing (e.g. the DEC-Intel-Xerox Ethertype)
must be filled in by the application as well. This cannot
be performed by the driver, as no handle is specified in a
call to the send_packet() function.
4.7 terminate()
terminate(handle) AH == 5
int handle; BX
error return:
carry flag set
error code DH
possible errors:
BAD_HANDLE
CANT_TERMINATE
non-error return:
carry flag clear
Terminates the driver associated with handle. If possible,
the driver will exit and allow MS-DOS to reclaim the memory
it was using.
4.8 get_address()
get_address(handle, buf, len) AH == 6
int handle; BX
8 PC/TCP Version 1.08 Packet Driver Specification
FTP Software, Inc.
char far *buf; ES:DI
int len; CX
error return:
carry flag set
error code DH
possible errors:
BAD_HANDLE
NO_SPACE
non-error return:
carry flag clear
length CX
Copies the local net address associated with handle into
buf. The buffer buf is len bytes long. The actual number of
bytes copied is returned in CX. If the NO_SPACE error is
returned, this indicates that len was insufficient to hold
the local net address.
4.9 reset_interface()
reset_interface(handle) AH == 7
int handle; BX
error return:
carry flag set
error code DH
possible errors:
BAD_HANDLE
non-error return:
carry flag clear
Resets the interface associated with handle to a known
state, aborting any transmits in process and reinitializing
the receiver. This call has been included primarily for
circumstances where a high-level protocol has detected what
it thinks may be an interface failure or hang. If the
packet driver implementer has a high level of confidence in
the hardware, or the action would seriously disrupt other
users of the interface, this can be treated as a no-op.
4.10 set_rcv_mode()
extended driver function
set_rcv_mode(handle, mode) AH == 20
int handle; BX
int mode; CX
PC/TCP Version 1.08 Packet Driver Specification 9
FTP Software, Inc.
error return:
carry flag set
error code DH
possible errors:
BAD_HANDLE
BAD_MODE
non-error return:
carry flag clear
Sets the receive mode on the interface associated with
handle. The following values are accepted for mode:
mode meaning
1 turn off receiver
2 receive only packets sent to this interface
3 mode 2 plus broadcast packets
4 mode 3 plus limited multicast packets
5 mode 3 plus all multicast packets
6 all packets
Note that not all interfaces support all modes. The receive
mode affects all packets received by this interface, not
just packets associated with the handle argument. See the
extended driver functions get_multicast_list() and
set_multicast_list() for programming "perfect filters" to
receive specific multicast addresses.
Note that mode 3 is the default, and if the set_rcv_mode()
function is not implemented, mode 3 is assumed to be in
force as long as any handles are open (from the first
access_type() to the last release_type()).
4.11 get_rcv_mode()
extended driver function
get_rcv_mode(handle, mode) AH == 21
int handle; BX
error return:
carry flag set
error code DH
possible errors:
BAD_HANDLE
non-error return:
carry flag clear
mode AX
10 PC/TCP Version 1.08 Packet Driver Specification
FTP Software, Inc.
Returns the current receive mode of the interface associated
with handle.
4.12 set_multicast_list()
extended driver function
set_multicast_list(addrlst, len) AH == 22
char far *addrlst; ES:DI
int len; CX
error return:
carry flag set
error code DH
possible errors:
NO_MULTICAST
NO_SPACE
BAD_ADDRESS
non-error return:
carry flag clear
The addrlst argument is assumed to point to an len-byte
buffer containing a number of multicast addresses.
BAD_ADDRESS is returned if len modulo the size of an address
is not equal to 0, or the data is unacceptable for some
reason. NO_SPACE is returned (and no addresses are set) if
there are more addresses than the hardware supports
directly.
The recommended procedure for setting multicast addresses is
to issue a get_multicast_list(), copy the information to a
local buffer, add any addresses desired, and issue a
set_multicast_list(). This should be reversed when the
application exits. If the set_multicast_list() fails due to
NO_SPACE, use set_rcv_mode() to set mode 5 instead.
4.13 get_multicast_list()
extended driver function
get_multicast_list() AH == 23
error return:
carry flag set
error code DH
possible errors:
NO_MULTICAST
non-error return:
carry flag clear
char far *addrlst; ES:DI
int len; CX
PC/TCP Version 1.08 Packet Driver Specification 11
FTP Software, Inc.
On a successful return, addrlst points to len bytes of
multicast addresses currently in use. The application
program must not modify this information in-place.
4.14 get_statistics()
extended driver function
get_statistics(handle) AH == 24
int handle; BX
error return:
carry flag set
error code DH
possible errors:
BAD_HANDLE
non-error return:
carry flag clear
char far *stats; DS:SI
statistics structure:
field byte length
packets in 4
packets out 4
bytes in 4
bytes out 4
errors in 4
errors out 4
packets dropped 4
Returns a pointer to a statistics structure for this handle.
4.15 set_address()
extended driver function
set_address(addr, len) AH == 25
char far *addr; ES:DI
int len; CX
error return:
carry flag set
error code DH
possible errors:
CANT_SET
BAD_ADDRESS
non-error return:
carry flag clear
length CX
PC/TCP Version 1.08 Packet Driver Specification 1
FTP Software, Inc.
This call is used when the application or protocol stack
needs to use a specific LAN address. For instance, DECnet
protocols on Ethernet encode the protocol address in the
Ethernet address, requiring that it be set when the protocol
stack is loaded. A BAD_ADDRESS error indicates that the
Packet Driver doesn't like the len (too short or too long),
or the data itself. Note that packet drivers should refuse
to change the address (with a CANT_SET error) if more than
one handle is open (lest it be changed out from under
another protocol stack).
PC/TCP Version 1.08 Packet Driver Specification A.1
FTP Software, Inc.
Appendix A
Interface classes and types
The following are defined as network interface classes, with
their individual types listed immediately following the
class.
DEC/Intel/Xerox "Bluebook" Ethernet
1
3COM 3C500/3C501 1
3COM 3C505 2
MICOM-Interlan NI5010 3
BICC Data Networks 4110 4
BICC Data Networks 4117 5
MICOM-Interlan NP600 6
Ungermann-Bass PC-NIC 8
Univation NC-516 9
TRW PC-2000 10
MICOM-Interlan NI5210 11
3COM 3C503 12
3COM 3C523 13
Western Digital WD8003 14
Spider Systems S4 15
Torus Frame Level 16
10NET Communications 17
Gateway PC-bus 18
Gateway AT-bus 19
Gateway MCA-bus 20
IMC PCnic 21
IMC PCnic II 22
IMC PCnic 8bit 23
ProNET-10 2
Proteon p1300 1
IEEE 802.5/ProNET-4 3
IBM Token ring adapter 1
Proteon p1340 2
Proteon p1344 3
Gateway PC-bus 4
Gateway AT-bus 5
Gateway MCA-bus 6
Omninet 4
A.2 PC/TCP Version 1.08 Packet Driver Specification
FTP Software, Inc.
Appletalk 5
Serial line 6
Starlan 7 (NOTE: This has been subsumed by
Ethernet)
ArcNet 8
Datapoint RIM 1
AX.25 9
KISS 10
IEE 802.3 w/802.2 hdrs 11
Types as given under DIX Ethernet
See Appendix D.
PC/TCP Version 1.08 Packet Driver Specification B.1
FTP Software, Inc.
Appendix B
Function call numbers
The following numbers are used to specify which operation
the packet driver should perform. The number is stored in
register AH on call to the packet driver.
driver_info 1
access_type 2
release_type 3
send_pkt 4
terminate 5
get_address 6
reset_interface 7
*set_rcv_mode 20
*get_rcv_mode 21
*set_multicast_list 22
*get_multicast_list 23
*get_statistics 24
*set_address 25
* indicates an extended packet driver function
PC/TCP Version 1.08 Packet Driver Specification C.1
FTP Software, Inc.
Appendix C
Error codes
Packet driver calls indicate error by setting the carry flag
on return. The error code is returned in register DH (a
register not used to pass values to functions must be used
to return the error code). The following error codes are
defined:
1 BAD_HANDLE invalid handle number
2 NO_CLASS no interfaces of specified class found
3 NO_TYPE no interfaces of specified type found
4 NO_NUMBER no interfaces of specified number found
5 BAD_TYPE bad packet type specified
6 NO_MULTICAST this interface does not support
multicast
7 CANT_TERMINATE this packet driver cannot terminate
8 BAD_MODE an invalid receiver mode was specified
9 NO_SPACE operation failed because of insufficient
space
10 TYPE_INUSE the type had previously been accessed,
and not released.
11 BAD_COMMAND the command was out of range, or not
implemented
12 CANT_SEND the packet couldn't be sent (usually
hardware error)
13 CANT_SET hardware address couldn't be changed
(more than 1 handle open)
14 BAD_ADDRESS hardware address has bad length or
format
PC/TCP Version 1.08 Packet Driver Specification D.1
FTP Software, Inc.
Appendix D
802.3 vs. Blue Book Ethernet
One weakness of the present specification is that there is
no provision for simultaneous support of 802.3 and Blue Book
(the old DEC-Intel-Xerox standard) Ethernet headers via a
single Packet Driver (as defined by its interrupt). The
problem is that the Ethertype of Blue Book packets is in
bytes 12 and 13 of the header, and in 802.3 the
corresponding bytes are interpreted as a length. In 802.3,
the field which would appear to be most useful to begin the
type check in is the 802.2 header, starting at byte 14.
This is only a problem on Ethernet and variants (e.g.
Starlan), where 802.3 headers and Blue Book headers are
likely to need co-exist for many years to come.
One solution is to redefine class 1 as Blue Book Ethernet,
and define a parallel class for 802.3 with 802.2 packet
headers. This requires that a 2nd Packet Driver (as defined
by its interrupt) be implemented where it is necessary to
handle both kinds of packets, although they could both be
part of the same TSR module.
As of this draft, class 11 has been assigned to 802.3 using
802.2 headers, to implement the above.
Note: According to this scheme, an application wishing to
receive IP encapsulated per RFC 1042 would specify an
typelen argument of 8, and type would point to:
char iee_ip[] = {0xAA, 0xAA, 3, 0, 0, 0, 0x08, 0x00};
James B. VanBokkelen
jbvb@ftp.com
...!ftp!jbvb
Table of Contents
1 Introduction and Motivation . . . . . . . 1
2 Identifying network interfaces . . . . . 2
3 Initiating driver operations . . . . . . 3
4 Programming interface . . . . . . . . . . 3
4.1 Entry conditions . . . . . . . . . . 4
4.2 Byte ordering . . . . . . . . . . . 4
4.3 driver_info() . . . . . . . . . . . 4
4.4 access_type() . . . . . . . . . . . 5
4.5 release_type() . . . . . . . . . . . 6
4.6 send_pkt() . . . . . . . . . . . . . 7
4.7 terminate() . . . . . . . . . . . . 7
4.8 get_address() . . . . . . . . . . . 7
4.9 reset_interface() . . . . . . . . . 8
4.10 set_rcv_mode() . . . . . . . . . . 8
4.11 get_rcv_mode() . . . . . . . . . . 9
4.12 set_multicast_list() . . . . . . . 10
4.13 get_multicast_list() . . . . . . . 10
4.14 get_statistics() . . . . . . . . . 11
4.15 set_address() . . . . . . . . . . . 11
Appendix A Interface classes and types A-1
Appendix B Function call numbers B-1
Appendix C Error codes C-1
Appendix D 802.3 vs. Blue Book Ethernet D-1
i