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 используются для получения информации о конкретном соседе.