Я пытаюсь присоединиться к многоадресному потоку IGMP с машины Centos 8, но после отправки JOIN трафик с коммутатора отсутствует.
Простое подключение:
Мультиплексор <-----------> cisco3850 <--------> Centos8
192.168.117.13 192.168.117.21
Восходящий коммутатор (Cisco Catalyst 3850) получает MPEG-TS на 239.1.1.1:4000 от мультиплексора.
я пробовал оба сокат и моя собственная программа для открытия сокета, присоединения к потоку и удержания сокета открытым. Оба отправляют одно и то же сообщение о присоединении к IGMP, подтвержденное wireshark:
Протокол управления группой Интернета
    [Версия IGMP: 3]
    Тип: Отчет о членстве (0x22)
    Зарезервировано: 00
    Контрольная сумма: 0xe9fb [верно]
    [Статус контрольной суммы: Хороший]
    Зарезервировано: 0000
    Количество групповых записей: 1
    Групповая запись: 239.1.1.1 Изменить режим исключения
        Тип записи: Изменить на режим исключения (4)
        Длина дополнительных данных: 0
        Номер источника: 0
        Многоадресный адрес: 239.1.1.1
С использованием ip маршрут добавить Я создал маршруты для мультикаст-групп к интерфейсу:
224.0.0.0/4 dev eth1 ссылка на область видимости
225.0.0.0/8 dev eth1 ссылка на область видимости
239.0.0.0/8 dev eth1 ссылка на область видимости
и кот /proc/net/igmp показывает, что к группе присоединились:
кот /proc/net/igmp
Устройство Idx: подсчет пользователей Querier Group Timer Reporter
3 эт1 : 2 В3
                                030101E1 1 0:00000000 0
                                010000E0 1 0:00000000 0
я подозревать это проблема с коммутатором, а не с Linux, но клиент (владеющий коммутатором) говорит, что все в порядке.
Что еще я могу сделать на стороне Linux, чтобы исследовать/исправить эту проблему?
Если проблема в коммутаторе, то в чем? Что там нужно настроить? (необходимо объяснить клиенту)
Для справки, моя программа, которая присоединяется и удерживает сокет открытым, выглядит так:
// Проверка ошибок для краткости опущена
fd = сокет (PF_INET, SOCK_DGRAM, IPPROTO_IP);
setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(yes);
memset(&saddr, 0, sizeof(saddr));
saddr.sin_family = PF_INET;
saddr.sin_addr.s_addr = mcastAddr;
saddr.sin_port = htons (порт);
bind(fd, (struct sockaddr *)&saddr, sizeof(saddr);
структура ip_mreq mcastReq;
mcastReq.imr_multiaddr.s_addr = mcastAddr;
&mcastReq.imr_interface.s_addr = адрес_интерфейса;
setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mcastReq, sizeof(mcastReq);