Модуль IPX для NOVELL-NETWAREРуководство пользователяШкола инженеров, Берн HTLДипломная работа, 1991Rene 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, а также об аппаратном и программном обеспечении 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 и различные прикладные программы.
Рис. 1. Приложения могут обращаться к сетевому окружению различными способами [Рис. 2]. На "Сетевом" уровне доступен протокол IPX, обеспечивающий коммуникацию без подтверждений между станциями в сети. Взаимодействие на "Транспортном" уровне обеспечивает протокол SPX, поддерживающий коммуникацию с обязательным подтверждением. NETBIOS-совместимые приложения могут обращаться непосредственно к уровню "Сессий". "Workstation Shell" - это ДОС-совместимое сетевое окружение рабочей станции, допускающее коммуникацию только между рабочей станцией и сервером. Без дополнительного программного обеспечения непосредственная связь между двумя Workstation Shell невозможна.
Описываемый здесь "Модуль IPX для NOVELL-NETWARE" обеспечивает пользователю возможность обмена данными между рабочими станциями в сети Ethernet IEEE 802.3, и предоставляет для этого все необходимые функции на языке TURBO-PASCAL. Эти функции являются интерфейсом к "Сетевому" уровню NOVELL-NETWARE за счет реализации протокола IPX. IPX является протоколом, не требующим подключения, т.е. если одна из рабочих станций должна взаимодействовать с другой станцией, то для этого не требуется никакой дополнительной промежуточной станции (например, сервера). IPX-пакеты содержат адрес получателя и отправляются непосредственно к станции-получателю. Каждый пакет является самодостаточным и не имеет никакого логического отношения к другим пакетам. Протокол IPX работает через так называемые коммуникационные сокеты, которые необходимо создать перед любой отправкой или приемом данных. При передаче данных всегда должен указываться полный сетевой адрес, включая номер сети, номер узла, и номер сокета. Преимущества протокола IPX:
Недостатки протокола 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; Network_Address = RECORD Network : S4Byte; Node : S6Byte; Socket : WORD; END; Длина данных для типа 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. Ограничения и проблемы При использовании библиотеки следует обратить особое внимание на следующие моменты:
Литература [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. | |||||||||||||||||||||||||||||||||||||