Книга: UNIX: разработка сетевых приложений
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 |
Рассмотрим несколько примеров сообщений и расширений, используемых в типичных операциях с сокетами управления ключами.
- 4.4.3. Чтение и запись
- 1.18. Запись телефонных звонков
- 19.2.4. Чтение и запись значений элементов HTML-форм
- 19.2.5. Чтение и запись содержимого элемента
- 19.2.1. Чтение и запись значений HTML-атрибутов
- 3.4 ЧТЕНИЕ И ЗАПИСЬ ДИСКОВЫХ БЛОКОВ
- 5.3. Чтение каталогов
- 5.3.1. Базовое чтение каталогов
- Запись в файл в Python. Метод write().
- 16.2. Неблокируемые чтение и запись: функция str_cli (продолжение)
- Чтение и запись данных
- Чтение и запись