UNIX: разработка сетевых приложений
Часть 201 из 399 Информация о книге
struct rt_msghdr { /* из <net/route.h> */u_short rtm_msglen; /* для пропуска некорректных сообщений */u_char rtm_version; /* для обеспечения двоичной совместимости в будущем */u_char rtm_type; /* тип сообщения */u_short rtm_index; /* индекс интерфейса, с которым связан адрес */int rtm_flags; /* флаги */int rtm_addrs; /* битовая маска, идентифицирующая sockaddr (структуру адресасокета) в msg */pid_t rtm_pid; /* идентификация отправителя */int rtm_seq; /* для идентификации действия отправителем */int rtm_errno; /* причина неудачного выполнения */int rtm_use; /* из rtentry */u_long rtm_inits; /* какую метрику мы инициализируем */struct rt_metrics rtm_rmx; /* сами метрики */};struct if_msghdr { /* из <net/if.h> */u_short ifm_msglen; /* для пропуска некорректных сообщений */u_char ifm_version; /* для обеспечения двоичной совместимости в будущем */u_char ifm_type; /* тип сообщения */int ifm_addrs; /* как rtm_addrs */int ifm_flags; /* значение if_flags */u_short ifm_index; /* индекс интерфейса, с которым связан адрес */struct if_data ifm_data; /* статистические и другие сведения */};struct ifa_msghdr { /* из <net/if.h> */u_short ifam_msglen; /* для пропуска некорректных сообщений */u_char ifam_version; /* для обеспечения двоичной совместимости в будущем */u_char ifam_type; /* тип сообщения */int ifam_addrs; /* как rtm_addrs */int ifam_flags; /* значение ifa_flags */u_short ifam_index; /* индекс интерфейса, с которым связан адрес */int ifam_metric; /* значение ifa_metric */};struct ifma_msghdr { /* из <net/if.h> */u_short ifmam_msglen; /* для пропуска некорректных сообщений */u_char ifmam_version; /* для обеспечения двоичной совместимости в будущем */u_char ifmam_type; /* тип сообщения */int ifmam_addrs; /* аналог rtm_addrs */int ifmam_flags; /* значение ifa_flags */u_short ifmam_index; /* индекс связанного ifp */};struct if_announcemsghdr { /* из <net/if.h> */u_short ifan_msglen; /* для пропуска некорректных сообщений */u_char ifan_version; /* для обеспечения двоичной совместимости в будущем */u_char ifan_type; /* тип сообщения */u_short ifan_index; /* индекс связанного ifp */char ifan_name[IFNAMSIZ]; /* название интерфейса, напр. "en0" */u_short ifan_what; /* тип объявления */};Первые три элемента каждой структуры одни и те же: длина, версия и тип сообщения. Тип — это одна из констант из первого столбца табл. 18.1. Элемент длины
позволяет приложению пропускать типы сообщений, которые оно не распознает.xxx_msglenЭлементы
,rtm_addrsиifm_addrsявляются битовыми масками, указывающими, какая из возможных восьми структур адреса сокета следует за сообщением. В табл. 18.2 показаны константы и значения для битовой маски, определяемые в заголовочном файлеifam_addrs.<net/route.h>Таблица 18.2. Константы, используемые для ссылки на структуры адреса сокета в маршрутизирующих сообщениях
Битовая маска, константа Битовая маска, значение Индекс массива, константа Индекс массива, значение Структура адреса сокета содержит RTA_DST 0x01 RTAX_DST 0 Адрес получателя RTA_GATEWAY 0x02 RTAX_GATEWAY 1 Адрес шлюза RTA_NETMASK 0x04 RTAX_NETMASK 2 Маска сети RTA_GENMASK 0x08 RTAX_GENMASK 3 Маска клонирования RTA_IFP 0x10 RTAX_IFP 4 Имя интерфейса RTA_IFA 0x20 RTAX_IFA 5 Адрес интерфейса RTA_AUTHOR 0x40 RTAX_AUTHOR 6 Отправитель запроса на перенаправление RTA_BRD 0x80 RTAX_BRD 7 Адрес получателя типа «точка-точка» или широковещательный RTAX_MAX 8 Максимальное количество элементов