RFC: 3549
Оригинал: Linux Netlink as an IP Services Protocol
Категория: Информационный
Дата публикации:
Авторы: , , ,
Перевод: Николай Малых

RFC 3549, Страница 17 из 21

3.2. Служба NETLINK_FIREWALL

Эта служба позволяет CPC принимать пакеты через сервисные модули межсетевого экрана IPv4 в FE, манипулировать этими пакетами и повторно передавать их. Правило межсетевого экрана является первым из числа вставляемых для активизации перенаправления пакетов. CPC информирует FEC о своем желании получать метаданные для пакета или реальные данные из него, а также сообщает максимальный размер данных, которые будут перенаправляться. Перенаправленные пакеты по-прежнему сохраняются в FEC, ожидая решения о своей судьбе от CPC. Решение может быть простой командой на восприятие или отбрасывание пакета (в этом случае решение применяется к пакету, все еще находящемуся в FEC) или включать измененный пакет, который должен быть передан взамен исходного.

Существует два типа сообщений, передаваемых от CPC к FEC — Mode (режим) и Verdict (решение). Сообщения типа Mode незамедлительно передаются FEC и сообщают о том, что CPC желает принимать от FEC. Сообщения типа Verdict передаются FEC после принятия решения о дальнейшей судьбе полученного пакета. Формат сообщений рассматривается ниже.

Опишем сначала сообщение, указывающее режим.

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|   Mode    |    Reserved1  |           Reserved2             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Range                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Mode — 8 битов
  • Определяет тип информации в пакетах, отправляемых CPC:

    • IPQ_COPY_META — копировать в CPC только метаданные для пакета.
    • IPQ_COPY_PACKET — копировать в CPC метаданные и содержимое поля данных пакета.
  • Range — 32 бита
  • В режиме IPQ_COPY_PACKET это значение определяет максимальный размер копируемых данных.

Пакет и связанные с ним метаданные, полученные из пользовательского пространства, показаны на рисунке:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Packet ID                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          Mark                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       timestamp_m                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       timestamp_u                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                          hook                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       indev_name                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       outdev_name                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           hw_protocol       |        hw_type                |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         hw_addrlen          |           Reserved            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       hw_addr                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       data_len                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Payload . . .                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Packet ID — 32 бита
  • Уникальный идентификатор пакета, передаваемый CPC от FEC.
  • Mark — 32 бита
  • Значение внутренних метаданных, установленное для описания правила, в котором был взят пакет.
  • timestamp_m — 32 бита
  • Время прибытия пакета (в секундах)
  • timestamp_u — 32 бита
  • Время прибытия пакета (микросекунды, добавляемые к timestamp_m)
  • hook — 32 бита
  • Модуль межсетевого экрана, из которого был взят пакет.
  • indev_name — 128 битов
  • Имя приемного интерфейса (строка ASCII).
  • outdev_name — 128 битов
  • Имя выходного интерфейса (строка ASCII).
  • hw_protocol — 16 битов
  • Аппаратный протокол (в сетевом порядке битов).
  • hw_type — 16 битов
  • Тип оборудования.
  • hw_addrlen — 8 битов
  • Размер аппаратного адреса.
  • hw_addr — 64 бита
  • Аппаратный адрес.
  • data_len — 32 бита
  • Размер данных в пакете.
  • Payload — размер задается полем data_len
  • Данные из полученного пакета.

Формат сообщений типа Verdict показан на рисунке:

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Value                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                       Packet ID                             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Data Length                            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                      Payload . . .                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Value — 32 бита
  • Решение, принятое по отношению к пакету, который по-прежнему находится в FEC. Поддерживаются значения:

    • NF_ACCEPT — принять пакет для дальнейшей обработки.
    • NF_DROP — отбросить (Drop) пакет.
  • Packet ID — 32 бита
  • Уникальный идентификатор пакета, передаваемый CPC от FEC.
  • Data Length — 32 бита
  • Размер данных в измененном пакете (в байтах). Если пакет не был изменен, это поле имеет значение 0.
  • Payload — размер определяется значением поля Data Length.

3.3. Служба NETLINK_ARPD

Этот сервис используется CPC для поддержки таблицы соседей в FE. Формат сообщений, передаваемых между FEC и CPC, описан параграфе, посвященном службе учета соседей (стр. 10).

Предполагается, что сервис CPC принимает участие в работе протоколов организации соседских отношений (neighbor solicitation protocol).

Сообщение типа RTM_NEWNEIGH передается CPC от FE для информирования CPC об изменениях, которые могут произойти с записью для этого соседа.

Сообщения RTM_GETNEIGH используются для получения информации о конкретном соседе.

Страница 17 из 21

2007 - 2022 © Русские переводы RFC, IETF, ISOC.