Commit 86d6bc2a authored by Guido Trotter's avatar Guido Trotter
Browse files

kvm console: use socat raw mode with escape

If this is enabled at configure time, we pass in different parameters to
the socat console, making it a lot more manageable.
Signed-off-by: default avatarGuido Trotter <>
Reviewed-by: default avatarIustin Pop <>
parent 87c1d0c7
......@@ -165,6 +165,8 @@ XEN_INITRD = _autoconf.XEN_INITRD
KVM_PATH = _autoconf.KVM_PATH
VALUE_DEFAULT = "default"
VALUE_AUTO = "auto"
......@@ -115,6 +115,18 @@ class KVMHypervisor(hv_base.BaseHypervisor):
return '%s/%s.serial' % (cls._CTRL_DIR, instance_name)
def _SocatUnixConsoleParams():
"""Returns the correct parameters for socat
If we have a new-enough socat we can use raw mode with an escape character.
if constants.SOCAT_ESCAPE:
return "raw,echo=0,escape=%s" % constants.SOCAT_ESCAPE_CODE
return "echo=0,icanon=0"
def _InstanceKVMRuntime(cls, instance_name):
"""Returns the instance KVM runtime filename
......@@ -684,15 +696,8 @@ class KVMHypervisor(hv_base.BaseHypervisor):
if hvparams[constants.HV_SERIAL_CONSOLE]:
# FIXME: The socat shell is not perfect. In particular the way we start
# it ctrl+c will close it, rather than being passed to the other end.
# On the other hand if we pass the option 'raw' (or ignbrk=1) there
# will be no way of exiting socat (except killing it from another shell)
# and ctrl+c doesn't work anyway, printing ^C rather than being
# interpreted by kvm. For now we'll leave it this way, which at least
# allows a minimal interaction and changes on the machine.
shell_command = ("%s STDIO,echo=0,icanon=0 UNIX-CONNECT:%s" %
shell_command = ("%s STDIO,%s UNIX-CONNECT:%s" %
(constants.SOCAT_PATH, cls._SocatUnixConsoleParams(),
shell_command = "echo 'No serial shell for instance %s'" %
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment