2016-11-18 1 views
0

OpenWRT 라우터에서 현재 실행중인 간단한 멀티 캐스트 수신기 프로그램을 작성했습니다. 그러나이 소프트웨어는 멀티 캐스트 그룹으로부터 어떠한 데이터도받지 못합니다.openwrt 라우터에서 멀티 캐스트 수신기 소프트웨어가 작동하지 않습니다.

라우터에서 작동하는 멀티 캐스트 환경이 있습니다. (내 무선 장치는 동일한 멀티 캐스트 그룹에서 데이터를 보내고받을 수 있습니다.)하지만 소프트웨어를 사용하여 라우터에서 해당 그룹을 수신하려고하면 아무 것도 수신하지 않습니다.

참고 : Linux 데스크톱 컴퓨터에서 실행하면 동일한 소프트웨어가 제대로 작동합니다.

멀티 캐스트에서 tcpdump를 수행했습니다. 11.11.11.15 및 11.11.11.32는 네트워크에있는 두 개의 알려진 멀티 캐스트 발신자입니다.

[email protected]:/# tcpdump -n multicast 
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode 
listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes 
14:03:19.478476 IP 11.11.11.15.60472 > 239.0.0.38.12345: UDP, length 50 
14:03:24.480007 IP 11.11.11.15.60472 > 239.0.0.38.12345: UDP, length 50 
14:03:29.483429 IP 11.11.11.15.60472 > 239.0.0.38.12345: UDP, length 50 
14:03:34.479858 IP 11.11.11.15.60472 > 239.0.0.38.12345: UDP, length 50 
14:03:39.484171 IP 11.11.11.15.60472 > 239.0.0.38.12345: UDP, length 50 
14:03:44.483130 IP 11.11.11.15.60472 > 239.0.0.38.12345: UDP, length 50 
14:03:49.486375 IP 11.11.11.15.60472 > 239.0.0.38.12345: UDP, length 50 
14:03:54.492302 IP 11.11.11.15.60472 > 239.0.0.38.12345: UDP, length 50 
14:03:59.493509 IP 11.11.11.15.60472 > 239.0.0.38.12345: UDP, length 50 
14:04:04.495279 IP 11.11.11.15.60472 > 239.0.0.38.12345: UDP, length 50 
14:04:08.432849 IP 11.11.11.32.48484 > 239.0.0.38.12345: UDP, length 26 
14:04:08.432962 IP 11.11.11.32.48484 > 239.0.0.38.12345: UDP, length 26 
14:04:09.423884 IP 11.11.11.32.48484 > 239.0.0.38.12345: UDP, length 26 
14:04:09.424013 IP 11.11.11.32.48484 > 239.0.0.38.12345: UDP, length 26 

멀티 캐스트 수신자의 소스 코드입니다.

#define GROUP_PORT  12345 
#define GROUP_ADDRESS "239.0.0.38" 

int main(int argc, char *argv[]) 
{ 
    struct sockaddr_in addr; 
    struct ip_mreq mreq; 
    int hndlSocket, nbytes,addrlen; 
    char message[32]; 
    u_int allow=1; 

    memset(&addr, 0, sizeof(addr)); 
    addr.sin_family   = AF_INET; 
    addr.sin_addr.s_addr = htonl(INADDR_ANY); 
    addr.sin_port   = htons(GROUP_PORT); 
    mreq.imr_multiaddr.s_addr = inet_addr(GROUP_ADDRESS); 
    mreq.imr_interface.s_addr = htonl(INADDR_ANY); 

    if ((hndlSocket = socket(AF_INET, SOCK_DGRAM, 0)) < 0) 
    { 
     perror("socket"); 
    } 
    else if (setsockopt(hndlSocket, SOL_SOCKET, SO_REUSEADDR, &allow, sizeof(allow)) < 0) 
    { 
     perror("Reusing ADDR failed"); 
    } 
    else if (bind(hndlSocket, (struct sockaddr *) &addr, sizeof(addr)) < 0) 
    { 
     perror("bind"); 
    } 
    else if (setsockopt(hndlSocket, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)) < 0) 
    { 
     perror("setsockopt for multi membership"); 
    } 
    else 
    { 
     /* now just enter a read-print loop */ 
     while (true) 
     { 
      addrlen = sizeof(addr); 
      if ((nbytes=recvfrom(hndlSocket, message, sizeof(message), 0, (struct sockaddr *) &addr, &addrlen)) < 0) 
      { 
       perror("recvfrom"); exit(1); 
      } 
      puts(message); 
     } 
    } 
} 
+0

이 기사를 읽었습니까? https://wiki.openwrt.org/doc/howto/udp_multicast? –

+0

@VasilyG, 네, 거기에 지정된 모든 것을 얻었지만 여전히 작동하지 않았습니다. 그러나 나중에 나는 인터넷에서 연구를함으로써 나 자신을 만들었다. 또한 openwrt 페이지를 내 대답으로 업데이트 할 것입니다. 문제는 무선과 내가 생각하는 LAN 간의 다리였습니다. 해결책을 게시 해 주셔서 감사합니다. – rajeshk

+0

문제가 해결 된 것으로 표시되도록 수락하십시오. –

답변

0

다음 경로를 추가하면 매력적으로 작동합니다.

route add -net 224.0.0.0 netmask 224.0.0.0 wlan0 
관련 문제