From 4acd358a76d14f3123e017348446e1e90266cc9e Mon Sep 17 00:00:00 2001 From: Jiri Denemark Date: Thu, 22 Sep 2011 12:51:55 +0200 Subject: [PATCH] Define keepalive protocol The keepalive program has two procedures: PING, and PONG. Both are used only in asynchronous messages and the sender doesn't wait for any reply. However, the party which receives PING messages is supposed to react by sending PONG message the other party, but no explicit binding between PING and PONG messages is made. For backward compatibility neither server nor client are allowed to send keepalive messages before checking that remote party supports them. --- .gitignore | 1 + src/Makefile.am | 19 ++++++++++++++----- src/rpc/virkeepaliveprotocol.x | 7 +++++++ 3 files changed, 22 insertions(+), 5 deletions(-) create mode 100644 src/rpc/virkeepaliveprotocol.x diff --git a/.gitignore b/.gitignore index 0552b5245d..61a9a3831f 100644 --- a/.gitignore +++ b/.gitignore @@ -65,6 +65,7 @@ /src/locking/qemu-sanlock.conf /src/remote/*_client_bodies.h /src/remote/*_protocol.[ch] +/src/rpc/virkeepaliveprotocol.[ch] /src/rpc/virnetprotocol.[ch] /src/util/virkeymaps.h /tests/*.log diff --git a/src/Makefile.am b/src/Makefile.am index 252c64f75d..b0cbff2a17 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -285,7 +285,8 @@ PDWTAGS = \ PROTOCOL_STRUCTS = \ $(srcdir)/remote_protocol-structs \ $(srcdir)/qemu_protocol-structs \ - $(srcdir)/virnetprotocol-structs + $(srcdir)/virnetprotocol-structs \ + $(srcdir)/virkeepaliveprotocol-structs if WITH_REMOTE # The .o file that pdwtags parses is created as a side effect of running # libtool; but from make's perspective we depend on the .lo file. @@ -293,6 +294,7 @@ $(srcdir)/%_protocol-structs: libvirt_driver_remote_la-%_protocol.lo $(PDWTAGS) $(srcdir)/virnetprotocol-structs: libvirt_net_rpc_la-virnetprotocol.lo $(PDWTAGS) +$(srcdir)/virkeepaliveprotocol-structs: libvirt_net_rpc_la-virkeepaliveprotocol.lo else !WITH_REMOTE # These generated files must live in git, because they cannot be re-generated # when configured --without-remote. @@ -1287,7 +1289,10 @@ probes.h: probes.d probes.o: probes.d $(AM_V_GEN)$(DTRACE) -o $@ -G -s $< -RPC_PROBE_FILES = $(srcdir)/rpc/virnetprotocol.x $(srcdir)/remote/remote_protocol.x $(srcdir)/remote/qemu_protocol.x +RPC_PROBE_FILES = $(srcdir)/rpc/virnetprotocol.x \ + $(srcdir)/rpc/virkeepaliveprotocol.x \ + $(srcdir)/remote/remote_protocol.x \ + $(srcdir)/remote/qemu_protocol.x libvirt_functions.stp: $(RPC_PROBE_FILES) $(srcdir)/rpc/gensystemtap.pl $(AM_V_GEN)perl -w $(srcdir)/rpc/gensystemtap.pl $(RPC_PROBE_FILES) > $@ @@ -1366,11 +1371,14 @@ EXTRA_DIST += \ rpc/gendispatch.pl \ rpc/genprotocol.pl \ rpc/gensystemtap.pl \ - rpc/virnetprotocol.x + rpc/virnetprotocol.x \ + rpc/virkeepaliveprotocol.x VIR_NET_RPC_GENERATED = \ $(srcdir)/rpc/virnetprotocol.h \ - $(srcdir)/rpc/virnetprotocol.c + $(srcdir)/rpc/virnetprotocol.c \ + $(srcdir)/rpc/virkeepaliveprotocol.h \ + $(srcdir)/rpc/virkeepaliveprotocol.c BUILT_SOURCES += $(VIR_NET_RPC_GENERATED) @@ -1378,7 +1386,8 @@ libvirt_net_rpc_la_SOURCES = \ rpc/virnetmessage.h rpc/virnetmessage.c \ rpc/virnetprotocol.h rpc/virnetprotocol.c \ rpc/virnetsocket.h rpc/virnetsocket.c \ - rpc/virnettlscontext.h rpc/virnettlscontext.c + rpc/virnettlscontext.h rpc/virnettlscontext.c \ + rpc/virkeepaliveprotocol.h rpc/virkeepaliveprotocol.c if HAVE_SASL libvirt_net_rpc_la_SOURCES += \ rpc/virnetsaslcontext.h rpc/virnetsaslcontext.c diff --git a/src/rpc/virkeepaliveprotocol.x b/src/rpc/virkeepaliveprotocol.x new file mode 100644 index 0000000000..5f158cfee7 --- /dev/null +++ b/src/rpc/virkeepaliveprotocol.x @@ -0,0 +1,7 @@ +const KEEPALIVE_PROGRAM = 0x6b656570; +const KEEPALIVE_PROTOCOL_VERSION = 1; + +enum keepalive_procedure { + KEEPALIVE_PROC_PING = 1, + KEEPALIVE_PROC_PONG = 2 +}; -- GitLab