
David Jaša píše v Pá 15. 06. 2012 v 15:10 +0200:
Daniel P. Berrange píše v Pá 15. 06. 2012 v 11:54 +0100:
On Fri, Jun 15, 2012 at 12:44:04PM +0200, Gerd Hoffmann wrote:
On 06/15/12 12:00, Daniel P. Berrange wrote:
On Fri, Jun 15, 2012 at 11:48:28AM +0200, Gerd Hoffmann wrote:
Hi,
* new spice-server feature: add option to bind to a selected interface regardless of its addresses
How does that work?
I presume the client app would request listen=eth0, and the QEMU would have to call getifaddrs() to determine what IP addresses currently correspond to eth0.
Ah, so there isn't a direct way I'm not aware of, you still bind to a specific ip address (or multiple), just specified in a different way ;)
Note that supporting this isn't going to work with a single listening socket. Having ipv6 sockets accept ipv4 connects too works for wildcard sockets only. If you want listening on all ip{v4,v6} addresses of an interface you'll need a listening socket for each.
Yeah, I'm almost certain you'll need to have multiple listening sockets for this to work
Daniel
Well, I've checked what my local dnsmasq does and it's doing precisely what you say: tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 29426/dnsmasq tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 29426/dnsmasq tcp 0 0 ::1:53 :::* LISTEN 29426/dnsmasq tcp 0 0 fe80::4c03:d0ff:fec2:aa7:53 :::* LISTEN 29426/dnsmasq
In other words, dual-socket won't make dual-stack for selected interface possible without implementing https://bugzilla.redhat.com/show_bug.cgi?id=787256 anyway. :(
David
Scratch that. After some more research, I found this in socket (7): SO_BINDTODEVICE Bind this socket to a particular device like "eth0", as speci- fied in the passed interface name. If the name is an empty string or the option length is zero, the socket device binding is removed. The passed option is a variable-length null-termi- nated interface name string with the maximum size of IFNAMSIZ. If a socket is bound to an interface, only packets received from that particular interface are processed by the socket. Note that this only works for some socket types, particularly AF_INET sockets. It is not supported for packet sockets (use normal bind(8) there) So using wildcard address and this socket option should be the least-effort way to support dual-stack display networks if I get it right... David -- David Jaša, RHCE SPICE QE based in Brno GPG Key: 22C33E24 Fingerprint: 513A 060B D1B4 2A72 7F0D 0278 B125 CD00 22C3 3E24