Files
xen/tools/xenstored/watch.h
T
Juergen Gross d58175d7f6 tools/xenstored: replace the fire_watches() exact parameter
Today fire_watches() has the boolean "exact" parameter specifying how
the matching of the modified node with registered watches is to be
handled (only the exact node name is matching or all nodes being
in the subtree beneath the watched node).

For the handling of <special-watch>/<domid> watch events 2 additional
matching possibility needs to be added, as those events should only
be delivered to clients having requested such events, either by
watching <special-watch> with the depth=1 parameter, or by directly
watching for <special-watch>/<domid>, while the traditional special
watch events should NOT delivered to those watchers.

For this purpose rename the "exact" parameter to "match" and make it
an enum with four possible values.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jason Andryuk <jason.andryuk@amd.com>
2026-04-22 08:58:23 +02:00

50 lines
1.7 KiB
C

/*
Watch code for Xen Store Daemon.
Copyright (C) 2005 Rusty Russell IBM Corporation
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef _XENSTORED_WATCH_H
#define _XENSTORED_WATCH_H
#include "core.h"
int do_watch(const void *ctx, struct connection *conn,
struct buffered_data *in);
int do_unwatch(const void *ctx, struct connection *conn,
struct buffered_data *in);
/* Fire all watches: !exact means all the children are affected (ie. rm). */
enum watch_match {
MATCH_EXACT,
MATCH_SUBTREE,
MATCH_DEPTH, /* watches with depth > 0, MATCH_SUBTREE semantics */
MATCH_NODEPTH /* watches with no depth, MATCH_EXACT semantics */
};
void fire_watches(struct connection *conn, const void *tmp, const char *name,
const struct node *node, enum watch_match match,
struct node_perms *perms);
void conn_delete_all_watches(struct connection *conn);
const char *dump_state_watches(FILE *fp, struct connection *conn,
unsigned int conn_id);
void read_state_watch(const void *ctx, const void *state);
void read_state_watch_ext(const void *ctx, const void *state);
#endif /* _XENSTORED_WATCH_H */