xen-pv-channel(7)
π xen-pv-channel(7) β Xen PV Channels π
okay bestie, welcome to xen-pv-channel(7) β the manual page for Xen PV Channels. it's giving low-bandwidth private byte-stream realness, and honestly? iconic. no cap. π¦
πΈ NAME πΈ
xen-pv-channel β Xen PV Channels π
β¨ DESCRIPTION β¨
A channel is a low-bandwidth private byte stream similar to a serial link. Typical uses of channels are:
- to provide initial configuration information to a VM on boot (example use:
CloudStack'scloud-early-configservice) π - to signal/query an in-guest agent (example use:
oVirt's guest agent) β¨
Channels are similar to virtio-serial devices and emulated serial links. Channels are intended to be used in the implementation of libvirt s when running on Xen π«Ά
Note: if an application requires a high-bandwidth link then it should use vchan instead. literally do not try to make channels carry your huge data stream, bestie π
π¦ How to use channels: an example π¦
Consider a cloud deployment where VMs are cloned from pre-made templates, and customised on first boot by an in-guest agent which sets the IP address, hostname, ssh keys etc. To install the system the cloud administrator would first:
- Install a guest as normal (no channel configuration necessary) π
- Install the in-guest agent specific to the cloud software. This will prepare the guest to communicate over the channel, and also prepare the guest to be cloned safely (sometimes known as "sysprepping") π§
- Shutdown the guest
- Register the guest as a template with the cloud orchestration software
- Install the cloud orchestration agent in dom0
At runtime, when a cloud tenant requests that a VM is created from the template, the sequence of events would be: (assuming a Linux domU)
- A VM is "cloned" from the template
- A unique Unix domain socket path in dom0 is allocated (e.g.
/my/cloud/software/talk/to/domain/) π - Domain configuration is created for the VM, listing the channel name expected by the in-guest agent. In
xlsyntax this would be:
channel = [ "connection=socket,
name=org.my.cloud.software.agent.version1, path =
/my/cloud/software/talk/to/domain/" ]
- The VM is started
- In dom0 the cloud orchestration agent connects to the Unix domain socket, writes a handshake message and waits for a reply
- Assuming the guest kernel has
CONFIG_HVC_XEN_FRONTENDset then the console driver will generate a hotplug event π₯ - A udev rule is activated by the hotplug event.
The udev rule would look something like:
SUBSYSTEM=="xen", DEVPATH=="/devices/console-[0-9]",
RUN+="xen-console-setup"
where the xen-console-setup script would read the channel name and make a symlink in /dev/xen-channel/org.my.cloud.software.agent.version1 pointing to /dev/hvcN. N is the same number as the number in "/devices/console-[0-9]". In other words, "/devices/console-2" maps to /dev/hvc2. π«
- The in-guest agent uses
inotifyto see the creation of the/dev/xen-channelsymlink and opens the device. - The in-guest agent completes the handshake with the dom0 agent
- The dom0 agent transmits the unique VM configuration: hostname, IP address,
ssh keysetc etc - The in-guest agent receives the configuration and applies it.
Using channels avoids having to use a temporary disk device or network connection. slay π
πΈ Design recommendations and pitfalls πΈ
It's necessary to install channel-specific software (an "agent") into the guest before you can use a channel. By default a channel will appear as a device which could be mistaken for a serial port or regular console. It is known that some software will proactively seek out serial ports and issue AT commands at them; make sure such software is disabled! π«
Since channels are identified by names, application authors must ensure their channel names are unique to avoid clashes. We recommend that channel names include parts unique to the application such as domain names. To assist prevent clashes we recommend authors add their names to our global channel registry at the end of this document. π
π Limitations π
Hotplug and unplug of channels is not currently implemented. yeah. that's the whole vibe for now π
π Channel name registry π
It is important that channel names are globally unique. To help ensure that no-one's name clashes with yours, please add yours to this list. π
Key:
N: Name
C: Contact
D: Short description of use, possibly including a URL to your software or API
N: org.xenproject.guest.clipboard.0.1
C: David Scott <dave.scott@citrix.com>
D: Share clipboard data via an in-guest agent. See:
https://wiki.xenproject.org/wiki/Clipboard_sharing_protocol
okay that's the whole page, bestie β signing off with xen-pv-channel(7), source/version 4.20.5-pre, dated 2026-10-16 πβ¨
π¦ where this page comes from
- debian trixie: xen-utils-common 4.20.4+39-gf1e1321c87-0+deb13u1 Β· GPL-2.0-only
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms