3. Определенные в данный момент IP-службы Netlink
Хотя, как было отмечено выше, существует множество других служб IP, использующих Netlink, в данном документе рассматривается лишь небольшая часть этих служб, интегрированных в ядро версии 2.4.6. К таким службам относятся NETLINK_ROUTE, NETLINK_FIREWALL и NETLINK_ARPD.
3.1. Служба NETLINK_ROUTE
Эта служба позволяет CPC изменять таблицу маршрутизации IPv4 в машине пересылки FE. Кроме того, данный сервис может применяться CPC для получения данных об обновлении маршрутов и сбора статистики.
3.1.1. Модуль службы маршрутизации
Эта служба обеспечивает возможность создания и удаления маршрутов, а также получения информации о сетевых маршрутах. Формат шаблона сообщения показан на рисунке:
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 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Family | Src length | Dest length | TOS | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Table ID | Protocol | Scope | Type | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Flags | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
- Family — 8 битов
- Идентификатор семейства адресов: AF_INET для IPv4 и AF_INET6 для IPv6.
- Src length — 8 битов
- Размер префикса IP-адреса отправителя.
- Dest length — 8 битов
- Размер префикса IP-адреса получателя.
- TOS — 8 битов
- Восьмибитовое поле TOS (следует отказаться от него для освобождения места под DSCP).
- Table ID — 8 битов
Идентификатор таблицы. Поддерживается до 255 таблиц маршрутизации.
RT_TABLE_UNSPEC Неуказанная таблица. RT_TABLE_MAIN Основная таблица. RT_TABLE_DEFAULT Используемая по умолчанию таблица. RT_TABLE_LOCAL Локальная таблица. Пользователь может выделять дополнительные значения в диапазоне от RT_TABLE_UNSPEC (0) до RT_TABLE_DEFAULT (253).
- Protocol — 8 битов
Указывает кто добавил маршрут в таблицу.
Протокол Источник маршрута RTPROT_UNSPEC Неизвестен. RTPROT_BOOT При загрузке системы. RTPROT_REDIRECT Из сообщения ICMP redirect. RTPROT_STATIC Администратор. RTPROT_KERNEL Ядро. Значения, превышающие RTPROT_STATIC (4), не интерпретируются ядром и включены только с информационными целями. Эти значения могут использоваться, чтобы помечать источник маршрутной информации или различать разные демоны маршрутизации. Идентификаторы уже присвоенные демонам маршрутизации вы можете найти в файле <linux/rtnetlink.h>.
- Scope — 8 битов
Область видимости маршрута (корректная дистанция до получателя).
RT_SCOPE_UNIVERSE Глобальный маршрут. RT_SCOPE_SITE Внутренний маршрут локальной автономной системы. RT_SCOPE_LINK Маршрут на данном канале (соединении). RT_SCOPE_HOST Маршрут на локальном хосте. RT_SCOPE_NOWHERE Получателя не существует. Значения в диапазоне от RT_SCOPE_UNIVERSE (0) до RT_SCOPE_SITE (200), не включая граничные, могут использоваться для пользовательских идентификаторов.
- Type — 8 битов
- Тип маршрута.
Тип Получатель RTN_UNSPEC Неизвестный маршрут RTN_UNICAST Шлюз или прямой маршрут. RTN_LOCAL Маршрут к локальному интерфейсу. RTN_BROADCAST Локальный широковещательный маршрут (передается как broadcast). RTN_ANYCAST Локальный anycast-маршрут (передается как unicast) RTN_MULTICAST Локальный групповой (multicast) маршрут. RTN_BLACKHOLE Маршрут для отбрасывания пакетов без уведомления (черная дыра). RTN_UNREACHABLE Недостижимый получатель. Пакеты отбрасываются с передачей отправителю сообщения ICMP о недоступности адресата. RTN_PROHIBIT Запрещенный маршрут. Пакеты отбрасываются с передачей отправителю сообщения ICMP о запрете доступа к адресату. RTN_THROW При использовании маршрутизации на базе правил указывает на продолжение просмотра маршрутов в другой таблице. При обычной маршрутизации пакеты отбрасываются с передачей отправителю сообщения ICMP о недоступности адресата. RTN_NAT Правило трансляции сетевых адресов. RTN_XRESOLVE Указывает на внешний преобразователь (resolver). В настоящее время еще не реализовано. - Flags — 32 бита
Дополнительная информация о маршруте.
RTM_F_NOTIFY При изменении маршрута пользователю передается уведомление. RTM_F_CLONED Маршрут клонирован из другого маршрута. RTM_F_EQUALIZE Маршрут допускает случайный выбор следующего интервала (next hop) в случае наличия нескольких путей (в настоящее время не реализовано). Имеющие отношение к данному сервису атрибуты перечислены в таблице.
Атрибут Описание RTA_UNSPEC Игнорируется. RTA_DST Протокольный адрес источника маршрута. RTA_SRC Протокольный адрес конечной точки маршрута. RTA_IIF Индекс входного интерфейса. RTA_OIF Индекс выходного интерфейса. RTA_GATEWAY Протокольный адрес шлюза для маршрута. RTA_PRIORITY Приоритет маршрута. RTA_PREFSRC Предпочтительный адрес отправителя при наличии нескольких адресов. RTA_METRICS Присвоенная маршруту метрика (например, RTT, начальный размер окна TCP и т.п.). RTA_MULTIPATH Атрибуты следующего интервала для маршрута с множеством путей (Multipath route). RTA_PROTOINFO Атрибут маршрутизации, основанный на политике межсетевого экрана. RTA_FLOW Область маршрута (Route realm). RTA_CACHEINFO Кэшированная информация о маршруте. Для этого типа сервиса поддерживаются дополнительные сообщения Netlink RTM_NEWROUTE, RTM_DELROUTE и RTM_GETROUTE.