On Wed, Jan 29, 2014 at 10:49:22AM -0700, Eric Blake wrote: > This patch adds some new RPC call numbers, but for ease of review, > they sit idle until a later patch adds the client counterpart to > drive the new RPCs. Also for ease of review, I limited this patch > to just the lifecycle event; although converting the remaining > 15 domain events will be quite mechanical. On the server side, > we have to have a function per RPC call, largely with duplicated > bodies (the key difference being that we store in our callback > opaque pointer whether events should be fired with old or new > style); meanwhile, a single function can drive multiple RPC > messages, along with a strategic choice of XDR struct layout, > makes the event generation code for both styles fairly compact. > > I debated about adding a tri-state witness variable per > connection (values 'unknown', 'legacy', 'modern'). It would start > as 'unknown', move to 'legacy' if any RPC call is made to a legacy > event call, and move to 'modern' if the feature probe is made; > then the event code could issue an error if the witness state is > incorrect (a legacy RPC call while in 'modern', a modern RPC call > while in 'unknown' or 'legacy', and a feature probe while in > 'legacy' or 'modern'). But while it might prevent odd behavior > caused by protocol fuzzing, I don't see that it would prevent > any security holes, so I considered it bloat. > > * src/libvirt_internal.h (VIR_DRV_FEATURE_REMOTE_EVENT_CALLBACK): > New feature. > * src/remote/remote_protocol.x > (REMOTE_PROC_CONNECT_DOMAIN_EVENT_CALLBACK_REGISTER_ANY) > (REMOTE_PROC_CONNECT_DOMAIN_EVENT_CALLBACK_DEREGISTER_ANY) > (REMOTE_PROC_DOMAIN_EVENT_CALLBACK_LIFECYCLE): New RPCs. > * daemon/remote.c (daemonClientCallback): Add field. > (remoteDispatchConnectDomainEventCallbackRegisterAny) > (remoteDispatchConnectDomainEventCallbackDeregisterAny): New > functions. > (remoteDispatchConnectDomainEventRegisterAny) > (remoteDispatchConnectDomainEventDeregisterAny): Mark legacy use. > (remoteRelayDomainEventLifecycle): Change message based on legacy > or new use. > (remoteDispatchConnectSupportsFeature): Advertise new feature. > * src/remote_protocol-structs: Regenerate. > > Signed-off-by: Eric Blake <eblake@xxxxxxxxxx> > --- > daemon/remote.c | 173 ++++++++++++++++++++++++++++++++++++++++--- > src/libvirt_internal.h | 7 +- > src/remote/remote_protocol.x | 39 +++++++++- > src/remote_protocol-structs | 17 +++++ > 4 files changed, 225 insertions(+), 11 deletions(-) ACK > @@ -5068,5 +5085,25 @@ enum remote_procedure { > * @generate: both > * @acl: none > */ > - REMOTE_PROC_NETWORK_EVENT_LIFECYCLE = 315 > + REMOTE_PROC_NETWORK_EVENT_LIFECYCLE = 315, > + > + /** > + * @generate: none > + * @priority: high > + * @acl: none > + */ > + REMOTE_PROC_CONNECT_DOMAIN_EVENT_CALLBACK_REGISTER_ANY = 316, > + > + /** > + * @generate: none > + * @priority: high > + * @acl: none > + */ > + REMOTE_PROC_CONNECT_DOMAIN_EVENT_CALLBACK_DEREGISTER_ANY = 317, I believe these ACLs need to be non-none now Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list