Ek probeer by 'n IGMP multicast-stroom aansluit vanaf 'n Centos 8-masjien, maar nadat ek 'n JOIN gestuur het, kom daar geen verkeer van die skakelaar af nie.

Eenvoudige verbinding:

MUX <-----------> cisco3850 <--------> Centos8
192.168.117.13                         192.168.117.21

Die stroomopskakelaar (cisco catalyst 3850) word 'n MPEG-TS gevoer na 239.1.1.1:4000 vanaf die MUX.

Ek het albei socaten my eie program probeer om 'n sok oop te maak, by die stroom aan te sluit en die sok oop te hou. Albei stuur dieselfde IGMP-aansluitboodskap soos bevestig deur wireshark:

Internet Group Management Protocol
    [IGMP Version: 3]
    Type: Membership Report (0x22)
    Reserved: 00
    Checksum: 0xe9fb [correct]
    [Checksum Status: Good]
    Reserved: 0000
    Num Group Records: 1
    Group Record : 239.1.1.1  Change To Exclude Mode
        Record Type: Change To Exclude Mode (4)
        Aux Data Len: 0
        Num Src: 0
        Multicast Address: 239.1.1.1

Met behulp van ip route addEk het roetes vir multicast-groepe na die koppelvlak geskep:

224.0.0.0/4 dev eth1 scope link
225.0.0.0/8 dev eth1 scope link
239.0.0.0/8 dev eth1 scope link

en cat /proc/net/igmpwys die groep is aangesluit:

cat /proc/net/igmp
Idx     Device    : Count Querier       Group    Users Timer    Reporter
3       eth1      :     2      V3
                                030101E1     1 0:00000000               0
                                010000E0     1 0:00000000               0

Ek vermoed dit is 'n probleem met die skakelaar eerder as 'n Linux-probleem, maar die kliënt (wat die skakelaar besit) sê alles is reg.

Wat anders kan ek aan die Linux-kant doen om hierdie probleem te ondersoek/op te los?

As dit 'n probleem op die skakelaar is, wat dan? Wat moet daar gekonfigureer word? (moet verduidelik aan kliënt)


Ter verwysing, my program wat aansluit en die sok oop hou, lyk soos volg:

// Error checking omitted for brevity
fd = socket(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(port);

bind(fd, (struct sockaddr *)&saddr, sizeof(saddr);

struct ip_mreq mcastReq;
mcastReq.imr_multiaddr.s_addr = mcastAddr;
&mcastReq.imr_interface.s_addr = interfaceAddr;

setsockopt(sock, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mcastReq, sizeof(mcastReq);
no answer