从eth0发送组播到eth1

我需要从eth0接口发送组播数据,并在Linux机器的eth1上接收。 我在C中有2个程序,PROG-1执行setsockopt IP_MULTICAST_IF,以便它从eth0发送,PROG-2在eth1上joinmcast组(通过netstat -ngvalidation),但是在eth1上看不到任何组播stream量。 我只能在eth0上看到多播数据。 我增加了TTL,但没有帮助。 有没有什么办法可以接收来自eth1 eth0的组播信息?
IP_MULTICAST_LOOP也没有帮助,只有当两个程序在同一个接口上工作时,它才起作用,这对我没有好处。
这是一个通过ipv4的自定义协议。

发件人代码:

sock_fd = socket( AF_INET, SOCK_RAW, 100 ); srcip = inet_addr("10.1.231.112"); /* src mcast from eth0 */ ret_val = setsockopt( sock_fd, IPPROTO_IP, IP_MULTICAST_IF, &srcip, sizeof( srcip )); ttl = 0x2; ret_val = setsockopt( sock_fd, IPPROTO_IP, IP_MULTICAST_TTL, ( char * ) &ttl, sizeof( ttl )); dest_addr.sin_addr.s_addr = inet_addr("224.100.1.102"); dest_addr.sin_family = AF_INET; dest_addr.sin_port = 0; ret_val = sendto(sock_fd, (char *) buf, (size_t) 64, 0, /* no flags */ (struct sockaddr *) &dest_addr, addr_len); 

收件人代码:

 sock_fd = socket( AF_INET, SOCK_RAW, 100 ); mreq.imr_multiaddr.s_addr = inet_addr("224.100.1.102"); mreq.imr_interface.s_addr = inet_addr("10.0.3.15"); /* join on eth1 */ ret_val = setsockopt( sock_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, ( char * ) &mreq, sizeof( mreq )); msglen = recvfrom(sock_fd, buf, 4096, 0, (struct sockaddr*)&addr_struct, &addr_len); 

我使用netstat -ngvalidation接收者是否join了eth1上的组,但发送者发送的消息只在eth0上可见(eth1上的wireshark没有捕获任何东西)。

让我解释我面对的确切问题。 我有一个通常在专有硬件上运行的生产代码。 这是一个networking通信软件。 所有通信都是通过多播完成的。 其结构是有一个TX任务正在向networking中的其他设备发送组播数据,不幸的是,由于其他networking设备正在与我的设备进行通信,所以有一个RX任务也正在join与TX任务发送数据相同的组在同一个mcast地址。 在产品代码中,我们禁用了组播循环,一切正常,RX任务不会收到TX任务发送的内容。 现在我们决定在linux机器上运行这个软件来进行testing,在同一台机器上我们要运行一个模拟所有其他机器的软件。 我想完成它以将生产代码上的所有mcast套接字“绑定”到eth0上,并在eth1上模拟器上。 但是我不能让他们彼此沟通。 我可以根据需要configurationnetworking接口,添加vlans,接口或其他任何东西,只是为了使其与另一个进行通信。 我不能做的是改变这个软件的架构。