On Fri, Mar 07, 2014 at 10:04:48PM +0400, Roman Bogorodskiy wrote: > Daniel P. Berrange wrote: > > > On Fri, Mar 07, 2014 at 07:49:04PM +0400, Roman Bogorodskiy wrote: > > > Daniel P. Berrange wrote: > > > > > > > On Fri, Mar 07, 2014 at 06:15:24PM +0400, Roman Bogorodskiy wrote: > > > > > Daniel P. Berrange wrote: > > > > > > > > > > > All those mangled messages are being printed out by libvirt client > > > > > > code, and it is totally expected that log messages libvirt prints > > > > > > are mangled in this way for the console. > > > > > > > > > > > > What's more important is what data coming from the guest looks > > > > > > like. > > > > > > > > > > All those spaces come from the stream as well. For example, I've added > > > > > the following debugging to daemonStreamHandleRead() into > > > > > daemon/stream.c: > > > > > > > > > > 732 ret = virStreamRecv(stream->st, buffer, bufferLen); > > > > > 733 VIR_ERROR("buffer = [%s]", buffer); > > > > > > > > > > And it prints stuff like: > > > > > > > > > > 2014-03-07 13:29:34.060+0000: 34489787392: error : > > > > > daemonStreamHandleRead:733 : buffer = [ File "/usr/bin/cloud raise > > > > > DataSourceNotFoundException(msg) > > > > > ] > > > > > 2014-03-07 13:29:34.060+0000: 34489787392: error : > > > > > daemonStreamHandleRead:733 : buffer = [ > > > > > ] > > > > > 2014-03-07 13:29:34.061+0000: 34489787392: error : > > > > > daemonStreamHandleRead:733 : buffer = [ > > > > > ] > > > > > 2014-03-07 13:29:34.061+0000: 34489787392: error : > > > > > daemonStreamHandleRead:733 : buffer = [ > > > > > ] > > > > > > > > The debug logs are *always* going to be strange when you have the > > > > terminal in raw mode. If you're debugging the console support you > > > > really must not try to use stderr for debug logs - you'll never get > > > > sane results. Set libvirt to log to a file or syslog instead. > > > > > > That's strange because libvirtd and virsh use different terminals for > > > logging, but I've disabled stderr logging to be on the safe side. > > > > > > Anyway, I've conducted an experiment like you suggested: > > > > > > 1. run 'virsh' on linux to freebsd libvirtd, output is mangled: > > > > > > http://people.freebsd.org/~novel/misc/ttyweirdness2.png > > > > > > 2. run 'virsh' on freebsd to linux libvirtd, output is good: > > > > > > http://people.freebsd.org/~novel/misc/ttyweirdness3.png > > > > > > Guest uses the same image and the same domain xml. > > > > > > Also, I removed all my custom debug stuff from virsh except mutex lock > > > (as it doesn't work otherwise). So the problem seem to be on the > > > libvirtd side... > > > > Agreed, it is either libvirtd or bhyve that's the source of the > > mangling then. > > Very unlikely that it's bhyve, as I'm testing with qemu (plan to get to > bhyve when I'll be able to get it fixed for qemu). Oh, I didn't realize you were testing this with QEMU on BSD! One further idea I just had - in QEMU code util/qemu-openpty.c we call cfmakeraw()/tcsetattr on the PTY slave file descriptor. On Linux at least this affects both ends of the device, but I wonder if there's perhaps a need to call this on the master file descriptor as well as or instead of on the slave file descriptor ? Or perhaps the client (in this case libvirtd) itself has to call cfmakeraw/tcsetattr since although its opening the same slave, it is a different file descriptor for the slave > And considering that 'cu' works properly, it's most likely the daemon. > I'll continue looking in this direction. Thanks for the pointer, that > helped to narrow down the problem indeed. True, but interesting to strace 'cu' and libvirtd to see what differences they have if any when opening the slave FD. > > Roman Bogorodskiy Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list