2016-11-18 5 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