NAME

Protocol::Sys::Virt::Remote - Connect to remote libvirt daemon

VERSION

v10.3.2

Based on LibVirt tag v10.3.0

SYNOPSIS

use Protocol::Sys::Virt::Transport;
use Protocol::Sys::Virt::Remote;
use Protocol::Sys::Virt::Remote::XDR;
my $prot = 'Protocol::Sys::Virt::Remote::XDR';

open my $fh, 'rw', '/run/libvirt/libvirt.sock';
my $transport = Protocol::Sys::Virt::Transport->new(
     role => 'client',
     on_send => sub { syswrite( $fh, $_ ) for @_ }
);

my $remote = Protocol::Sys::Virt::Remote->new(
     role => 'client',
     on_reply => sub { say 'Reply handled!'; },
);
$remote->register( $transport );

$remote->start_auth( $prot->AUTH_NONE,
                     on_complete => sub { say "Authenticated!" });

my $serial = $remote->call( $prot->PROC_CONNECT_OPEN,
               { name => 'qemu:///system', flags => 0 } );

DESCRIPTION

This module contains a class to connect to a "remote" libvirt daemon. That is, a deamon connected to a stream, which may be a Unix socket, a TCP socket, a pipe, etc. The data sent and received is encoded and decoded before passing it on to the transport or back to the caller.

EVENTS

on_closed

Called when the remote side of the stream announces it will close the stream using the REMOTE_PROC_CONNECT_CLOSE message, or when it confirms such a message as initiated locally.

on_call

$on_call->(header => $hdr, data => $decoded_data, [fds => $fds]);

Called when receiving a VIR_NET_CALL or VIR_NET_CALL_WITH_FDS (abbreviated as CALL or CALL_WITH_FDS) message. This callback differs from the one in Protocol::Sys::Virt::Transport by the fact the data has been decoded from XDR to the Perl representation.

on_reply

$on_reply->(header => $hdr, data  => $decoded_data, [fds => $fds]);
$on_reply->(header => $hdr, error => $err);

Called when receiving a VIR_NET_REPLY or VIR_NET_REPLY_WITH_FDS (abbreviated as REPLY or REPLY_WITH_FDS) message. This callback differs from the one in Protocol::Sys::Virt::Transport by the fact the data has been decoded from XDR to the Perl representation.

on_message

$on_message->(header => $hdr, data  => $data);

Called when receiving a VIR_NET_MESSAGE (abbreviated as MESSAGE) message. This callback differs from the one in Protocol::Sys::Virt::Transport by the fact the data has been decoded from XDR to the Perl representation.

on_stream

$on_stream->(header => $hdr, data => $data);
$on_stream->(header => $hdr, hole => $hole);
$on_stream->(header => $hdr, error => $err);

Passthrough from the on_stream event in Protocol::Sys::Virt::Transport.

CONSTRUCTOR

new

my $remote = Protocol::Sys::Virt::Remote->new(
    role     => 'client',
    on_close => sub { ... },
    on_call  => sub { ... },
);

Creates an instance on the client side (role => 'client') or server side (role => 'server') of the connection. In addition to the required role parameter, the constructor may be provided with a coderef for each of the events.

METHODS

configure

$remote->configure( on_reply => $callback, ... );

Sets callback handlers for events.

register

$remote->register( $transport );

Sets the callbacks on $transport for $remote->PROGRAM, allowing this instance to handle any incoming transfers.

start_auth

$remote->start_auth( $wanted_auth_type,
                     sasl => $sasl,
                     on_complete => sub { ... } );

Starts a sequence of message exchanges to authenticate with the remote. The messages being exchanged are handled internally and not passed to the event handlers. When AUTH_SASL is wanted, the sasl key should be provided with an instance of Authen::SASL. The on_complete handler is defined as:

$on_complete->(status => $status);

Where $status can be success or fail.

call

$serial = $remote->call( $proc, $data );

Calls the remote procedure $proc with the arguments given in $data. $proc is one of the values in the enum procedure as defined in Protocol::Sys::Virt::Remote::XDR. Reply and stream messages in response to this call are identified by $serial.

reply

$remote->reply( $proc, $serial, $status, $data );

Sends a reply to a remote call $proc using $serial. If $status is ERROR, $data is expected to provide an error (remote_error) structure.

message

$remote->message( $proc, $data );

Sends a notification message $data to the remote procedure $proc.

stream

# TODO

CONSTANTS

DRV_FEATURE_MIGRATION_V1
DRV_FEATURE_REMOTE
DRV_FEATURE_MIGRATION_V2
DRV_FEATURE_MIGRATION_P2P
DRV_FEATURE_MIGRATION_DIRECT
DRV_FEATURE_MIGRATION_V3
DRV_FEATURE_MIGRATE_CHANGE_PROTECTION
DRV_FEATURE_FD_PASSING
DRV_FEATURE_TYPED_PARAM_STRING
DRV_FEATURE_PROGRAM_KEEPALIVE
DRV_FEATURE_XML_MIGRATABLE
DRV_FEATURE_MIGRATION_OFFLINE
DRV_FEATURE_MIGRATION_PARAMS
DRV_FEATURE_REMOTE_EVENT_CALLBACK
DRV_FEATURE_REMOTE_CLOSE_CALLBACK
DRV_FEATURE_NETWORK_UPDATE_HAS_CORRECT_ORDER

LICENSE AND COPYRIGHT

See the LICENSE file in this distribution.