как определить значение для поля ipv6mr_interface структуры ipv6_mreq - PullRequest
0 голосов
/ 23 октября 2009

Я пытаюсь создать сокет BSD для прослушивания сообщений с определенного адреса многоадресной рассылки IPv6. В настоящее время у меня нет проблем с созданием сокета, прослушивающего правильный адрес 0 :: 0.

Проблема в том, что я работаю на небольшом встроенном сервере Linux с несколькими сетевыми картами; здесь важно поле ipv6mr_interface в ipv6_mreq. Методом проб и ошибок я определил, что 0, 1 и 3 не работают, но 2 работает (это дает мне все многоадресные сообщения IPv6 на мой адрес ff05 :: 3, поступающие на правильный интерфейс).

Мой вопрос: как соотнести в linux мой интерфейс, чей адрес я знаю, с правильным номером интерфейса?

Ответы [ 2 ]

3 голосов
/ 25 октября 2009

возможно, вы можете взглянуть на функцию if_nametoindex (3) (см. В /usr/include/net/in.h).

С уважением, Рэй

0 голосов
/ 23 октября 2009

Подводя итог моим комментариям к исходному ответу:

  1. Стивенс (UNIX Network Programming Vol. 1) предлагает решение для сопоставления имени устройства с номером интерфейса. Это включает запрос таблицы маршрутизации ОС для номера интерфейса через необработанный сокет. Во втором издании это в разделе 17.6, а в третьем издании это в разделе 18.6.
  2. Вы также можете использовать файловую систему proc для сбора той же информации в первом варианте. Особый интерес представляет файл / proc / net / dev_mcast. Этот файл дает отображение между именем интерфейса и номером интерфейса; сопоставление IP-адреса с именем интерфейса, по-видимому, так же просто.

Предположительно, вариант 1 является наиболее надежным, поскольку файловая система proc может изменить то, как она организована, какая информация доступна и как она отформатирована. Я лично не знаком с тем, как часто ядро ​​Linux изменяет эти атрибуты, поэтому кто-то, имеющий больше информации об этом, может оставить комментарий или отредактировать это сообщение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...