UDP multicast packets not seen on listening interface in BETA5
wpaul at FreeBSD.ORG
Thu Sep 29 15:14:37 PDT 2005
> I'm having a bit of trouble with a program I wrote to listen for
> multicast packets from my DSL modem in order to monitor/collect line
> stats. It has worked previously in 5.4 and 6.0-BETA3. The source is
> availabe here for anyone that wants to poke around in it:
> Anyway, recently I rebuilt world and the kernel from BETA5 sources
> (previously on BETA3 or thereabouts). The application no longer finds
> the multicast packets, but works fine in BETA3.
> Let me briefly describe what the program does. It simply bind()'s to
> port 1875/udp (INADDR_ANY), joins the proper multicast group, calls
> select() then recvfrom() to look for the packet. It waits for a
> timeout period, then fails if it doesn't see the packet in that time
> period, which is what is happening in BETA5.
> I ran tcpdump and I do see the packets hitting the interface:
> 09:00:45.394614 IP 192.168.1.254.1875 > 220.127.116.11.1875: UDP, length 120
> I suspect maybe I am not properly joining the multicast group, so it's
> ignoring the packet. But like I said, this worked in BETA3 which is
> why I'm stumped.
> nc -v -u -l 1875
> Doesn't see any packets either, for what it's worth, though I don't
> know off hand whether nc can do multicast or not.
> Also I verified the program is indeed listening with sockstat:
> root westell 2194 3 udp4 *:1875 *:*
> Any ideas where I can begin to troubleshoot this?
Well no, because you left out one vital piece of information, which is
what kind of network adapter are you using?
Yes, it matters.
Yes, you should feel silly for not thinking it was important enough to
mention. It's _ALWAYS_ important enough to mention. No, you aren't
allowed to play the "but I just wanted to see if this sounded familiar
to someone" game.
Running tcpdump, unless you use the -p flag, will put the NIC into
promiscuous mode. This means you'll pick up all multicast frames
(and everything else) regardless of how the NIC's multicast filter is
Just joining a group will not put the interface into promiscuous mode:
it'll just program the NIC's multicast filter to accept that particular
group. That is of course unless someone a) broke the driver for your
NIC or b) broke SIOCADDMULTI support somewhere in the stack. Until you
tell us what NIC you have, there's no easy way to tell which is the
-Bill Paul (510) 749-2329 | Senior Engineer, Master of Unix-Fu
wpaul at windriver.com | Wind River Systems
<adamw> you're just BEGGING to face the moose
More information about the freebsd-current