4 * Copyright (C) 2005-2007 Red Hat, Inc. All rights reserved.
6 * This file is part of the device-mapper userspace tools.
8 * This copyrighted material is made available to anyone wishing to use,
9 * modify, copy, or redistribute it subject to the terms and conditions
10 * of the GNU Lesser General Public License v.2.1.
12 * You should have received a copy of the GNU Lesser General Public License
13 * along with this program; if not, write to the Free Software Foundation,
14 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 * Note that this file is released only as part of a technology preview
19 * and its contents may change in future updates in ways that do not
20 * preserve compatibility.
29 * Event library interface.
33 DM_EVENT_SETTINGS_MASK
= 0x0000FF,
34 DM_EVENT_SINGLE
= 0x000001, /* Report multiple errors just once. */
35 DM_EVENT_MULTI
= 0x000002, /* Report all of them. */
37 DM_EVENT_ERROR_MASK
= 0x00FF00,
38 DM_EVENT_SECTOR_ERROR
= 0x000100, /* Failure on a particular sector. */
39 DM_EVENT_DEVICE_ERROR
= 0x000200, /* Device failure. */
40 DM_EVENT_PATH_ERROR
= 0x000400, /* Failure on an io path. */
41 DM_EVENT_ADAPTOR_ERROR
= 0x000800, /* Failure of a host adaptor. */
43 DM_EVENT_STATUS_MASK
= 0xFF0000,
44 DM_EVENT_SYNC_STATUS
= 0x010000, /* Mirror synchronization completed/failed. */
45 DM_EVENT_TIMEOUT
= 0x020000, /* Timeout has occured */
47 DM_EVENT_REGISTRATION_PENDING
= 0x1000000, /* Monitor thread is setting-up/shutting-down */
50 #define DM_EVENT_ALL_ERRORS DM_EVENT_ERROR_MASK
52 struct dm_event_handler
;
54 struct dm_event_handler
*dm_event_handler_create(void);
55 void dm_event_handler_destroy(struct dm_event_handler
*dmevh
);
58 * Path of shared library to handle events.
60 * All of dso, device_name and uuid strings are duplicated, you do not
61 * need to keep the pointers valid after the call succeeds. Thes may
62 * return -ENOMEM though.
64 int dm_event_handler_set_dso(struct dm_event_handler
*dmevh
, const char *path
);
67 * Identify the device to monitor by exactly one of device_name, uuid or
68 * device number. String arguments are duplicated, see above.
70 int dm_event_handler_set_dev_name(struct dm_event_handler
*dmevh
, const char *device_name
);
72 int dm_event_handler_set_uuid(struct dm_event_handler
*dmevh
, const char *uuid
);
74 void dm_event_handler_set_major(struct dm_event_handler
*dmevh
, int major
);
75 void dm_event_handler_set_minor(struct dm_event_handler
*dmevh
, int minor
);
76 void dm_event_handler_set_timeout(struct dm_event_handler
*dmevh
, int timeout
);
79 * Specify mask for events to monitor.
81 void dm_event_handler_set_event_mask(struct dm_event_handler
*dmevh
,
82 enum dm_event_mask evmask
);
84 const char *dm_event_handler_get_dso(const struct dm_event_handler
*dmevh
);
85 const char *dm_event_handler_get_dev_name(const struct dm_event_handler
*dmevh
);
86 const char *dm_event_handler_get_uuid(const struct dm_event_handler
*dmevh
);
87 int dm_event_handler_get_major(const struct dm_event_handler
*dmevh
);
88 int dm_event_handler_get_minor(const struct dm_event_handler
*dmevh
);
89 int dm_event_handler_get_timeout(const struct dm_event_handler
*dmevh
);
90 enum dm_event_mask
dm_event_handler_get_event_mask(const struct dm_event_handler
*dmevh
);
92 /* FIXME Review interface (what about this next thing?) */
93 int dm_event_get_registered_device(struct dm_event_handler
*dmevh
, int next
);
96 * Initiate monitoring using dmeventd.
98 int dm_event_register_handler(const struct dm_event_handler
*dmevh
);
99 int dm_event_unregister_handler(const struct dm_event_handler
*dmevh
);
101 /* Prototypes for DSO interface, see dmeventd.c, struct dso_data for
102 detailed descriptions. */
103 void process_event(struct dm_task
*dmt
, enum dm_event_mask evmask
, void **user
);
104 int register_device(const char *device_name
, const char *uuid
, int major
, int minor
, void **user
);
105 int unregister_device(const char *device_name
, const char *uuid
, int major
,
106 int minor
, void **user
);