19.2. Чтение и запись

19.2. Чтение и запись

Все сообщения в сокете управления ключами должны иметь одинаковые заголовки, соответствующие листингу 19.1[1]. Сообщение может сопровождаться различными расширениями в зависимости от наличия дополнительной информации или необходимости ее предоставления. Все нужные структуры определяются в заголовочном файле <net/pfkeyv2.h>. Все сообщения и расширения подвергаются 64-разрядному выравниванию и дополняются до длин, кратных 64 разрядам. Все поля длины оперируют 64-разрядными единицами, то есть значение длины 1 означает реальную длину 8 байт. Расширение, не содержащее достаточного количества данных, дополняется произвольным образом до длины, кратной 64 разрядам.

Значение sadb_msg_type задает одну из десяти команд управления ключами. Типы сообщений перечислены в табл. 19.1. За заголовком sadb_msg может следовать произвольное количество расширений. Большинство сообщений имеют обязательные и необязательные расширения, которые будут описаны в соответствующих разделах. Шестнадцать типов расширений с названиями структур, их определяющих, перечислены в табл. 19.3.

Листинг 19.1. Заголовок сообщения управления ключами

struct sadb_msg {

 u_int8_t  sadb_msg_version;  /* PF_KEY_V2 */

 u_int8_t  sadb_msg_type;     /* см. табл. 19.1 */

 u_int8_t  sadb_msg_errno;    /* код ошибки */

 u_int8_t  sadb_msg_satype;   /* см. табл. 19.2 */

 u_int16_t sadb_msg_len;      /* длина заголовка и расширений / 8 */

 u_int16_t sadb_msg_reserved; /* нуль при передаче, игнорируется

                                 при получении */

 u_int32_t sadb_msg_seq;      /* порядковый номер */

 u_int32_t sadb_msg_pid;      /* идентификатор процесса отправителя

                                 или получателя */

};

Таблица 19.1. Типы сообщений

Тип сообщения К ядру От ядра Описание
SADB_ACQUIRE Запрос на создание записи в SADB
SADB_ADD Добавление записи в полную базу безопасности
SADB_DELETE Удаление записи
SADB_DUMP Дамп SADB (используется для отладки)
SADB_EXPIRE Уведомление об истечении срока действия записи
SADB_FLUSH Очистка всей базы безопасности
SADB_GET Получение записи
SADB_GETSPI Выделение SPI для создания записи SADB
SADB_REGISTER Регистрация для ответа на SADB_ACQUIRE
SADB_UPDATE Обновление записи в частичной SADB

Таблица 19.2. Типы соглашений о безопасности

Тип соглашения Описание
SADB_SATYPE_AH Аутентифицирующий заголовок IPSec
SADB_SATYPE_ESP ESP IPSec
SADB_SATYPE_MIP Идентификация мобильных пользователей (Mobile IP)
SADB_SATYPE_OSPFV2 Аутентификация OSPFv2
SADB_SATYPE_RIPV2 Аутентификация RIPv2
SADB_SATYPE_RSVP Аутентификация RSVP
SADB_SATYPE_UNSPECIFIED He определен

Таблица 19.3. Типы расширений PF_KEY

Тип заголовка расширения Описание Структура
SADB_EXT_ADDRESS_DST Адрес получателя SA sadb_address
SADB_EXT_ADDRESS_PROXY Адрес прокси-сервера SA sadb_address
SADB_EXT_ADDRESS_SRC Адрес отправителя SA sadb_address
SADB_EXT_IDENTITY_DST Личность получателя sadb_ident
SADB_EXT_IDENTITY_SRC Личность отправителя sadb_ident
SADB_EXT_KEY_AUTH Ключ аутентификации sadb_key
SADB_EXT_KEY_ENCRYPT Ключ шифрования sadb_key
SADB_EXT_LIFETIME_CURRENT Текущее время жизни SA sadb_lifetime
SADB_EXT_LIFETIME_HARD Жесткое ограничение на время жизни SA sadb_lifetime
SADB_EXT_LIFETIME_SOFT Гибкое ограничение на время жизни SA sadb_lifetime
SADB_EXT_PROPOSAL Предлагаемая ситуация sadb_prop
SADB_EXT_SA Соглашение о безопасности sadb_sa
SADB_EXT_SENSITIVITY Важность SA sadb_sens
SADB_EXT_SPIRANGE Диапазон допустимых значений SPI sadb_spirange
SADB_EXT_SUPPORTED_AUTH Поддерживаемые алгоритмы аутентификации sadb_supported
SADB_EXT_SUPPORTED_ENCRYPT Поддерживаемые алгоритмы шифрования sadb_supported

Рассмотрим несколько примеров сообщений и расширений, используемых в типичных операциях с сокетами управления ключами.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Чтение и запись файлов

Из книги Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT автора Фролов Александр Вячеславович

Чтение и запись файлов Для доступа к файлам предназначены пять различных методов класса CFile: Read, ReadHuge, Write, WriteHuge, Flush. Методы Read и ReadHuge предназначены для чтения данных из предварительно открытого файла. В 16-разрядной операционной системе Windows функция Read может считать не


Чтение и запись

Из книги Справочник по PHP автора

Чтение и запись freadЧитает из открытого файла определенное количество символов.Синтаксис:string fread(int $f, int $numbytes)Читает из файла $f $numbytes символов и возвращает строку этих символов. После чтения указатель файла продвигается к следующему после прочитанного блока позициям. Если


10.5.2. Чтение и запись из процесса

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

10.5.2. Чтение и запись из процесса Хотя system() отображает результат работы команды на устройство стандартного вывода и позволяет дочерним программам читать стандартный ввод, это не всегда идеально. Часто процесс желает читать вывод другого процесса либо отправлять текст на


11.2.4. Чтение, запись и перемещение

Из книги VBA для чайников автора Каммингс Стив

11.2.4. Чтение, запись и перемещение Хотя есть несколько способов читать и писать файлы, мы обсудим здесь только простейшие из них[42]. Чтение и запись почти идентичны, поэтому рассмотрим их одновременно.#include <unistd.h>size_t read(int fd, void * buf, size_t length);size_t read(int fd, const void * buf, size_t length);Обе


11.2.5. Частичное чтение и запись

Из книги C++. Сборник рецептов автора Диггинс Кристофер

11.2.5. Частичное чтение и запись Хотя обе функции — и read(), и write() — принимают параметр, указывающий, сколько байт нужно прочитать или записать, ни одна из них не гарантирует, что обработает указанное количество байт, даже если не случается никаких ошибок. Простейший пример


Чтение и запись данных

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Чтение и запись данных Есть несколько VBA-команд для записи и извлечения данных из файла. В приведенной ниже таблице описана их работа. Пример команды Использование Пояснение Оператор Put Предназначен для записи переменных в файл Put #1, 1800, StrQuote (записывает переменную


13.2. Запись и чтение чисел

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

13.2. Запись и чтение чисел ПроблемаТребуется записать число в поток в форматированном виде в соответствии с местными соглашениями.РешениеЗакрепите (imbue) текущую локализацию за потоком, в который вы собираетесь писать данные, и запишите в него числа, как это сделано в


13.3. Запись и чтение дат и времен

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

13.3. Запись и чтение дат и времен ПроблемаТребуется отобразить или прочитать значения дат и времен, используя местные соглашения по форматированию.РешениеИспользуйте тип time_t и tm struct из <ctime>, а также фасеты даты и времени, предусмотренные в <locale>, для записи и чтения


Чтение и запись данных

Из книги QT 4: программирование GUI на С++ автора Бланшет Жасмин

Чтение и запись данных Функции ввода/вывода верхнего уровня позволяют передавать данные различными способами.Операции чтения и записи в потоках начинаются с текущей. позиции в потоке, идентифицируемой как "file pointer"(указатель файла) для потока. Указатель файла изменяется


Чтение и запись данных

Из книги автора

Чтение и запись данных Функции read и write, как и функции ввода/вывода верхнего уровня, начинают выполнение очередной операции с текущей позиции в файле. Текущая позиция изменяется при каждой операции чтения или записи.Функция eof может быть использована для проверки на конец


Б.1. Чтение и запись данных

Из книги автора

Б.1. Чтение и запись данных Первая функция ввода-вывода, с которой сталкиваются те, кто начинают изучать язык С, называется printf(). Она форматирует текстовую строку и записывает ее в стандартный выходной поток. Обобщенная ее версия fprintf() записывает текст в заданный поток.


19.2. Чтение и запись

Из книги автора

19.2. Чтение и запись Все сообщения в сокете управления ключами должны иметь одинаковые заголовки, соответствующие листингу 19.1[1]. Сообщение может сопровождаться различными расширениями в зависимости от наличия дополнительной информации или необходимости ее