Home | History | Annotate | Line # | Download | only in include
      1 /*	$NetBSD: libdevmapper-event.h,v 1.1.1.1 2008/12/22 00:18:48 haad Exp $	*/
      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 
     32 enum 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 
     52 struct dm_event_handler;
     53 
     54 struct dm_event_handler *dm_event_handler_create(void);
     55 void 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  */
     64 int 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  */
     70 int dm_event_handler_set_dev_name(struct dm_event_handler *dmevh, const char *device_name);
     71 
     72 int dm_event_handler_set_uuid(struct dm_event_handler *dmevh, const char *uuid);
     73 
     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);
     77 
     78 /*
     79  * Specify mask for events to monitor.
     80  */
     81 void dm_event_handler_set_event_mask(struct dm_event_handler *dmevh,
     82 				     enum dm_event_mask evmask);
     83 
     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);
     91 
     92 /* FIXME Review interface (what about this next thing?) */
     93 int dm_event_get_registered_device(struct dm_event_handler *dmevh, int next);
     94 
     95 /*
     96  * Initiate monitoring using dmeventd.
     97  */
     98 int dm_event_register_handler(const struct dm_event_handler *dmevh);
     99 int 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. */
    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);
    107 
    108 #endif
    109