��������� ����    >>    IPXLib
   
 

������ IPX ��� NOVELL-NETWARE

����������� ������������




����� ���������, ���� HTL

��������� ������, 1991

Rene Gilomen

(������� � ����������: Valery Votintsev)


����������

1. ��������

2. Novell-NetWare

3. ����������� ����������

4. ��������� ������

5. �������� �������
IPX_Setup
IPX_Open_Socket
IPX_Close_Socket
IPX_Send
IPX_Receive
IPX_Done
IPX_Internetwork_Address
IPX_To_Addr
IPX_From_Addr

6. ����������� � ��������

����������


1. ��������

� ��������� ������ ����������� ���������� ������� ��� TURBO PASCAL, ����������� ������������ �������� � ����� ������ �� ��������� ���� �� ���� Novell Netware � �������������� ��������� IPX.

� ���������� ������������� �������� "���������������", ��������������� ������������ ����������������� ���������� �� ����� ���������� ������� �������� � ������ ������.

��� ������ � ����������� ���������� �������� ������ � ��������� ����������� �������, ������ ����������, ����� ������������ ���� ����� ������������� �� ������������ �������, ����� ���������������� TURBO PASCAL, � ����� �� ���������� � ����������� ����������� Ethernet �����.
�������� �������� �� ���� ��������� ����.

2. Novell-NetWare
NOVELL-NETWARE [1] �������� ����� ���������������� ������� ������������ ��������, ������������ �� Xerox Network System (XNS) [2].
�������� ������� ������������������ NETWARE �������� ������� ���������� ��������� �����������, ������� �������� ���� ��� ��������� �����������. ��������, �������� ������� �� Entry Level (ELS) I � II (���������� ��� ����� ����� - �� 4 �� 8 �������������) �� NETWARE 386 ������ 3.x, �������������� �� 250 �������������.
����� ����, ���������� ����������� ����������� ������, ����������� ������������ � �������� ������� ������ ���� DEC-VAX.

���������� ���� NETWARE ����� ���� ������������ � ���� ��� ���������� OSI-������ [���. 1].
�� "����������" ������ � "������ ������" ������������ ��������� NOVELL-NETWARE Ethernet, IEEE 802.3, IEEE 802.5, ARCNET � ��� ������.
�� "�������" � "������������" ������� ������������ ��������� Internetwork Packet Exchange (IPX) � Sequenced Packet Exchange (SPX).
�� "������ ������" ����������� ������� ������� �������� �����-������ (Network Basic Input Output System - NETBIOS).
�� ������ "�������������" � "����������" ������������ ��������� NETWARE Core Protocols (NCP), �������������� �������, �������� DOS � ��������� ���������� ���������.


Application
Presentation
NCP / DOS-Shell ���������� ���������
Session NetBIOS  
Transport SPX  
Network IPX  
Data Link CSMA/CD  
Physical 802.3 / 802.5 ������� NW :)

���. 1.


���������� ����� ���������� � �������� ��������� ���������� ��������� [���. 2].
�� "�������" ������ �������� �������� IPX, �������������� ������������ ��� ������������� ����� ��������� � ����.
�������������� �� "������������" ������ ������������ �������� SPX, �������������� ������������ � ������������ ��������������.
NETBIOS-����������� ���������� ����� ���������� ��������������� � ������ "������".

"Workstation Shell" - ��� ���-����������� ������� ��������� ������� �������,
����������� ������������ ������ ����� ������� �������� � ��������.
��� ��������������� ������������ ����������� ���������������� ����� ����� ����� Workstation Shell ����������.


Workstation
Shell
      Application
NetBIOS
Emulator
    Session
SPX   Transport
IPX       Network
���. 2.



����������� ����� "������ IPX ��� NOVELL-NETWARE" ������������ ������������ ����������� ������ ������� ����� �������� ��������� � ���� Ethernet IEEE 802.3, � ������������� ��� ����� ��� ����������� ������� �� ����� TURBO-PASCAL. ��� ������� �������� ����������� � "��������" ������ NOVELL-NETWARE �� ���� ���������� ��������� IPX.

IPX �������� ����������, �� ��������� �����������, �.�. ���� ���� �� ������� ������� ������ ����������������� � ������ ��������, �� ��� ����� �� ��������� ������� �������������� ������������� ������� (��������, �������).
IPX-������ �������� ����� ���������� � ������������ ��������������� � �������-����������. ������ ����� �������� ��������������� � �� ����� �������� ����������� ��������� � ������ �������.

�������� IPX �������� ����� ��� ���������� ���������������� ������, ������� ���������� ������� ����� ����� ��������� ��� ������� ������.
��� �������� ������ ������ ������ ����������� ������ ������� �����, ������� ����� ����, ����� ����, � ����� ������.

������������ ��������� IPX:
  • ������� �������� � �������������
  • ����� ������ "�������������", ��� ��� ������� �������������� ���������� � Gegenstation �� ������ ���������
  • ����������� �������� ������ ����� ���������� �������� (Broadcasting)

���������� ��������� IPX:
  • ���������� ��������������� �������� �������


3. ����������� ����������
���������� ������������� ��� TURBO-PASCAL V6.0 [3]. (� ����� ������� �������� ���������� �� ��������.)
TURBO-PASCAL ������������ ��� ���������� "������" (UNIT) - ��� ����������, ������� ������������� ��������, � ������������ � ������� ��������� � ������� ��������� USES.
��� ������������� ������ ���������� �������� � ��� ����� ��������� �������
Uses IPX;.

��� ���������� ������ ���������� ��������� �� ������� ���� ��� IBM PC ����������� ����������, ������������� ������� Ethernet ������. ���������� ������ ���� ��������� � ���� ���� � ������ (�� ��������� IEEE 802.3).

���������� ������ ��� ������ � ����������� �� ���������, ��� ��� � ������ ������ ����������� ����� ���� �����-����� (Peer to Peer).

����� ����, �� ������� �������� ������ ���� �������� IPX-�������.

���������� ������������ ��� ��������� IPX version 2.12.


4. ��������� ������
��� ������ ��������� �� ����������� ���� ������� ������������� ��������� ������� ��������� ������ ���� RECORD, � ������� ����� ���������� ������������ ������ � �� �����:
SData = RECORD
	  Data	 : Data_Packet;
	  Length : WORD;
	END;
��� ������������ �������� ������ ����� ��������� ��������� ���� RECORD:
Network_Address = RECORD
	  Network : S4Byte;
	  Node    : S6Byte;
	  Socket  : WORD;
	END;
Data_Packet, S4Byte � S6Byte - ��� ���������������� ���� ������, ��������� � ����������.
����� ������ ��� ���� Data_Packet ���������� 546 ����;
S4Byte - 4 �����; � S6Byte - �������������� 6 ����.

�������� ��������, ��� �������� � ������ ���� ������ ���� � ������ ������� ������� �������� �� � ����������, � � �������� ����, �.�. ������ ���� ����� ��������� �������� �� ���� �� 255 ($00 - $FF).

����� ��������� ���� �������� ������������ �������� ��������� ���������� ���������:
MAX_SOCKETS - ������������ ���������� ������������ �������.

MAX_DATA_SIZE - ������������ ����� ������������ ������.

NET_LENGTH - ����� ������ ���� (� ������).

NODE_LENGTH - ����� ������ ���� � ���� (� ������).


5. �������� �������
FUNCTION IPX_Setup : BYTE;

��������:
������� �������������� ������� ��������� ��� ������ � IPX.

��� ������ ������� ���������������� � ������ IPX-�������,
� ������������ ��������� �������� ���� ����������� ����������.
������ ����� ����� �������� ������ ���� ��������� ������� ����������.

����������: ������ ������� ����������� ������ ���������� ������,
�.�. �� ��������� � ��������� IPX-�������� � ���������.


������������ ��������:
SUCCESS
������������� ������ �������.

DEVICE_SW_ERROR
������� ������� �� �������� ��� ����������.

������:
VAR State : BYTE;
:
:
State := IPX_Setup;
IF State <> SUCCESS THEN
BEGIN
  Writeln ('IPX �� �������� !');
  EXIT;
END;
:
:


FUNCTION IPX_Open_Socket ( VAR Socket : WORD ) : BYTE;

��������:
������� ��������� ��������� ���������������� �����.

���������:
Socket = ����� ������������ ������

����� � �������� ������� ������ ������������ ����� ������. ������ ����� ������ �������� � ����������������� �����.
���� ����� ������ ������ ������� ($0000), �� ������� ���� ������� � �������� Socket ����� ���������� ���������� ������.

����������: ��������� ������ ������� ��������������� ��� ������������ ������� �����, � ������������ ����������� �� ������������ ��� ����� ����� (��. ������������ �� Novell [1]).

������������ ��������:
SUCCESS
���������������� ����� ������ �������.

PARAMETER_ERROR
����� � ������ ������� ��� ��� ������ �����.

DEVICE_SW_ERROR
IPX ����������.

SOCKET_TABLE_FULL
��� ��������� ������ ��� ������.

������:
VAR
  State  : BYTE;
  Socket : WORD;
:
:
  IPX_Setup ....
:
:
  Socket := $8000;
:
  State := IPX_Open_Socket (Socket);
  IF State <> SUCCESS THEN
  BEGIN
    Writeln ('Socket Open Error');
    EXIT;
  END;
:
:


FUNCTION IPX_Close_Socket ( Socket : WORD ) : BYTE;

��������:
������� ��������� ��������� ���������������� �����.

��� �������� ������ ���������� ������������ ������� ������� ������.

���������:
Socket = ����� ������������ ������ (������ � 16-������ �����)

������������ ��������:
SUCCESS
����� ������ �������.

PARAMETER_ERROR
������ � ��������� ������� �� ����������.

������:
VAR
  State  : BYTE;
  Socket : WORD;
:
:
  IPX_Setup ...
:
  IPX_Open_Socket ...
:
  State := IPX_Close_Socket (Socket);
  IF State <> SUCCESS THEN
  BEGIN
    Writeln ('Error ');
    EXIT;
  END;
:
:


FUNCTION IPX_Send ( Socket : WORD; Dest_Addr : Network_Address; Buffer : SData) : BYTE;

��������:
������� �������� ������ ����� ��� ��� ���������� �������� � ����.

������ ����� ���������� ���� ���������� �������, ���� ����� ���� �������� � ������ "Broadcast".
������ ���� ������ ������ ������� �����.
��������, ��� ����� ���� �������� ������� ��������������� ��� ��������� Novell NetWare �� ������.
���� �������-���������� ��������� � ��� �� ����, ��� � ���������� �������, �� � ���� "Network" ����� ������ ������� �������� ($0000).
��� �������� ������ �� ��� ������� � ���� (����� Broadcast), � �������� ������ ���� ���������� ������� �������� $FFFFFFFFFFFF, �.�. �� ��� ����� ���� ������ ���� ������ ���� �������� �������� $FF.
������������ ����� ������������ ������ �� ������ ��������� 546 ����.
����������� ����� ������ ����� ����������� ���������.

���������:
Socket = ����� ������, ����� ������� ���������� ������.
(����� ������ ����������� � 16-������ �����)

Dest_Addr = ������ ������� ����� �������-���������� (��� ���������� �����������).

Buffer = ����� ��� ���������� ������������ ������ � �������� �� �����.

������������ ��������:
SUCCESS
������ �� �������� ������ ������� ������ ��������� IPX.

PARAMETER_ERROR
���� ��������� ����� �� ����������, ���� �� �������� ����� ����, ���� ����������� �������� �����.

NO_DESTINATION
�� ������ ���� � �������-����������.

������:
VAR
  State       : BYTE;
  Destination : Network_Address;
  Daten       : SData;
:
:
  IPX_Setup ...
:
  IPX_Open_Socket ...
:
  WITH Destination DO
  BEGIN
    Network[1] := $00;
    Network[2] := $00;
    Network[3] := $00;
    Network[4] := $00;

    Node[1] := $02;
    Node[2] := $60;
    Node[3] := $8C;
    Node[4] := $13;
    Node[5] := $FF;
    Node[6] := $AB;

    Socket := $5000;
  END;
:
  WITH Daten DO
  BEGIN
    Daten.Data := ...
    Daten.Length := ...
  END;
:
  State := IPX_Send (Socket,Destination, Daten);
  IF State <> SUCCESS THEN
  BEGIN
    Writeln ('Error');
    IPX_Close_Socket ...
    EXIT;
  END;
:
:


FUNCTION IPX_Receive ( Socket : WORD ) : BYTE;

��������:
������� ��������� ������ �� ��������� �������.

�������� ���������� ������ ������ �������������� � ������� ������� IPX_Done.

���������:
Socket = ����� ������������ ������ (�������� � 16-���� �����).

������������ ��������:
SUCCESS
������ �� ����� ������ ��������� ��������� IPX � �������� ���������������.

PARAMETER_ERROR
��������� ����� �� ����������.

DEVICE_SW_ERROR
������� IPX ����������.

������:
VAR
  State  : BYTE;
  Socket : WORD;

:
:
  IPX_Setup ...
:
  IPX_Open_Socket ...
:
:
  State := IPX_Receive (Socket);
  IF State <> SUCCESS THEN
  BEGIN
    Writeln ('Error');
    IPX_Close_Socket ...
    EXIT;
  END;
:
:


FUNCTION IPX_Done ( Socket : WORD; Code : BYTE;
                            VAR Source_Addr : Network_Address;
                            VAR Buffer : SData ) : BYTE;

��������:
������� ���������� ������ ����� ���������� �������� � IPX.
��� ��������� ����������, ��������� ��� ��� ��������� �������� � ������ �������, � ����� - ������ �� ������ ��� ������.

���������:
Socket = ����� ������, ��� �������� ����������� ���������� ��������
(����� ������ ������ ����������� � 16-������ �����).

Code = ��� ��������, ���������� ������� ����� �����������.
���� �������� ����� ����� ��������� ��������:
SEND - ��� �������� ������� ������� IPX_Send;
RECEIVE - ��� �������� ������� ������� IPX_Receive.

Source_Addr = ������������ �������� �������� �������� ������ ��������� �������, �� ������� �������� ������.

Buffer = �����, � ������� ���������� �������� ������.

������������ ��������:
SUCCESS
��������� ������� ��������� �������.

NOT_ENDED
��������� ������� ��� �� ���������.

PARAMETER_ERROR
�������� �������� ��� ������ �������, ��� ��������� ����� �� ����������.

DEVICE_SW_ERROR
������� IPX ����������.

DEVICE_HW_ERROR
�������� ������ ��������� ���������� ��-�� ����������� ����.

PACKET_BAD
�������� ����� ������ (������ 30 ����, ��� ������ 546 ����).

PACKET_UNDELIVERIABLE
�������� ������ ���������� (��������, � ���� �� ������� �������-����������).

PACKET_OVERFLOW
�������� ����� ������� �����, � �� ���������� � Buffer.

������:
VAR
  State   : BYTE;
  Socket  : WORD;
  Adresse : Network_Address;
  Daten   : SData;

:
:
  IPX_Setup ...
:
  IPX_Open_Socket ...
:
  IPX_Send ...
:
  State := IPX_Done (Socket, SEND, Adresse, Daten);
  WHILE State = NOT_ENDED DO
    State := IPX_Done (Socket, SEND, Adresse, Daten);
:
:

���

:
:
  IPX_Receive ...
:
  State := IPX_Done (Socket, RECEIVE, Adresse, Daten);
  IF State = SUCCESS THEN
  BEGIN
    Read Data ...
:
:


FUNCTION IPX_Internetwork_Address ( VAR Network : S4Byte; VAR Node : S6Byte ) : BYTE;

��������:
������� ���������� ����� ���� � ����� ������������ ����, �.�. �������, �� ������� �������� �������.

���������:
Network = ����� ����

Node = ����� ����

������������ ��������:
SUCCESS
������� ��������� �������.

������:
VAR
  State : BYTE;
  Net   : S4Byte;
  Node  : S6Byte;
:
:
  IPX_Setup ...
:
  State := IPX_Internetwork_Address (Net,Node);
:
:


FUNCTION IPX_To_Addr ( Network : String; Node : String;
                        Socket : String; VAR Addr : Network_Address; ) : BYTE;

��������:
������� ������������ ������� ������ � �������� ������ ���� Network_Address.

���������:
Network = ����� ����

Node = ����� ����

Socket = ����� ������

Addr = ������������ ��������� ���������������.

������������ ��������:
SUCCESS
��������������� ������ �������.

PARAMETER_ERROR
������� ��������� �� ����� ���� ���������������.




FUNCTION IPX_From_Addr ( Addr : Network_Address; VAR Network : String;
                              VAR Node : String; VAR Socket : String; ) : BYTE;


��������:
������� ������������ ������ ������� ����� � ��������� ����������.

���������:
Addr = ������ ������� �����

Network = ����� ����

Node = ����� ����

Socket = ����� ������

������������ ��������:
SUCCESS
��������������� ������ �������.

PARAMETER_ERROR
��������� ����� �� ����� ���� ��������������.



6. ����������� � ��������
��� ������������� ���������� ������� �������� ������ �������� �� ��������� �������:

  • ����� ������ ������� IPX_Send � IPX_Receive ����������� ������ ���� �������� ������� IPX_Done.
    ��������� ��������� � ��������� �������� ��� ������ � ���� �� ������ ��������� ������ ����� ���������� ���������� ��������.
    ������������ ������� ���������� ������� ������� ������������ ������.

  • ������� IPX_Send ����� �������� ������ � ���� �������, ��� ������� IPX_Receive � IPX_Done ����� �� ���������.

    ����� �� ��������� ������� ���� �������� ����� ������� �������������� ���������� �������� ������, �������� �� ���� ������������� ������� Delay() ����� ������� ������ IPX_Send. ������, ��� ���� ��������� ����� ���������� ����������� ���������.

    ������ ��������� ����� ���� ������������� �� ����������� ������� ����� ���������� ������� ��� ������. ��� ���� ���������� ������� ������ �������� ���� ������ �� ��������� ������ �������-����������.

  • IPX �������� ����������, �� ��������� �����������, �.�. �������� ������� �� �������������. ���� ���������� ������� ���������� ������ ��������� ������, ��� ����������� ������� �� �������� �� �������� ��� ����������, �� ��� ���� ���������� ������� ����� �� ������ ������ �� ���� ����������� �������...

    ������������ ������ ��� ������������ (���� ����������) � ���, ����� ������������ ������ �������������� ���� �������� ����������� ��������.
    ����� ����� ��������, ��������, � ������� �������� ������������� � ������ � ����������� ������� �� ����������.

  • ��������� ������ ������� ������� � ���, ��� ����� ����������� ���������� ��� �������� ���������������� ������ ������ ���� �������.
    ��� ���������� ��� ����, ����� �������� ��� ���������� �������� ������ ���������� � �������� IPX.



����������
[1] NetWare System Interface Technical Overview, Novell Incorporated,
     Novell Part # 100-000569-001.

[1a] NetWare System Calls-DOS Volume I and II, Novell Development Products Division,
     Novell Part # 100-0005571-001.

[2] LAN Protocol Handbook, Mark A. Miller, P.E., M&T Books, ISBN 1-55851-099-0

[3] Turbo Pascal Version 6.0. ����������� ������������, Borland Int.