Subject: Re: pkgsrc/wakeup with multiple interfaces
To: None <current-users@NetBSD.org>
From: David Young <dyoung@pobox.com>
List: current-users
Date: 12/12/2005 01:02:29
On Mon, Dec 12, 2005 at 12:18:35AM -0600, John F wrote:
> Hi all!
> 
> 	I'm trying to figure out how to make a C program send out a udp 
> packet to the broadcast address and select which interface is used.

John,

Reading your patch, it looks like it gets the interface-specific source
using select_if, and then overwrites it with INADDR_ANY before calling
bind(2).  Maybe you are on the right track, you just have a bug?

For a multicast UDP socket, I specify the outbound interface by its
ifindex, like this:

        uint32_t addr;

        addr = htonl(ifindex);
        if (setsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, &addr,
            (socklen_t)sizeof(addr)) == -1)
                err(EXIT_FAILURE, "%s: setsockopt(IP_MULTICAST_IF)", __func__);

ISTR this was not documented very well in the manual page ip(4).

Dave

-- 
David Young             OJC Technologies
dyoung@ojctech.com      Urbana, IL * (217) 278-3933