1/* $NetBSD$ */ 2 3/* 4 * Copyright (C) 2005-2007 Red Hat, Inc. All rights reserved. 5 * 6 * This file is part of the device-mapper userspace tools. 7 * 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. 11 * 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 15 */ 16 17/* 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. 21 */ 22 23#ifndef LIB_DMEVENT_H 24#define LIB_DMEVENT_H 25 26#include <stdint.h> 27 28/* 29 * Event library interface. 30 */ 31 32enum dm_event_mask { 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. */ 36 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. */ 42 43 DM_EVENT_STATUS_MASK = 0xFF0000, 44 DM_EVENT_SYNC_STATUS = 0x010000, /* Mirror synchronization completed/failed. */ 45 DM_EVENT_TIMEOUT = 0x020000, /* Timeout has occured */ 46 47 DM_EVENT_REGISTRATION_PENDING = 0x1000000, /* Monitor thread is setting-up/shutting-down */ 48}; 49 50#define DM_EVENT_ALL_ERRORS DM_EVENT_ERROR_MASK 51 52struct dm_event_handler; 53 54struct dm_event_handler *dm_event_handler_create(void); 55void dm_event_handler_destroy(struct dm_event_handler *dmevh); 56 57/* 58 * Path of shared library to handle events. 59 * 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. 63 */ 64int dm_event_handler_set_dso(struct dm_event_handler *dmevh, const char *path); 65 66/* 67 * Identify the device to monitor by exactly one of device_name, uuid or 68 * device number. String arguments are duplicated, see above. 69 */ 70int dm_event_handler_set_dev_name(struct dm_event_handler *dmevh, const char *device_name); 71 72int dm_event_handler_set_uuid(struct dm_event_handler *dmevh, const char *uuid); 73 74void dm_event_handler_set_major(struct dm_event_handler *dmevh, int major); 75void dm_event_handler_set_minor(struct dm_event_handler *dmevh, int minor); 76void dm_event_handler_set_timeout(struct dm_event_handler *dmevh, int timeout); 77 78/* 79 * Specify mask for events to monitor. 80 */ 81void dm_event_handler_set_event_mask(struct dm_event_handler *dmevh, 82 enum dm_event_mask evmask); 83 84const char *dm_event_handler_get_dso(const struct dm_event_handler *dmevh); 85const char *dm_event_handler_get_dev_name(const struct dm_event_handler *dmevh); 86const char *dm_event_handler_get_uuid(const struct dm_event_handler *dmevh); 87int dm_event_handler_get_major(const struct dm_event_handler *dmevh); 88int dm_event_handler_get_minor(const struct dm_event_handler *dmevh); 89int dm_event_handler_get_timeout(const struct dm_event_handler *dmevh); 90enum dm_event_mask dm_event_handler_get_event_mask(const struct dm_event_handler *dmevh); 91 92/* FIXME Review interface (what about this next thing?) */ 93int dm_event_get_registered_device(struct dm_event_handler *dmevh, int next); 94 95/* 96 * Initiate monitoring using dmeventd. 97 */ 98int dm_event_register_handler(const struct dm_event_handler *dmevh); 99int dm_event_unregister_handler(const struct dm_event_handler *dmevh); 100 101/* Prototypes for DSO interface, see dmeventd.c, struct dso_data for 102 detailed descriptions. */ 103void process_event(struct dm_task *dmt, enum dm_event_mask evmask, void **user); 104int register_device(const char *device_name, const char *uuid, int major, int minor, void **user); 105int unregister_device(const char *device_name, const char *uuid, int major, 106 int minor, void **user); 107 108#endif 109