Sending multicast datagrams broken (regression)
Pieter de Goeje
pieter at degoeje.nl
Sat Jul 18 18:56:57 UTC 2009
I'm observing that multicast IPv4 UDP datagrams sent from the latest 8.0-BETA2
are being discarded. The code below used to work with 7.2.
Sender Receiver Result
----------------------
8.0 8.0 Broken, but loop back traffic works
8.0 7.2 Broken
7.2 8.0 Works
Oddly enough, when I run tcpdump on a 8.0 sender, it shows packets being sent,
but on the receiver tcpdump shows no activity whatsoever.
The receiver was properly registering it's membership (which was verified with
ifmcstat).
Testing was done on three hosts, two of which are running 8.0 and one 7.2. The
hosts are connected using a single switch. I've tried if_em and if_re NICs,
both with the same results.
Kind regards,
Pieter de Goeje
PS.
I can post complete code if necessary.
----
fd is initialized with a freshly created AF_INET datagram socket, maddr
contains the group address (239.255.9.9 in the test case, but I've tried
multiple different addresses).
void doit(int fd, in_addr_t maddr, int port)
{
struct sockaddr_in addr;
int cnt;
struct ip_mreq mreq;
char message[] = "Hello";
memset(&addr, 0, sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=maddr;
addr.sin_port=htons(port);
u_char ttl = 2;
if(setsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl,
sizeof(ttl)) == -1) {
err(1, "setsockopt");
}
for(;;) {
if(sendto(fd, message, sizeof(message) - 1, 0,
(struct sockaddr *)&addr, sizeof(addr)) == -1) {
err(1, "sendto");
}
sleep(1);
}
}
More information about the freebsd-current
mailing list