NAME
Protocol::Sys::Virt::Remote - Connect to remote libvirt daemon
VERSION
v10.9.13
Based on LibVirt tag v10.9.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 { my $opaque = shift; syswrite( $fh, $_ ) for @_; $opaque }
);
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);
$on_stream->(header => $hdr, final => $final);
Passthrough from the on_stream
event in Protocol::Sys::Virt::Transport
, with the exception of the final
argument which indicates a positive confirmation of the end of the stream. This message comes after the last data message (which sends zero-length data); both ends send this message which serves as a synchronization point for the stream communication.
Please note that if an error occurs, no final
message is sent.
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
.
Note: If the on_send
callback of the associated transport is declared async
(as in Future::AsyncAwait), a Future is returned which (eventually) resolves to the $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.
Note: If the on_send
callback of the associated transport is declared async
(as in Future::AsyncAwait), a Future is returned which resolves when the reply has been sent.
message
$remote->message( $proc, $data );
Sends a notification message $data
to the remote procedure $proc
.
Note: If the on_send
callback of the associated transport is declared async
(as in Future::AsyncAwait), a Future is returned which resolves when the message has been sent.
stream
$remote->stream( $proc, $serial, data => $data );
$remote->stream( $proc, $serial, hole => $hole );
Sends data or a stream hole to the server, relating to the stream opened with remote procedure $proc
through serial $serial
.
Note that errors terminate the stream and should be transmitted using stream_end
.
stream_end
$remote->stream_end( $proc, $serial ); # regular stream termination
$remote->stream_end( $proc, $serial, 1 ); # abort, on client
$remote->stream_end( $proc, $serial, $error ); # abort, on server
Closes the stream, either through regular confirmation or through an error condition. The client does not send its error to the server, but the server sends its error information to the client -- which explains the difference in invocation between clients and servers. The role
attribute should be set to server
for servers to handle error conditions in streams correctly.
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.