# 3270 devices

The 3270 is the classic ‘green-screen’ console of the mainframes (see the IBM 3270 Wikipedia article).

The 3270 data stream is not implemented within QEMU; the device only provides TN3270 (a telnet extension; see RFC 854 and RFC 1576) and leaves the heavy lifting to an external 3270 terminal emulator (such as `x3270`) to make a single 3270 device available to a guest. Note that this supports basic features only.

To provide a 3270 device to a guest, create a `x-terminal3270` linked to a `tn3270` chardev. The guest will see a 3270 channel device. In order to actually be able to use it, attach the `x3270` emulator to the chardev.

## Example configuration

- Make sure that 3270 support is enabled in the guest’s Linux kernel. You need `CONFIG_TN3270` and at least one of `CONFIG_TN3270_TTY` (for additional ttys) or `CONFIG_TN3270_CONSOLE` (for a 3270 console).

- Add a `tn3270` chardev and a `x-terminal3270` to the QEMU command line:

      -chardev socket,id=ch0,host=0.0.0.0,port=2300,nowait,server,tn3270
      -device x-terminal3270,chardev=ch0,devno=fe.0.000a,id=terminal0

- Start the guest. In the guest, use `chccwdev -e 0.0.000a` to enable the device.

- On the host, start the `x3270` emulator:

      x3270 <host>:2300

- In the guest, locate the 3270 device node under `/dev/3270/` (say, `tty1`) and start a getty on it:

      systemctl start serial-getty@3270-tty1.service

  This should get you an additional tty for logging into the guest.

- If you want to use the 3270 device as the Linux kernel console instead of an additional tty, you can also append `conmode=3270 condev=000a` to the guest’s kernel command line. The kernel then should use the 3270 as console after the next boot.

## Restrictions

3270 support is very basic. In particular:

- Only one 3270 device is supported.

- It has only been tested with Linux guests and the x3270 emulator.

- TLS/SSL is not supported.

- Resizing on reattach is not supported.

- Multiple commands in one inbound buffer (for example, when the reset key is pressed while the network is slow) are not supported.