[libvirt-users] host to VM serial device configuration

Hi, I'm trying to get a virtual serial device up and running between my host and virtual machine with a device name on the host. I'm using libvirt 0.8.3 and qemu 0.13.0. The challenge that I'm running into is that I'm able to get a serial device, but I cannot fix it to a pre- defined device name. For example, I'm using the following in my VM's xml file: <serial type='pty'> <source path='/dev/pts/19' /> <target port='0' /> </serial> As I said this works, but it doesn't set the host side to /dev/pts/ 19. Is there any way to do this? thanks, JP

于 2011年01月12日 23:11, John Paul Walters 写道:
Hi,
I'm trying to get a virtual serial device up and running between my host and virtual machine with a device name on the host. I'm using libvirt 0.8.3 and qemu 0.13.0. The challenge that I'm running into is that I'm able to get a serial device, but I cannot fix it to a pre-defined device name. For example, I'm using the following in my VM's xml file:
<serial type='pty'> <source path='/dev/pts/19' /> <target port='0' /> </serial>
As I said this works, but it doesn't set the host side to /dev/pts/19. Is there any way to do this?
I could reproduce it, trying to find out why. Regards Osier

On Fri, Jan 14, 2011 at 11:50:01AM +0800, Osier Yang wrote:
于 2011年01月12日 23:11, John Paul Walters 写道:
Hi,
I'm trying to get a virtual serial device up and running between my host and virtual machine with a device name on the host. I'm using libvirt 0.8.3 and qemu 0.13.0. The challenge that I'm running into is that I'm able to get a serial device, but I cannot fix it to a pre-defined device name. For example, I'm using the following in my VM's xml file:
<serial type='pty'> <source path='/dev/pts/19' /> <target port='0' /> </serial>
As I said this works, but it doesn't set the host side to /dev/pts/19. Is there any way to do this?
I could reproduce it, trying to find out why.
When using type='type', the source path is an output only attribute. You can't control it yourself, it is autoassigned by the kernel as it sees fit. Regards, Daniel

On 14/01/2011, at 9:39 PM, Daniel P. Berrange wrote:
On Fri, Jan 14, 2011 at 11:50:01AM +0800, Osier Yang wrote:
于 2011年01月12日 23:11, John Paul Walters 写道:
Hi,
I'm trying to get a virtual serial device up and running between my host and virtual machine with a device name on the host. I'm using libvirt 0.8.3 and qemu 0.13.0. The challenge that I'm running into is that I'm able to get a serial device, but I cannot fix it to a pre-defined device name. For example, I'm using the following in my VM's xml file:
<serial type='pty'> <source path='/dev/pts/19' /> <target port='0' /> </serial>
As I said this works, but it doesn't set the host side to /dev/pts/19. Is there any way to do this?
I could reproduce it, trying to find out why.
When using type='type', the source path is an output only attribute. You can't control it yourself, it is autoassigned by the kernel as it sees fit.
Any idea if it's the kind of thing whose name could be selected or changed using udev rules?

On Sat, Jan 15, 2011 at 01:09:07AM +1100, Justin Clift wrote:
On 14/01/2011, at 9:39 PM, Daniel P. Berrange wrote:
On Fri, Jan 14, 2011 at 11:50:01AM +0800, Osier Yang wrote:
于 2011年01月12日 23:11, John Paul Walters 写道:
Hi,
I'm trying to get a virtual serial device up and running between my host and virtual machine with a device name on the host. I'm using libvirt 0.8.3 and qemu 0.13.0. The challenge that I'm running into is that I'm able to get a serial device, but I cannot fix it to a pre-defined device name. For example, I'm using the following in my VM's xml file:
<serial type='pty'> <source path='/dev/pts/19' /> <target port='0' /> </serial>
As I said this works, but it doesn't set the host side to /dev/pts/19. Is there any way to do this?
I could reproduce it, trying to find out why.
When using type='type', the source path is an output only attribute. You can't control it yourself, it is autoassigned by the kernel as it sees fit.
Any idea if it's the kind of thing whose name could be selected or changed using udev rules?
No, these aren't normal devices. This is a magic filesystem which creates entries on the fly. Daniel

On Jan 14, 2011, at 9:44 AM, Daniel P. Berrange wrote:
On Sat, Jan 15, 2011 at 01:09:07AM +1100, Justin Clift wrote:
On 14/01/2011, at 9:39 PM, Daniel P. Berrange wrote:
On Fri, Jan 14, 2011 at 11:50:01AM +0800, Osier Yang wrote:
于 2011年01月12日 23:11, John Paul Walters 写道:
Hi,
I'm trying to get a virtual serial device up and running between my host and virtual machine with a device name on the host. I'm using libvirt 0.8.3 and qemu 0.13.0. The challenge that I'm running into is that I'm able to get a serial device, but I cannot fix it to a pre- defined device name. For example, I'm using the following in my VM's xml file:
<serial type='pty'> <source path='/dev/pts/19' /> <target port='0' /> </serial>
As I said this works, but it doesn't set the host side to /dev/ pts/19. Is there any way to do this?
I could reproduce it, trying to find out why.
When using type='type', the source path is an output only attribute. You can't control it yourself, it is autoassigned by the kernel as it sees fit.
Any idea if it's the kind of thing whose name could be selected or changed using udev rules?
No, these aren't normal devices. This is a magic filesystem which creates entries on the fly.
Thanks for the replies. I'm not necessarily stuck on type='pty'. I just need to be able to pin the device name or a pipe name to something known on the host side. Along those lines, I've tried using type='pipe' like so: <serial type='pipe'> <source path='/tmp/mypipe' /> <target port='1' /> </serial> I've created the /tmp/mypipe.in and /tmp/mypipe.out using mkfifo per the qemu directions. But I'm not sure what this is supposed to look like on the VM-side. I notice that I have a ttyS1 in the VM, which I believe is connected to the pipe on the host side, but do I use this as a serial device or as a named pipe? regards, JP

Hey John, If I understand correctly, you are trying to get access to the character device after you've created the domain. The exact device is auto-assigned when the VM is created, but you can get the correct device from the domain XML after the domain is running. I use 'type=pty' in my domain definition XML. I then extract the device that was assigned to the domain using the following bit of python: import xml.etree.cElementTree as etree xml = etree.fromstring(myDomainObject.XMLDesc(0)) tty = xml.find('devices').find('console').attrib['tty'] Hope this helps! --Igor On Fri, Jan 14, 2011 at 02:35:31PM -0500, John Paul Walters wrote:
On Jan 14, 2011, at 9:44 AM, Daniel P. Berrange wrote:
On Sat, Jan 15, 2011 at 01:09:07AM +1100, Justin Clift wrote:
On 14/01/2011, at 9:39 PM, Daniel P. Berrange wrote:
On Fri, Jan 14, 2011 at 11:50:01AM +0800, Osier Yang wrote:
于 2011年01月12日 23:11, John Paul Walters 写道:
Hi,
I'm trying to get a virtual serial device up and running between my host and virtual machine with a device name on the host. I'm using libvirt 0.8.3 and qemu 0.13.0. The challenge that I'm running into is that I'm able to get a serial device, but I cannot fix it to a pre- defined device name. For example, I'm using the following in my VM's xml file:
<serial type='pty'> <source path='/dev/pts/19' /> <target port='0' /> </serial>
As I said this works, but it doesn't set the host side to /dev/pts/19. Is there any way to do this?
I could reproduce it, trying to find out why.
When using type='type', the source path is an output only attribute. You can't control it yourself, it is autoassigned by the kernel as it sees fit.
Any idea if it's the kind of thing whose name could be selected or changed using udev rules?
No, these aren't normal devices. This is a magic filesystem which creates entries on the fly.
Thanks for the replies. I'm not necessarily stuck on type='pty'. I just need to be able to pin the device name or a pipe name to something known on the host side. Along those lines, I've tried using type='pipe' like so:
<serial type='pipe'> <source path='/tmp/mypipe' /> <target port='1' /> </serial>
I've created the /tmp/mypipe.in and /tmp/mypipe.out using mkfifo per the qemu directions. But I'm not sure what this is supposed to look like on the VM-side. I notice that I have a ttyS1 in the VM, which I believe is connected to the pipe on the host side, but do I use this as a serial device or as a named pipe?
regards, JP
_______________________________________________ libvirt-users mailing list libvirt-users@redhat.com https://www.redhat.com/mailman/listinfo/libvirt-users

On Tue, 2011-01-18 at 04:13 -0600, Igor Serebryany wrote:
Hey John,
If I understand correctly, you are trying to get access to the character device after you've created the domain. The exact device is auto-assigned when the VM is created, but you can get the correct device from the domain XML after the domain is running.
I use 'type=pty' in my domain definition XML. I then extract the device that was assigned to the domain using the following bit of python:
import xml.etree.cElementTree as etree xml = etree.fromstring(myDomainObject.XMLDesc(0)) tty = xml.find('devices').find('console').attrib['tty']
Hope this helps!
--Igor
Thanks Igor, that works perfectly. best, JP
participants (5)
-
Daniel P. Berrange
-
Igor Serebryany
-
John Paul Walters
-
Justin Clift
-
Osier Yang