Протокол монтирования

Опубликовано в Технологии > Серверные технологии Продолжение

Протокол монтирования, описанный в главе 24, также определен с применением технологии RPC. Хотя сервер NFS всегда используется в сочетании с сервером монтирования, эти два серверных компонента должны быть определены как отдельные удаленные программы. Поэтому в стандарте протокола монтирования указаны константы, типы и набор удаленных процедур, которые входят в состав сервера.

Определения констант протокола монтирования

Хотя оба указанных протокола определены отдельно, значения многих констант и типов, заданных для протокола монтирования, соответствуют константам, применяемым в протоколе NFS. Действительно, оба эти протокола не могли бы успешно взаимодействовать, если бы в них не использовались одинаковые представления для таких объектов, как дескрипторы файлов. Например, в протоколе монтирования размеры имени файла, составного имени и дескриптора файла определены следующим образом:

const MNTPATHLEN = 1024; /* Максимальное число символов в составном имени */ 
const MNTNAMLEN = 255? /* Максимальное число символов в имени */
const FHSIZE3 =64; /* Число октетов в дескрипторе файла NFS */

В этих объявлениях используется синтаксис RPC; в каждом из них длина выражается числом байтов.

Определения типов монтирования

Протокол монтирования содержит также определения типов, которые соответствуют их аналогам, применяемым в протоколе NFS. Например, в протоколе монтирования определен следующий тип дескриптора файла:

typedef opaque fhandle3;

Аналогичным образом, в протоколе монтирования указано, что составное имя представляет собой массив символов: typedef string dirpath;

Структуры данных монтирования

Поскольку протокол монтирования был определен с использованием технологии RPC, он соответствует общепринятому соглашению по объявлению структуры для параметров и результатов каждой удаленной процедуры. Например, одна из основных процедур этого протокола возвращает дескриптор файла для корневого каталога в именованной иерархии. Возвращаемое значение представляет собой объединение mountres3, объявленное следующим образом:

Как и в протоколе NFS, каждая удаленная процедура в протоколе монтирования возвращает информацию о состоянии наряду с другой информацией. В случае неудачного завершения операции информация о состоянии указывает причину неудачи.

Кроме процедуры, возвращающей дескриптор файла, в протоколе монтирования предусмотрена процедура, позволяющая определить в клиентской программе, какие файловые системы предназначены для доступа. Процедура возвращает результаты в виде связанного списка, который называется списком экспорта. Тип узла в списке экспорта объявлен как структура exportnode; определен также тип указателя для этой структуры — exports:

typedef struct exportnode *exports;
struct exportnode {   /* Список доступных иерархий */
dirpath ex_dir;    /* Составное имя пути для этой иерархии */ groups ex_groupsj /* Группы, которым разрешен доступ к ней */ exports exjiextj   /* Указатель на следующий элемент в списке */
}?
 

Поле ex_groups узла exportnode содержит указатель на связанный список, который определяет, какие группы защиты имеют право доступа к именованной иерархии. Узлы в списке заданы как экземпляры структуры типа groupnode, а тип groups представляет собой указатель на узел groupnode:

typedef struct groupnode *groups;
struct groupnode { /* Список имен групп */ name grjiamej    /* Имя одной группы */
groups gr_next; /* Указатель на следующий элемент в списке */
}?
 

Протокол монтирования позволяет также определить в клиентской программе, к каким удаленным файловым системам на указанном компьютере происходит доступ. Это дает возможность построить с помощью системы NFS список перекрестных ссылок для ряда компьютеров. Для этой цели каждому компьютеру из списка передается запрос на получение перечня удаленных файловых систем, к которым имеет доступ данный компьютер. Следует отметить, что перечень удаленных файловых систем, доступных для данного компьютера, не совпадает с перечнем локальных файловых систем, экспортируемых компьютером в целях предоставления доступа к ним с других компьютеров.

Ответ с перечнем доступных файловых систем, формируемый программным обеспечением протокола монтирования, представляет собой связанный список, каждый узел которого имеет тип mountbody:

typedef struct mountbody *mountlist;
struct *mountbody {	/* Список удаленных монтируемых файловых систем */
name ml_hostname;	/* Компьютер, на котором находятся файлы */
dirpath ml_directory;    /* Составное имя корневого каталога */
/* иерархии каталогов */ mountlist mljiextentry; /* Указатель на следующий элемент в списке */
}?
 

Термин "экспорт" подчеркивает аналогию с тем, что сервер экспортирует часть своих файлов на другие компьютеры