Subject: Re: pkgsrc/wakeup with multiple interfaces
To: None <>
From: John F <>
List: current-users
Date: 12/13/2005 00:35:46
> On Mon, Dec 12, 2005, David Young wrote:
> 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?

I was getting embarrassed for a second there, but no, I believe it is not 
a bug.  There are two sockaddr_in structs, named client and server. 
select_if is called on server and then s_addr = INADDR_ANY is declared on 
client, or vice versa for try #2.

It may be a bit confusing to read the second patch I sent, since it was 
based off the first patch.  I was aiming for a smaller patch - I wanted to 
avoid resending the entire select_if function a second time.

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

Very cool..

It looks like the fourth argument, &addr, is the key here.

Its a very interesting bit of code.  The man page just talks about the 
SOL_SOCKET level and you're working at the IP level instead of the higher 
level socket level.  I see that this is documented in the 'ip' man page - 
which I haven't looked at carefully yet. (There is so much documentation 
to read..)  getsockopt says it uses &addr to access an option value, and 
you've run htonl on that.  So, ifindex has got to be a real IP address.. 
Well, I'll play with it and see what it does for me.

All of the above said...


net/wol...  Excellent!!  And, I wasn't aware that magic packets had a 
security feature?!  I don't believe my Mac OS X client computer implements 
that..  (I haven't checked, could be wrong, but iirc the gui simply 
provides a checkbox for en/disabling wake on lan.)

I think I'll continue to hack on the wakeup program a bit further, as at 
this point its a good/simple way for me to tool around with socket 
programming in C, but had I known about 'wol' earlier I would have never 
begun toying with 'wakeup'.  And, if I can't figure out how to do what I 
set out to do with 'wakeup' and just want to be done with it, or I just 
want to see a completely different approach to solving the problem, I will 
be using wol.  What a terrific suggestion!

Thank you David and thank you Daniel.

- John