Rewrite all the DTrace/SystemTAP probing
The libvirtd daemon had a few crude system tap probes. Some of
these were broken during the RPC rewrite. The new modular RPC
code is structured in a way that allows much more effective
tracing. Instead of trying to hook up the original probes,
define a new set of probes for the RPC and event code.
The master probes file is now src/probes.d. This contains
probes for virNetServerClientPtr, virNetClientPtr, virSocketPtr
virNetTLSContextPtr and virNetTLSSessionPtr modules. Also add
probes for the poll event loop.
The src/dtrace2systemtap.pl script can convert the probes.d
file into a libvirt_probes.stp file to make use from systemtap
much simpler.
The src/rpc/gensystemtap.pl script can generate a set of
systemtap functions for translating RPC enum values into
printable strings. This works for all RPC header enums (program,
type, status, procedure) and also the authentication enum
The PROBE macro will automatically generate a VIR_DEBUG
statement, so any place with a PROBE can remove any existing
manual DEBUG statements.
* daemon/libvirtd.stp, daemon/probes.d: Remove obsolete probing
* daemon/libvirtd.h: Remove probe macros
* daemon/Makefile.am: Remove all probe buildings/install
* daemon/remote.c: Update authentication probes
* src/dtrace2systemtap.pl, src/rpc/gensystemtap.pl: Scripts
to generate STP files
* src/internal.h: Add probe macros
* src/probes.d: Master list of probes
* src/rpc/virnetclient.c, src/rpc/virnetserverclient.c,
src/rpc/virnetsocket.c, src/rpc/virnettlscontext.c,
src/util/event_poll.c: Insert probe points, removing any
DEBUG statements that duplicate the info
2011-09-30 13:40:23 +00:00
|
|
|
provider libvirt {
|
|
|
|
# file: src/util/event_poll.c
|
|
|
|
# prefix: event_poll
|
|
|
|
probe event_poll_add_handle(int watch, int fd, int events, void *cb, void *opaque, void *ff);
|
|
|
|
probe event_poll_update_handle(int watch, int events);
|
|
|
|
probe event_poll_remove_handle(int watch);
|
|
|
|
probe event_poll_dispatch_handle(int watch, int events);
|
|
|
|
probe event_poll_purge_handle(int watch);
|
|
|
|
|
|
|
|
probe event_poll_add_timeout(int timer, int frequency, void *cb, void *opaque, void *ff);
|
|
|
|
probe event_poll_update_timeout(int timer, int frequency);
|
|
|
|
probe event_poll_remove_timeout(int timer);
|
|
|
|
probe event_poll_dispatch_timeout(int timer);
|
|
|
|
probe event_poll_purge_timeout(int timer);
|
|
|
|
|
|
|
|
probe event_poll_run(int nfds, int timeout);
|
|
|
|
|
|
|
|
|
|
|
|
# file: src/rpc/virnetsocket.c
|
|
|
|
# prefix: rpc
|
build: use correct type for pid and similar types
No thanks to 64-bit windows, with 64-bit pid_t, we have to avoid
constructs like 'int pid'. Our API in libvirt-qemu cannot be
changed without breaking ABI; but then again, libvirt-qemu can
only be used on systems that support UNIX sockets, which rules
out Windows (even if qemu could be compiled there) - so for all
points on the call chain that interact with this API decision,
we require a different variable name to make it clear that we
audited the use for safety.
Adding a syntax-check rule only solves half the battle; anywhere
that uses printf on a pid_t still needs to be converted, but that
will be a separate patch.
* cfg.mk (sc_correct_id_types): New syntax check.
* src/libvirt-qemu.c (virDomainQemuAttach): Document why we didn't
use pid_t for pid, and validate for overflow.
* include/libvirt/libvirt-qemu.h (virDomainQemuAttach): Tweak name
for syntax check.
* src/vmware/vmware_conf.c (vmwareExtractPid): Likewise.
* src/driver.h (virDrvDomainQemuAttach): Likewise.
* tools/virsh.c (cmdQemuAttach): Likewise.
* src/remote/qemu_protocol.x (qemu_domain_attach_args): Likewise.
* src/qemu_protocol-structs (qemu_domain_attach_args): Likewise.
* src/util/cgroup.c (virCgroupPidCode, virCgroupKillInternal):
Likewise.
* src/qemu/qemu_command.c(qemuParseProcFileStrings): Likewise.
(qemuParseCommandLinePid): Use pid_t for pid.
* daemon/libvirtd.c (daemonForkIntoBackground): Likewise.
* src/conf/domain_conf.h (_virDomainObj): Likewise.
* src/probes.d (rpc_socket_new): Likewise.
* src/qemu/qemu_command.h (qemuParseCommandLinePid): Likewise.
* src/qemu/qemu_driver.c (qemudGetProcessInfo, qemuDomainAttach):
Likewise.
* src/qemu/qemu_process.c (qemuProcessAttach): Likewise.
* src/qemu/qemu_process.h (qemuProcessAttach): Likewise.
* src/uml/uml_driver.c (umlGetProcessInfo): Likewise.
* src/util/virnetdev.h (virNetDevSetNamespace): Likewise.
* src/util/virnetdev.c (virNetDevSetNamespace): Likewise.
* tests/testutils.c (virtTestCaptureProgramOutput): Likewise.
* src/conf/storage_conf.h (_virStoragePerms): Use mode_t, uid_t,
and gid_t rather than int.
* src/security/security_dac.c (virSecurityDACSetOwnership): Likewise.
* src/conf/storage_conf.c (virStorageDefParsePerms): Avoid
compiler warning.
2012-02-10 23:08:11 +00:00
|
|
|
probe rpc_socket_new(void *sock, int refs, int fd, int errfd, pid_t pid, const char *localAddr, const char *remoteAddr);
|
2011-10-21 10:13:21 +00:00
|
|
|
probe rpc_socket_send_fd(void *sock, int fd);
|
|
|
|
probe rpc_socket_recv_fd(void *sock, int fd);
|
Rewrite all the DTrace/SystemTAP probing
The libvirtd daemon had a few crude system tap probes. Some of
these were broken during the RPC rewrite. The new modular RPC
code is structured in a way that allows much more effective
tracing. Instead of trying to hook up the original probes,
define a new set of probes for the RPC and event code.
The master probes file is now src/probes.d. This contains
probes for virNetServerClientPtr, virNetClientPtr, virSocketPtr
virNetTLSContextPtr and virNetTLSSessionPtr modules. Also add
probes for the poll event loop.
The src/dtrace2systemtap.pl script can convert the probes.d
file into a libvirt_probes.stp file to make use from systemtap
much simpler.
The src/rpc/gensystemtap.pl script can generate a set of
systemtap functions for translating RPC enum values into
printable strings. This works for all RPC header enums (program,
type, status, procedure) and also the authentication enum
The PROBE macro will automatically generate a VIR_DEBUG
statement, so any place with a PROBE can remove any existing
manual DEBUG statements.
* daemon/libvirtd.stp, daemon/probes.d: Remove obsolete probing
* daemon/libvirtd.h: Remove probe macros
* daemon/Makefile.am: Remove all probe buildings/install
* daemon/remote.c: Update authentication probes
* src/dtrace2systemtap.pl, src/rpc/gensystemtap.pl: Scripts
to generate STP files
* src/internal.h: Add probe macros
* src/probes.d: Master list of probes
* src/rpc/virnetclient.c, src/rpc/virnetserverclient.c,
src/rpc/virnetsocket.c, src/rpc/virnettlscontext.c,
src/util/event_poll.c: Insert probe points, removing any
DEBUG statements that duplicate the info
2011-09-30 13:40:23 +00:00
|
|
|
probe rpc_socket_ref(void *sock, int refs);
|
|
|
|
probe rpc_socket_free(void *sock, int refs);
|
|
|
|
|
|
|
|
|
|
|
|
# file: src/rpc/virnetserverclient.c
|
|
|
|
# prefix: rpc
|
|
|
|
probe rpc_server_client_new(void *client, int refs, void *sock);
|
|
|
|
probe rpc_server_client_ref(void *client, int refs);
|
|
|
|
probe rpc_server_client_free(void *client, int refs);
|
|
|
|
|
|
|
|
probe rpc_server_client_msg_tx_queue(void *client, int len, int prog, int vers, int proc, int type, int status, int serial);
|
|
|
|
probe rpc_server_client_msg_rx(void *client, int len, int prog, int vers, int proc, int type, int status, int serial);
|
|
|
|
|
|
|
|
|
|
|
|
# file: src/rpc/virnetclient.c
|
|
|
|
# prefix: rpc
|
|
|
|
probe rpc_client_new(void *client, int refs, void *sock);
|
|
|
|
probe rpc_client_ref(void *client, int refs);
|
|
|
|
probe rpc_client_free(void *client, int refs);
|
|
|
|
|
|
|
|
probe rpc_client_msg_tx_queue(void *client, int len, int prog, int vers, int proc, int type, int status, int serial);
|
|
|
|
probe rpc_client_msg_rx(void *client, int len, int prog, int vers, int proc, int type, int status, int serial);
|
|
|
|
|
|
|
|
|
|
|
|
# file: daemon/libvirtd.c
|
|
|
|
# prefix: rpc
|
|
|
|
probe rpc_server_client_auth_allow(void *client, int authtype, const char *identity);
|
|
|
|
probe rpc_server_client_auth_deny(void *client, int authtype, const char *identity);
|
|
|
|
probe rpc_server_client_auth_fail(void *client, int authtype);
|
|
|
|
|
|
|
|
|
|
|
|
# file: src/rpc/virnettlscontext.c
|
|
|
|
# prefix: rpc
|
|
|
|
probe rpc_tls_context_new(void *ctxt, int refs, const char *cacert, const char *cacrl,
|
|
|
|
const char *cert, const char *key, int sanityCheckCert, int requireValidCert, int isServer);
|
|
|
|
probe rpc_tls_context_ref(void *ctxt, int refs);
|
|
|
|
probe rpc_tls_context_free(void *ctxt, int refs);
|
|
|
|
|
|
|
|
probe rpc_tls_context_session_allow(void *ctxt, void *sess, const char *dname);
|
|
|
|
probe rpc_tls_context_session_deny(void *ctxt, void *sess, const char *dname);
|
|
|
|
probe rpc_tls_context_session_fail(void *ctxt, void *sess);
|
|
|
|
|
|
|
|
|
|
|
|
probe rpc_tls_session_new(void *sess, void *ctxt, int refs, const char *hostname, int isServer);
|
|
|
|
probe rpc_tls_session_ref(void *sess, int refs);
|
|
|
|
probe rpc_tls_session_free(void *sess, int refs);
|
|
|
|
|
|
|
|
probe rpc_tls_session_handshake_pass(void *sess);
|
|
|
|
probe rpc_tls_session_handshake_fail(void *sess);
|
|
|
|
|
2011-10-24 14:31:37 +00:00
|
|
|
|
2011-09-22 11:40:00 +00:00
|
|
|
# file: src/rpc/virkeepalive.c
|
|
|
|
# prefix: rpc
|
|
|
|
probe rpc_keepalive_new(void *ka, void *client, int refs);
|
|
|
|
probe rpc_keepalive_ref(void *ka, void *client, int refs);
|
|
|
|
probe rpc_keepalive_free(void *ka, void *client, int refs);
|
|
|
|
probe rpc_keepalive_start(void *ka, void *client, int interval, int count);
|
2012-06-12 06:58:04 +00:00
|
|
|
probe rpc_keepalive_stop(void *ka, void *client);
|
2011-09-22 11:40:00 +00:00
|
|
|
probe rpc_keepalive_send(void *ka, void *client, int prog, int vers, int proc);
|
|
|
|
probe rpc_keepalive_received(void *ka, void *client, int prog, int vers, int proc);
|
|
|
|
probe rpc_keepalive_timeout(void *ka, void *client, int coundToDeath, int idle);
|
Rewrite all the DTrace/SystemTAP probing
The libvirtd daemon had a few crude system tap probes. Some of
these were broken during the RPC rewrite. The new modular RPC
code is structured in a way that allows much more effective
tracing. Instead of trying to hook up the original probes,
define a new set of probes for the RPC and event code.
The master probes file is now src/probes.d. This contains
probes for virNetServerClientPtr, virNetClientPtr, virSocketPtr
virNetTLSContextPtr and virNetTLSSessionPtr modules. Also add
probes for the poll event loop.
The src/dtrace2systemtap.pl script can convert the probes.d
file into a libvirt_probes.stp file to make use from systemtap
much simpler.
The src/rpc/gensystemtap.pl script can generate a set of
systemtap functions for translating RPC enum values into
printable strings. This works for all RPC header enums (program,
type, status, procedure) and also the authentication enum
The PROBE macro will automatically generate a VIR_DEBUG
statement, so any place with a PROBE can remove any existing
manual DEBUG statements.
* daemon/libvirtd.stp, daemon/probes.d: Remove obsolete probing
* daemon/libvirtd.h: Remove probe macros
* daemon/Makefile.am: Remove all probe buildings/install
* daemon/remote.c: Update authentication probes
* src/dtrace2systemtap.pl, src/rpc/gensystemtap.pl: Scripts
to generate STP files
* src/internal.h: Add probe macros
* src/probes.d: Master list of probes
* src/rpc/virnetclient.c, src/rpc/virnetserverclient.c,
src/rpc/virnetsocket.c, src/rpc/virnettlscontext.c,
src/util/event_poll.c: Insert probe points, removing any
DEBUG statements that duplicate the info
2011-09-30 13:40:23 +00:00
|
|
|
};
|