Home | History | Annotate | Download | only in dmapi
      1 /*
      2  *   Copyright (c) International Business Machines  Corp., 2004
      3  *
      4  *   This program is free software;  you can redistribute it and/or modify
      5  *   it under the terms of the GNU General Public License as published by
      6  *   the Free Software Foundation; either version 2 of the License, or
      7  *   (at your option) any later version.
      8  *
      9  *   This program is distributed in the hope that it will be useful,
     10  *   but WITHOUT ANY WARRANTY;  without even the implied warranty of
     11  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
     12  *   the GNU General Public License for more details.
     13  *
     14  *   You should have received a copy of the GNU General Public License
     15  *   along with this program;  if not, write to the Free Software
     16  *   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     17  */
     18 
     19 /*
     20  * TEST CASE	: dm_impl.h
     21  *
     22  * PURPOSE	: Define implementation-dependent functions and variables
     23  * 		  common to all DMAPI test cases
     24  *
     25  * NOTES	: The validEvents[] table is derived from the XDSM
     26  * 		  specification, and then the row(s) for unsupported event(s)
     27  * 		  are set to DM_FALSE.  The definition from the specification
     28  * 		  is:
     29  *
     30  * eventValidity_t validEvents[DM_EVENT_MAX] = {
     31  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_TRUE  , "DM_EVENT_CANCEL" },
     32  *	{ DM_TRUE , DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_MOUNT" },
     33  *	{ DM_FALSE, DM_TRUE , DM_FALSE, DM_FALSE , "DM_EVENT_PREUNMOUNT" },
     34  *	{ DM_FALSE, DM_TRUE , DM_FALSE, DM_FALSE , "DM_EVENT_UNMOUNT" },
     35  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_TRUE  , "DM_EVENT_DEBUT" },
     36  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_CREATE" },
     37  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_TRUE  , "DM_EVENT_CLOSE" },
     38  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_POSTCREATE" },
     39  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_REMOVE" },
     40  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_POSTREMOVE" },
     41  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_RENAME" },
     42  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_POSTRENAME" },
     43  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_LINK" },
     44  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_POSTLINK" },
     45  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_SYMLINK" },
     46  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_POSTSYMLINK" },
     47  *	{ DM_FALSE, DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_READ" },
     48  *	{ DM_FALSE, DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_WRITE" },
     49  *	{ DM_FALSE, DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_TRUNCATE" },
     50  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_TRUE  , "DM_EVENT_ATTRIBUTE" },
     51  *	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_TRUE  , "DM_EVENT_DESTROY" },
     52  *	{ DM_FALSE, DM_TRUE , DM_FALSE, DM_FALSE , "DM_EVENT_NOSPACE" },
     53  *	{ DM_FALSE, DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_USER" }
     54  * };
     55  *
     56  */
     57 
     58 #include <sys/mount.h>
     59 
     60 #ifdef JFS
     61 configResult_t dmimpl_expectedResults[CONFIG_MAX] = {
     62 	{ "DM_CONFIG_INVALID", 0 },
     63 	{ "DM_CONFIG_BULKALL", DM_FALSE },
     64 	{ "DM_CONFIG_CREATE_BY_HANDLE", DM_FALSE },
     65 	{ "DM_CONFIG_DTIME_OVERLOAD", DM_TRUE },
     66 	{ "DM_CONFIG_LEGACY", DM_TRUE },
     67 	{ "DM_CONFIG_LOCK_UPGRADE", DM_FALSE },
     68 	{ "DM_CONFIG_MAX_ATTR_ON_DESTROY", 256 /* from dmapi_jfs.c */},
     69 	{ "DM_CONFIG_MAX_ATTRIBUTE_SIZE", 0xFFFF /* from jfs_xattr.h */},
     70 	{ "DM_CONFIG_MAX_HANDLE_SIZE", 56 /* from dmapi_kern.h */},
     71 	{ "DM_CONFIG_MAX_MANAGED_REGIONS", 0x7FFFFFFF /* from dmapi_jfs.c */},
     72 	{ "DM_CONFIG_MAX_MESSAGE_DATA", 3960 /* from dmapi_private.h */},
     73 	{ "DM_CONFIG_OBJ_REF", DM_TRUE },
     74 	{ "DM_CONFIG_PENDING", DM_TRUE }, // ?
     75 	{ "DM_CONFIG_PERS_ATTRIBUTES", DM_TRUE },
     76 	{ "DM_CONFIG_PERS_EVENTS", DM_FALSE },
     77 	{ "DM_CONFIG_PERS_INHERIT_ATTRIBS", DM_FALSE },
     78 	{ "DM_CONFIG_PERS_MANAGED_REGIONS", DM_TRUE },
     79 	{ "DM_CONFIG_PUNCH_HOLE", DM_TRUE },
     80 	{ "DM_CONFIG_TOTAL_ATTRIBUTE_SPACE", 0x7FFFFFFF /* from dmapi_jfs.c */},
     81 	{ "DM_CONFIG_WILL_RETRY", DM_TRUE }
     82 };
     83 
     84 /* JFS does not support DM_EVENT_CANCEL or DM_EVENT_DEBUT */
     85 eventValidity_t dmimpl_validEvents[DM_EVENT_MAX] = {
     86 	{ DM_FALSE, DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_CANCEL" },
     87 	{ DM_TRUE , DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_MOUNT" },
     88 	{ DM_FALSE, DM_TRUE , DM_FALSE, DM_FALSE , "DM_EVENT_PREUNMOUNT" },
     89 	{ DM_FALSE, DM_TRUE , DM_FALSE, DM_FALSE , "DM_EVENT_UNMOUNT" },
     90 	{ DM_FALSE, DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_DEBUT" },
     91 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_CREATE" },
     92 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_TRUE  , "DM_EVENT_CLOSE" },
     93 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_POSTCREATE" },
     94 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_REMOVE" },
     95 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_POSTREMOVE" },
     96 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_RENAME" },
     97 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_POSTRENAME" },
     98 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_LINK" },
     99 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_POSTLINK" },
    100 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_SYMLINK" },
    101 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_FALSE , "DM_EVENT_POSTSYMLINK" },
    102 	{ DM_FALSE, DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_READ" },
    103 	{ DM_FALSE, DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_WRITE" },
    104 	{ DM_FALSE, DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_TRUNCATE" },
    105 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_TRUE  , "DM_EVENT_ATTRIBUTE" },
    106 	{ DM_FALSE, DM_TRUE , DM_TRUE , DM_TRUE  , "DM_EVENT_DESTROY" },
    107 	{ DM_FALSE, DM_TRUE , DM_FALSE, DM_FALSE , "DM_EVENT_NOSPACE" },
    108 	{ DM_FALSE, DM_FALSE, DM_FALSE, DM_FALSE , "DM_EVENT_USER" }
    109 };
    110 
    111 dm_eventset_t dmimpl_eventset =
    112 /*	(1 << DM_EVENT_CANCEL)		| */
    113 	(1 << DM_EVENT_MOUNT)		|
    114 	(1 << DM_EVENT_PREUNMOUNT)	|
    115 	(1 << DM_EVENT_UNMOUNT)		|
    116 /*	(1 << DM_EVENT_DEBUT) 		| */
    117 	(1 << DM_EVENT_CREATE)		|
    118 	(1 << DM_EVENT_CLOSE)		|
    119 	(1 << DM_EVENT_POSTCREATE)	|
    120 	(1 << DM_EVENT_REMOVE)		|
    121 	(1 << DM_EVENT_POSTREMOVE)	|
    122 	(1 << DM_EVENT_RENAME)		|
    123 	(1 << DM_EVENT_POSTRENAME)	|
    124 	(1 << DM_EVENT_LINK)		|
    125 	(1 << DM_EVENT_POSTLINK)	|
    126 	(1 << DM_EVENT_SYMLINK)		|
    127 	(1 << DM_EVENT_POSTSYMLINK)	|
    128 	(1 << DM_EVENT_READ)		|
    129 	(1 << DM_EVENT_WRITE)		|
    130 	(1 << DM_EVENT_TRUNCATE)	|
    131 	(1 << DM_EVENT_ATTRIBUTE)	|
    132 	(1 << DM_EVENT_DESTROY)		|
    133 	(1 << DM_EVENT_NOSPACE)		|
    134 	(1 << DM_EVENT_USER);
    135 
    136 int dmimpl_mount(char **mountPt, char **deviceNm) {
    137 	char options[FILENAME_MAX];
    138 
    139 	if ((*mountPt = DMOPT_GET("mtpt")) == NULL) {
    140 		DMLOG_PRINT(DMLVL_ERR, "Missing mount point, use -mtpt (for example, -mtpt /dmapidir)\n");
    141 		DM_EXIT();
    142 	} else {
    143 		DMLOG_PRINT(DMLVL_DEBUG, "Mount point is %s\n", *mountPt);
    144 	}
    145 
    146 	if ((*deviceNm = DMOPT_GET("device")) == NULL) {
    147 		DMLOG_PRINT(DMLVL_ERR, "Missing device name, use -device (for example, -device /dev/hda5)\n");
    148 		DM_EXIT();
    149 	} else {
    150 		DMLOG_PRINT(DMLVL_DEBUG, "Device name is %s\n", *deviceNm);
    151 	}
    152 
    153 	sprintf(options, "dmapi,mtpt=%s", *mountPt);
    154 	EVENT_DELIVERY_DELAY;
    155 	DMLOG_PRINT(DMLVL_DEBUG, "Mounting %s on %s now...\n", *deviceNm, *mountPt);
    156 	return mount(*deviceNm, *mountPt, "jfs", 0, options);
    157 }
    158 #endif
    159