[libvirt] [PATCH v2] Generate unique socket file
Pavel Hrdina
phrdina at redhat.com
Tue Jul 25 21:04:31 UTC 2017
On Tue, Jul 25, 2017 at 09:33:50AM -0500, Scott Garfinkle wrote:
> It's possible to have more than one unnamed virtio-serial unix channel.
> We need to generate a unique name for each channel. Currently, we use
> ".../unknown.sock" for all of them. Better practice would be to specify
> an explicit target path name; however, in the absence of that, we need
> uniqueness in the names we generate internally.
>
> Before the changes we'd get /var/lib/libvirt/qemu/channel/target/unknown.sock
> for each instance of
> <channel type='unix'>
> <source mode='bind'/>
> <target type='virtio'/>
> </channel>
>
> Now, we get vioser-00-00-01.sock, vioser-00-00-02.sock, etc.
>
> Changes from v1: new socket name
>
> Signed-off-by: Scott Garfinkle <seg at us.ibm.com>
>
> ---
> src/qemu/qemu_domain.c | 24 +++++++++++++++-------
> .../qemuxml2argv-channel-virtio-unix.args | 2 +-
> 2 files changed, 18 insertions(+), 8 deletions(-)
>
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 78e75f1..7a9958d 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -7178,18 +7178,28 @@ int
> qemuDomainPrepareChannel(virDomainChrDefPtr channel,
> const char *domainChannelTargetDir)
> {
> - if (channel->targetType == VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO &&
> - channel->source->type == VIR_DOMAIN_CHR_TYPE_UNIX &&
> - !channel->source->data.nix.path) {
> + if (channel->targetType != VIR_DOMAIN_CHR_CHANNEL_TARGET_TYPE_VIRTIO ||
> + channel->source->type != VIR_DOMAIN_CHR_TYPE_UNIX ||
> + channel->source->data.nix.path)
> + return 0;
> +
> + if (channel->target.name) {
> if (virAsprintf(&channel->source->data.nix.path,
> "%s/%s", domainChannelTargetDir,
> - channel->target.name ? channel->target.name
> - : "unknown.sock") < 0)
> + channel->target.name) < 0)
> + return -1;
> + } else { // Generate a unique name
We don't allow this type of comment, since this patch is already pushed,
I'll fix it.
Pavel
> + if (virAsprintf(&channel->source->data.nix.path,
> + "%s/vioser-%02d-%02d-%02d.sock",
> + domainChannelTargetDir,
> + channel->info.addr.vioserial.controller,
> + channel->info.addr.vioserial.bus,
> + channel->info.addr.vioserial.port) < 0)
> return -1;
> -
> - channel->source->data.nix.listen = true;
> }
>
> + channel->source->data.nix.listen = true;
> +
> return 0;
> }
>
> diff --git a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args
> index 2b72965..8e0452a 100644
> --- a/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args
> +++ b/tests/qemuxml2argvdata/qemuxml2argv-channel-virtio-unix.args
> @@ -29,7 +29,7 @@ path=/tmp/channel/domain--1-QEMUGuest1/org.qemu.guest_agent.0,server,nowait \
> -device virtserialport,bus=virtio-serial0.0,nr=1,chardev=charchannel0,\
> id=channel0,name=org.qemu.guest_agent.0 \
> -chardev socket,id=charchannel1,\
> -path=/tmp/channel/domain--1-QEMUGuest1/unknown.sock,server,nowait \
> +path=/tmp/channel/domain--1-QEMUGuest1/vioser-00-00-02.sock,server,nowait \
> -device virtserialport,bus=virtio-serial0.0,nr=2,chardev=charchannel1,\
> id=channel1 \
> -chardev socket,id=charchannel2,path=/tmp/channel/domain--1-QEMUGuest1/ble,\
> --
> 1.8.3.1
>
> --
> libvir-list mailing list
> libvir-list at redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20170725/3a169ea7/attachment-0001.sig>
More information about the libvir-list
mailing list