[Engine-devel] [Spice-devel] [libvirt] RFC: spice-server default listen behaviour change
David Jaša
djasa at redhat.com
Fri Jun 15 13:33:57 UTC 2012
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
More information about the Devel
mailing list