Re: [Spice-devel] An overview of Network redirection in Spice

2010-03-03 Thread Alexander Larsson
On Tue, 2010-03-02 at 09:29 -0500, Yonit Halperin wrote:

> 5.Printer discovery: We implemented printer discovery via SNMP and
> DNS-SD.
> Snmp++ library was used for SNMP. For DNS-SD we used Apple Bonjour
> API,
> while employing avahi-daemon in Linux and Apple Bonjour in Windows.

Please use the avahi libraries rather than bonjour. Its the standard API
on linux.

However, I wonder if this really is the best way to detect printers.
Many setups don't use autodetection, and autodetection sometimes seem a
bit risky (what if you don't trust the network you're on?). Wouldn't it
be better if the client avoided any automatic detection and just listed
whatever network printers are locally installed/detected on the OS
running the client (i.e. list from cups on linux, list installed
printers on windows).

-- 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 Alexander LarssonRed Hat, Inc 
   al...@redhat.comalexander.lars...@gmail.com 
He's a bookish ninja senator in a wheelchair. She's a violent mutant detective 
from a different time and place. They fight crime! 

___
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/spice-devel


Re: [Spice-devel] An overview of Network redirection in Spice

2010-03-02 Thread Arnon Gilboa

Of course, I meant a link from the site...

Arnon Gilboa wrote:

Great overview!
I finally understood what my neighbor was working on...
Please wikify it & add link@ http://cleo/qumrawiki/Spice
Arnon

Yonit Halperin wrote:

Hi,
I’ve previously worked on the network redirection feature, which part of
it is already in the upstream. Here, I present an overview of this 
feature

and its status.

Motivation
--
In many scenarios, the network that the Spice client resides in is not
accessible from the virtual machine. Thus, the user cannot access
resources that are located in the client's network (e.g., network
printers). The suggested solution provides an almost transparent 
access to

this network.

Solution overview
-
1.An additional virtual network card (nic) is installed on the VM.
This network card is dedicated for communication with the client-side
network
2.The nic's subnet is unique (henceforth, the virtual subnet).
3.Resources in the client-side that need to be accessed via the VM
receive virtual ip addresses in the range of the virtual subnet. The 
user
accesses these resources using the virtual ips. Therefore, all the 
packets

that are designated to these resources pass through the special nic.
4.All the network packets that pass through the special nic are
delivered to the Spice Server, via QEMU. Eventually, the actual 
connection
and data transfer to/from the physical resource are performed by the 
Spice

Client.
The server a) Performs the network stack analysis of the packets (e.g.,
handles the TCP protocol); b)  Sends to the client connection-control
instructions, e.g., open/close connection to a specific resource; c)
Tunnels to the client the buffers that need to be delivered to a 
specific

resource.
5.After a connection to a resource was established, it is
bidirectional, i.e., the client can tunnel to the server data that was
originated from the resource and that is designated to the VM. The 
client

can also send to the server control messages about the connection (e.g.,
the connection was closed). The server translates the information to
network packets and pushes them to the VM through the special nic.

Design details
--
1.Adding a nic: a special network device we added to Qemu, that
pushes all the packets to spice and can receive packets from spice.
2.Network stack analysis:  we use a modified version of Slirp.
Slirp was created by Danny Gasparovski. It emulates a PPP or SLIP
connection over a normal terminal. Qemu use its code mainly for their
“user” network (the –net user option). The Slirp code in Qemu transfers
the application layer of the packets to its destination by using BSD
sockets. However, we need to pass the application layer to/from the 
Spice

server. We took the Slirp code from Qemu,
and changed it to use a general interface for network connections 
that can

be set by the user of slirp. We fill it with callbacks to the
corresponding routines in the server.
Our intention was to ship Slirp as a library that hopefully will be 
useful

for other projects, and that Qemu will be able to use as well.
3.Spice: added a designated channel for network redirection. It is
called “tunnel channel”. Control data and “redirected” data is passed to
and from the client. The client pushes the redirected data to the
corresponding network resources and also can receive data from them and
sends it back to the server (and from there it is sent to the VM).
4.Generating virtual ips: In order to keep the virtual IPs
consistent with the resources they represent (in a specific network), we
generate them by hashing identifiers that are unique to the resource and
to the network it is located in. Thus, in different executions of Spice
client on the same network, each client-side resource will obtain the 
same

virtual IP it obtained in the previous executions. In this manner, we
preserve the validity of configurations in the VM that employ the 
virtual

IPs.
5.Printer discovery: We implemented printer discovery via SNMP and
DNS-SD.
Snmp++ library was used for SNMP. For DNS-SD we used Apple Bonjour API,
while employing avahi-daemon in Linux and Apple Bonjour in Windows.

Solution Advantages
---
-Transparent user experience for network services (mainly
printers). The user just need to know the virtual ip of the printer. We
can use Gui for that and configuration file.
-General solution for network resources (e.g., ftp serves). Not
only printers.
-It can be generalized to local resources as well.
-In the tunnel channel there is an option to process the
application layer - it can function as a firewall.
-Other solutions use a special guest-driver and/or a
guest-application. As far as I know most of them also depends on the
printer drivers installed on the client machine.
This solution is cross-platform (client and guest wise) and
client-independent.

Disadvantages
-
- Bandwidth: The rend

Re: [Spice-devel] An overview of Network redirection in Spice

2010-03-02 Thread Gerd Hoffmann

Motivation
--
In many scenarios, the network that the Spice client resides in is not
accessible from the virtual machine. Thus, the user cannot access
resources that are located in the client's network (e.g., network
printers). The suggested solution provides an almost transparent
access to
this network.



- Aren't you bypassing all network access controls en-route (firewalls,
ACLs, content-filtering, etc.) ?


Yes.


Solution overview
-
1. An additional virtual network card (nic) is installed on the VM.
This network card is dedicated for communication with the client-side
network
2. The nic's subnet is unique (henceforth, the virtual subnet).


What about IPv6?
Why go above layer 2?


I was about to ask the same question.  Why bother processing the packets 
in the spice server?  Just pass the raw ethernet frames through the 
tunnel channel over to the spice client.  Then it is up to the client to 
figure if and how it will hook up the virtual machine to the local 
network.  Using slirp in the spice client will be one (but not the only) 
option then.


cheers,
  Gerd

___
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/spice-devel


Re: [Spice-devel] An overview of Network redirection in Spice

2010-03-02 Thread Arnon Gilboa

Great overview!
I finally understood what my neighbor was working on...
Please wikify it & add link@ http://cleo/qumrawiki/Spice
Arnon

Yonit Halperin wrote:

Hi,
I’ve previously worked on the network redirection feature, which part of
it is already in the upstream. Here, I present an overview of this feature
and its status.

Motivation
--
In many scenarios, the network that the Spice client resides in is not
accessible from the virtual machine. Thus, the user cannot access
resources that are located in the client's network (e.g., network
printers). The suggested solution provides an almost transparent access to
this network.

Solution overview
-
1.  An additional virtual network card (nic) is installed on the VM.
This network card is dedicated for communication with the client-side
network
2.  The nic's subnet is unique (henceforth, the virtual subnet).
3.  Resources in the client-side that need to be accessed via the VM
receive virtual ip addresses in the range of the virtual subnet. The user
accesses these resources using the virtual ips. Therefore, all the packets
that are designated to these resources pass through the special nic.
4.  All the network packets that pass through the special nic are
delivered to the Spice Server, via QEMU. Eventually, the actual connection
and data transfer to/from the physical resource are performed by the Spice
Client.
The server a) Performs the network stack analysis of the packets (e.g.,
handles the TCP protocol); b)  Sends to the client connection-control
instructions, e.g., open/close connection to a specific resource; c)
Tunnels to the client the buffers that need to be delivered to a specific
resource.
5.  After a connection to a resource was established, it is
bidirectional, i.e., the client can tunnel to the server data that was
originated from the resource and that is designated to the VM. The client
can also send to the server control messages about the connection (e.g.,
the connection was closed). The server translates the information to
network packets and pushes them to the VM through the special nic.

Design details
--
1.  Adding a nic: a special network device we added to Qemu, that
pushes all the packets to spice and can receive packets from spice.
2.  Network stack analysis:  we use a modified version of Slirp.
Slirp was created by Danny Gasparovski. It emulates a PPP or SLIP
connection over a normal terminal. Qemu use its code mainly for their
“user” network (the –net user option). The Slirp code in Qemu transfers
the application layer of the packets to its destination by using BSD
sockets. However, we need to pass the application layer to/from the Spice
server. We took the Slirp code from Qemu,
and changed it to use a general interface for network connections that can
be set by the user of slirp. We fill it with callbacks to the
corresponding routines in the server.
Our intention was to ship Slirp as a library that hopefully will be useful
for other projects, and that Qemu will be able to use as well.
3.  Spice: added a designated channel for network redirection. It is
called “tunnel channel”. Control data and “redirected” data is passed to
and from the client. The client pushes the redirected data to the
corresponding network resources and also can receive data from them and
sends it back to the server (and from there it is sent to the VM).
4.  Generating virtual ips: In order to keep the virtual IPs
consistent with the resources they represent (in a specific network), we
generate them by hashing identifiers that are unique to the resource and
to the network it is located in. Thus, in different executions of Spice
client on the same network, each client-side resource will obtain the same
virtual IP it obtained in the previous executions. In this manner, we
preserve the validity of configurations in the VM that employ the virtual
IPs.
5.  Printer discovery: We implemented printer discovery via SNMP and
DNS-SD.
Snmp++ library was used for SNMP. For DNS-SD we used Apple Bonjour API,
while employing avahi-daemon in Linux and Apple Bonjour in Windows.

Solution Advantages
---
-   Transparent user experience for network services (mainly
printers). The user just need to know the virtual ip of the printer. We
can use Gui for that and configuration file.
-   General solution for network resources (e.g., ftp serves). Not
only printers.
-   It can be generalized to local resources as well.
-   In the tunnel channel there is an option to process the
application layer - it can function as a firewall.
-   Other solutions use a special guest-driver and/or a
guest-application. As far as I know most of them also depends on the
printer drivers installed on the client machine.
This solution is cross-platform (client and guest wise) and
client-independent.

Disadvantages
-
- Bandwidth: The rendered job (which can be much larger than the original
f

Re: [Spice-devel] An overview of Network redirection in Spice

2010-03-02 Thread Yaniv Kaul

On 2010-03-02 16:29, Yonit Halperin wrote:

Hi,
I’ve previously worked on the network redirection feature, which part of
it is already in the upstream. Here, I present an overview of this feature
and its status.

Motivation
--
In many scenarios, the network that the Spice client resides in is not
accessible from the virtual machine. Thus, the user cannot access
resources that are located in the client's network (e.g., network
printers). The suggested solution provides an almost transparent access to
this network.
   


- Is there really such a requirement? Is there such a real-life 
use-case? From my experience, if the printer is on the network, it can 
be reached from wherever is needed - or is specifically redirected.
- What else besides printing is a good candidate for network 
redirection? I doubt FTP (as the example below) is one of them.
- Aren't you bypassing all network access controls en-route (firewalls, 
ACLs, content-filtering, etc.) ? You are also in the way of WAN 
acceleration devices, which may have helped with the traffic, as well as 
QOS.



Solution overview
-
1.  An additional virtual network card (nic) is installed on the VM.
This network card is dedicated for communication with the client-side
network
2.  The nic's subnet is unique (henceforth, the virtual subnet).
   


What about IPv6?
Why go above layer 2?


3.  Resources in the client-side that need to be accessed via the VM
receive virtual ip addresses in the range of the virtual subnet. The user
accesses these resources using the virtual ips. Therefore, all the packets
that are designated to these resources pass through the special nic.
4.  All the network packets that pass through the special nic are
delivered to the Spice Server, via QEMU. Eventually, the actual connection
and data transfer to/from the physical resource are performed by the Spice
Client.
The server a) Performs the network stack analysis of the packets (e.g.,
handles the TCP protocol); b)  Sends to the client connection-control
instructions, e.g., open/close connection to a specific resource; c)
Tunnels to the client the buffers that need to be delivered to a specific
resource.
5.  After a connection to a resource was established, it is
bidirectional, i.e., the client can tunnel to the server data that was
originated from the resource and that is designated to the VM. The client
can also send to the server control messages about the connection (e.g.,
the connection was closed). The server translates the information to
network packets and pushes them to the VM through the special nic.

Design details
--
1.  Adding a nic: a special network device we added to Qemu, that
pushes all the packets to spice and can receive packets from spice.
2.  Network stack analysis:  we use a modified version of Slirp.
Slirp was created by Danny Gasparovski. It emulates a PPP or SLIP
connection over a normal terminal. Qemu use its code mainly for their
“user” network (the –net user option). The Slirp code in Qemu transfers
the application layer of the packets to its destination by using BSD
sockets. However, we need to pass the application layer to/from the Spice
server. We took the Slirp code from Qemu,
and changed it to use a general interface for network connections that can
be set by the user of slirp. We fill it with callbacks to the
corresponding routines in the server.
Our intention was to ship Slirp as a library that hopefully will be useful
for other projects, and that Qemu will be able to use as well.
   


Take from OpenVPN (or VPNc?) their virtual NIC. Makes more sense to me 
and works.

And the driver is already signed, works on all Windows OSes, etc.



3.  Spice: added a designated channel for network redirection. It is
called “tunnel channel”. Control data and “redirected” data is passed to
and from the client. The client pushes the redirected data to the
corresponding network resources and also can receive data from them and
sends it back to the server (and from there it is sent to the VM).
4.  Generating virtual ips: In order to keep the virtual IPs
consistent with the resources they represent (in a specific network), we
generate them by hashing identifiers that are unique to the resource and
to the network it is located in. Thus, in different executions of Spice
client on the same network, each client-side resource will obtain the same
virtual IP it obtained in the previous executions. In this manner, we
preserve the validity of configurations in the VM that employ the virtual
IPs.
5.  Printer discovery: We implemented printer discovery via SNMP and
DNS-SD.
Snmp++ library was used for SNMP. For DNS-SD we used Apple Bonjour API,
while employing avahi-daemon in Linux and Apple Bonjour in Windows.
   


Nobody but Apple uses Bonjour. How about UPNP and SSDP? SLP On Linux 
(donno if anyone's using it).



Solution Advantages
---
-   Transparent user experience for network 

[Spice-devel] An overview of Network redirection in Spice

2010-03-02 Thread Yonit Halperin
Hi,
I’ve previously worked on the network redirection feature, which part of
it is already in the upstream. Here, I present an overview of this feature
and its status.

Motivation
--
In many scenarios, the network that the Spice client resides in is not
accessible from the virtual machine. Thus, the user cannot access
resources that are located in the client's network (e.g., network
printers). The suggested solution provides an almost transparent access to
this network.

Solution overview
-
1.  An additional virtual network card (nic) is installed on the VM.
This network card is dedicated for communication with the client-side
network
2.  The nic's subnet is unique (henceforth, the virtual subnet).
3.  Resources in the client-side that need to be accessed via the VM
receive virtual ip addresses in the range of the virtual subnet. The user
accesses these resources using the virtual ips. Therefore, all the packets
that are designated to these resources pass through the special nic.
4.  All the network packets that pass through the special nic are
delivered to the Spice Server, via QEMU. Eventually, the actual connection
and data transfer to/from the physical resource are performed by the Spice
Client.
The server a) Performs the network stack analysis of the packets (e.g.,
handles the TCP protocol); b)  Sends to the client connection-control
instructions, e.g., open/close connection to a specific resource; c)
Tunnels to the client the buffers that need to be delivered to a specific
resource.
5.  After a connection to a resource was established, it is
bidirectional, i.e., the client can tunnel to the server data that was
originated from the resource and that is designated to the VM. The client
can also send to the server control messages about the connection (e.g.,
the connection was closed). The server translates the information to
network packets and pushes them to the VM through the special nic.

Design details
--
1.  Adding a nic: a special network device we added to Qemu, that
pushes all the packets to spice and can receive packets from spice.
2.  Network stack analysis:  we use a modified version of Slirp.
Slirp was created by Danny Gasparovski. It emulates a PPP or SLIP
connection over a normal terminal. Qemu use its code mainly for their
“user” network (the –net user option). The Slirp code in Qemu transfers
the application layer of the packets to its destination by using BSD
sockets. However, we need to pass the application layer to/from the Spice
server. We took the Slirp code from Qemu,
and changed it to use a general interface for network connections that can
be set by the user of slirp. We fill it with callbacks to the
corresponding routines in the server.
Our intention was to ship Slirp as a library that hopefully will be useful
for other projects, and that Qemu will be able to use as well.
3.  Spice: added a designated channel for network redirection. It is
called “tunnel channel”. Control data and “redirected” data is passed to
and from the client. The client pushes the redirected data to the
corresponding network resources and also can receive data from them and
sends it back to the server (and from there it is sent to the VM).
4.  Generating virtual ips: In order to keep the virtual IPs
consistent with the resources they represent (in a specific network), we
generate them by hashing identifiers that are unique to the resource and
to the network it is located in. Thus, in different executions of Spice
client on the same network, each client-side resource will obtain the same
virtual IP it obtained in the previous executions. In this manner, we
preserve the validity of configurations in the VM that employ the virtual
IPs.
5.  Printer discovery: We implemented printer discovery via SNMP and
DNS-SD.
Snmp++ library was used for SNMP. For DNS-SD we used Apple Bonjour API,
while employing avahi-daemon in Linux and Apple Bonjour in Windows.

Solution Advantages
---
-   Transparent user experience for network services (mainly
printers). The user just need to know the virtual ip of the printer. We
can use Gui for that and configuration file.
-   General solution for network resources (e.g., ftp serves). Not
only printers.
-   It can be generalized to local resources as well.
-   In the tunnel channel there is an option to process the
application layer - it can function as a firewall.
-   Other solutions use a special guest-driver and/or a
guest-application. As far as I know most of them also depends on the
printer drivers installed on the client machine.
This solution is cross-platform (client and guest wise) and
client-independent.

Disadvantages
-
- Bandwidth: The rendered job (which can be much larger than the original
file) is sent from the host to the client. This is problematic on WAN.
(Other solutions send the file as it is to the client, and as mentioned
before, depend on