1d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/* 2d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * Copyright (c) International Business Machines Corp., 2004 3d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 4d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * This program is free software; you can redistribute it and/or modify 5d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * it under the terms of the GNU General Public License as published by 6d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * the Free Software Foundation; either version 2 of the License, or 7d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * (at your option) any later version. 8d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 9d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * This program is distributed in the hope that it will be useful, 10d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * but WITHOUT ANY WARRANTY; without even the implied warranty of 11d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See 12d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * the GNU General Public License for more details. 13d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 14d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * You should have received a copy of the GNU General Public License 15d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * along with this program; if not, write to the Free Software 164548c6cf9bcdd96d8303caa4130ab638b61f8a30Wanlong Gao * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 17d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 18d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 19d13d74bbf207c2d01598c6fef092a75b93b07c71vapier/* 20d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST CASE : token.c 21d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 22d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * VARIATIONS : 9 23d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * 24d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * API'S TESTED : dm_getall_tokens 25d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 26d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <string.h> 27d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <stdio.h> 28d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <stdlib.h> 29d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <errno.h> 30d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <pthread.h> 31d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <unistd.h> 32d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <sys/stat.h> 33d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <sys/mount.h> 34d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include <fcntl.h> 35d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#include "dm_test.h" 36d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 37d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#define TOKBUF_NUM 10 38d13d74bbf207c2d01598c6fef092a75b93b07c71vapier#define TOKBUF_LEN (TOKBUF_NUM * sizeof(dm_token_t)) 39d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 40d13d74bbf207c2d01598c6fef092a75b93b07c71vapierpthread_t tid; 41d13d74bbf207c2d01598c6fef092a75b93b07c71vapierdm_sessid_t sid; 42d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar dmMsgBuf[4096]; 43d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar *mountPt; 44d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar *deviceNm; 45d13d74bbf207c2d01598c6fef092a75b93b07c71vapierchar DummySubdir[FILENAME_MAX]; 46d13d74bbf207c2d01598c6fef092a75b93b07c71vapierdm_token_t createToken; 47d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 48d13d74bbf207c2d01598c6fef092a75b93b07c71vapiervoid *Thread(void *); 49d13d74bbf207c2d01598c6fef092a75b93b07c71vapiervoid *TokenThread(void *); 50d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 51d13d74bbf207c2d01598c6fef092a75b93b07c71vapierint main(int argc, char **argv) 52d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{ 53d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 54d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char *szFuncName; 55d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char *varstr; 56354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao int rc; 57d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char *szSessionInfo = "dm_test session info"; 58d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_eventset_t events; 59d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 60d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMOPT_PARSE(argc, argv); 61d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMLOG_START(); 62d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 63d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMEV_ZERO(events); 64d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMEV_SET(DM_EVENT_MOUNT, events); 65bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 66d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* CANNOT DO ANYTHING WITHOUT SUCCESSFUL INITIALIZATION!!! */ 67d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if ((rc = dm_init_service(&varstr)) != 0) { 68354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 69354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "dm_init_service failed! (rc = %d, errno = %d)\n", 70354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 71d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DM_EXIT(); 72354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else if ((rc = dm_create_session(DM_NO_SESSION, szSessionInfo, &sid)) 73354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao == -1) { 74354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 75354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "dm_create_session failed! (rc = %d, errno = %d)\n", 76354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 77d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DM_EXIT(); 78354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else 79354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if ((rc = 80354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_set_disp(sid, DM_GLOBAL_HANP, DM_GLOBAL_HLEN, DM_NO_TOKEN, 81354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &events, DM_EVENT_MAX)) == -1) { 82354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 83354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "dm_set_disp failed! (rc = %d, errno = %d)\n", rc, 84354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 85d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_destroy_session(sid); 86d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DM_EXIT(); 87d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else if ((rc = pthread_create(&tid, NULL, Thread, NULL)) != 0) { 88354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 89354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "pthread_create failed! (rc = %d, errno = %d)\n", 90354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 91d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_destroy_session(sid); 92d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DM_EXIT(); 93d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else if ((rc = dmimpl_mount(&mountPt, &deviceNm)) == -1) { 94354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 95354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "dmimpl_mount failed! (rc = %d, errno = %d)\n", rc, 96354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 97d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_destroy_session(sid); 98d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DM_EXIT(); 99d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 100d13d74bbf207c2d01598c6fef092a75b93b07c71vapier sprintf(DummySubdir, "%s/%s", mountPt, DUMMY_SUBDIR); 101d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 102d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rmdir(DummySubdir); 103d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 104d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 105354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, "Starting DMAPI tokens tests\n"); 106bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 107d13d74bbf207c2d01598c6fef092a75b93b07c71vapier szFuncName = "dm_getall_tokens"; 108bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 109d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* 110d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST : dm_getall_tokens - invalid sid 111d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EXPECTED: rc = -1, errno = EINVAL 112d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 113d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (DMVAR_EXEC(GETALL_TOKENS_BASE + 1)) { 114d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t buf[TOKBUF_NUM]; 115d13d74bbf207c2d01598c6fef092a75b93b07c71vapier u_int nelem; 116d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char msgbuf[MSG_DATALEN]; 117d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t token; 118d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 119d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation set up */ 120d13d74bbf207c2d01598c6fef092a75b93b07c71vapier memcpy(msgbuf, MSG_DATA, MSG_DATALEN); 121d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_create_userevent(sid, MSG_DATALEN, msgbuf, &token); 122d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 123354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 124354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to set up variation! (errno = %d)\n", 125354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 126d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_SKIP(); 127d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 128d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation */ 129354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid sid)\n", 130354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName); 131354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_getall_tokens(INVALID_ADDR, TOKBUF_NUM, buf, 132354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &nelem); 1334bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 134d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 135d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation clean up */ 136354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_respond_event(sid, token, DM_RESP_CONTINUE, 0, 137354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, NULL); 138d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 139354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 140354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to clean up variation! (errno = %d)\n", 141354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 142d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 143d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 144d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 145bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 146d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* 147d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST : dm_getall_tokens - invalid nelem 148d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EXPECTED: rc = -1, errno = E2BIG 149d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 150d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (DMVAR_EXEC(GETALL_TOKENS_BASE + 2)) { 151d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t buf[TOKBUF_NUM]; 152d13d74bbf207c2d01598c6fef092a75b93b07c71vapier u_int nelem; 153d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char msgbuf[MSG_DATALEN]; 154d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t token; 155d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 156d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation set up */ 157d13d74bbf207c2d01598c6fef092a75b93b07c71vapier memcpy(msgbuf, MSG_DATA, MSG_DATALEN); 158d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_create_userevent(sid, MSG_DATALEN, msgbuf, &token); 159d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 160354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 161354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to set up variation! (errno = %d)\n", 162354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 163d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_SKIP(); 164d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 165d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation */ 166354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid nelem)\n", 167354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName); 168d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_getall_tokens(sid, 0, buf, &nelem); 169d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 170d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (errno == E2BIG) { 171354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", 172354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao nelem); 173d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (nelem == 1) { 174354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 175354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s passed with expected rc = %d and expected errno = %d\n", 176354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, -1, 177354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao E2BIG); 178d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_PASS(); 179d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 180354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 181354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d and expected errno = %d but unexpected nelem (%d vs %d)\n", 182354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, -1, 183354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao E2BIG, nelem, 1); 184d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 185d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 186d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 187354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 188354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but unexpected errno = %d\n", 189354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, -1, errno); 190d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 191d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 192d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 193354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 194354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with unexpected rc = %d\n", 195354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, rc); 196d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 197d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 198d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 199d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation clean up */ 200354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_respond_event(sid, token, DM_RESP_CONTINUE, 0, 201354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, NULL); 202d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 203354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 204354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to clean up variation! (errno = %d)\n", 205354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 206d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 207d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 208d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 209bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 210d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* 211d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST : dm_getall_tokens - invalid tokenbufp 212d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EXPECTED: rc = -1, errno = EFAULT 213d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 214d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (DMVAR_EXEC(GETALL_TOKENS_BASE + 3)) { 215d13d74bbf207c2d01598c6fef092a75b93b07c71vapier u_int nelem; 216d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char msgbuf[MSG_DATALEN]; 217d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t token; 218d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 219d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation set up */ 220d13d74bbf207c2d01598c6fef092a75b93b07c71vapier memcpy(msgbuf, MSG_DATA, MSG_DATALEN); 221d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_create_userevent(sid, MSG_DATALEN, msgbuf, &token); 222d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 223354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 224354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to set up variation! (errno = %d)\n", 225354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 226d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_SKIP(); 227d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 228d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation */ 229354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid tokenbufp)\n", 230354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName); 231354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_getall_tokens(sid, TOKBUF_NUM, 232354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (dm_token_t *) INVALID_ADDR, 233354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &nelem); 2344bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 235bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 236d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation clean up */ 237354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_respond_event(sid, token, DM_RESP_CONTINUE, 0, 238354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, NULL); 239d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 240354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 241354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to clean up variation! (errno = %d)\n", 242354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 243d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 244d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 245d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 246bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 247d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* 248d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST : dm_getall_tokens - invalid nelemp 249d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EXPECTED: rc = -1, errno = EFAULT 250d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 251d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (DMVAR_EXEC(GETALL_TOKENS_BASE + 4)) { 252d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t buf[TOKBUF_NUM]; 253d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char msgbuf[MSG_DATALEN]; 254d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t token; 255d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 256d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation set up */ 257d13d74bbf207c2d01598c6fef092a75b93b07c71vapier memcpy(msgbuf, MSG_DATA, MSG_DATALEN); 258d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_create_userevent(sid, MSG_DATALEN, msgbuf, &token); 259d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 260354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 261354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to set up variation! (errno = %d)\n", 262354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 263d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_SKIP(); 264d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 265d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation */ 266354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, "%s(invalid nelemp)\n", 267354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName); 268354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_getall_tokens(sid, TOKBUF_NUM, buf, 269354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao (u_int *) INVALID_ADDR); 2704bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak DMVAR_ENDFAILEXP(szFuncName, -1, rc, EFAULT); 271d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 272d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation clean up */ 273354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_respond_event(sid, token, DM_RESP_CONTINUE, 0, 274354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, NULL); 275d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 276354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 277354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to clean up variation! (errno = %d)\n", 278354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 279d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 280d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 281d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 282bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 283d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* 284d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST : dm_getall_tokens - one userevent token 285d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EXPECTED: rc = 0 286d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 287d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (DMVAR_EXEC(GETALL_TOKENS_BASE + 5)) { 288d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t buf[TOKBUF_NUM]; 289d13d74bbf207c2d01598c6fef092a75b93b07c71vapier u_int nelem; 290d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char msgbuf[MSG_DATALEN]; 291d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t token; 292d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 293d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation set up */ 294d13d74bbf207c2d01598c6fef092a75b93b07c71vapier memcpy(msgbuf, MSG_DATA, MSG_DATALEN); 295d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_create_userevent(sid, MSG_DATALEN, msgbuf, &token); 296d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 297354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 298354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to set up variation! (errno = %d)\n", 299354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 300d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_SKIP(); 301d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 302d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation */ 303354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, "%s(one userevent token)\n", 304354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName); 305d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_getall_tokens(sid, TOKBUF_NUM, buf, &nelem); 306d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == 0) { 307d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 308d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (nelem == 1) { 309354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 310354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "token 0: %d\n", buf[0]); 311d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (token == buf[0]) { 312354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 313354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s passed with expected rc = %d\n", 314354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 0); 315d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_PASS(); 316d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 317354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 318354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but unexpected token (%d vs %d)\n", 319354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 0, 320354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao token, buf[0]); 321d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 322d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 323d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 324354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 325354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 326354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 0, nelem, 1); 327d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 328d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 329d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 330354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 331354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with unexpected rc = %d (errno = %d)\n", 332354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, rc, errno); 333d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 334d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 335d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 336d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation clean up */ 337354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_respond_event(sid, token, DM_RESP_CONTINUE, 0, 338354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, NULL); 339d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 340354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 341354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to clean up variation! (errno = %d)\n", 342354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 343d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 344d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 345d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 346bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 347d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* 348d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST : dm_getall_tokens - two userevent tokens 349d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EXPECTED: rc = 0 350d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 351d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (DMVAR_EXEC(GETALL_TOKENS_BASE + 6)) { 352d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t buf[TOKBUF_NUM]; 353d13d74bbf207c2d01598c6fef092a75b93b07c71vapier u_int nelem; 354d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char msgbuf[MSG_DATALEN]; 355d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t token1, token2; 356d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 357d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation set up */ 358d13d74bbf207c2d01598c6fef092a75b93b07c71vapier memcpy(msgbuf, MSG_DATA, MSG_DATALEN); 359354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if ((rc = 360354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_create_userevent(sid, MSG_DATALEN, msgbuf, 361354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &token1)) == -1) { 362d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* No clean up */ 363354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else 364354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if ((rc = 365354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_create_userevent(sid, MSG_DATALEN, msgbuf, 366354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &token2)) == -1) { 367354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_respond_event(sid, token1, DM_RESP_CONTINUE, 0, 0, 368354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao NULL); 369d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 370d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 371354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 372354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to set up variation! (errno = %d)\n", 373354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 374d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_SKIP(); 375d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 376d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation */ 377354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, "%s(two userevent tokens)\n", 378354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName); 379d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_getall_tokens(sid, TOKBUF_NUM, buf, &nelem); 380d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == 0) { 381d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 382d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (nelem == 2) { 383354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 384354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "token 0: %d\n", buf[0]); 385354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 386354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "token 1: %d\n", buf[1]); 387354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (token1 == buf[0] 388354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao || token1 == buf[1]) { 389354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (token2 == buf[0] 390354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao || token2 == buf[1]) { 391354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 392354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s passed with expected rc = %d\n", 393354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 394354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0); 395d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_PASS(); 396d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 397354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 398354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but token = %d not in buf\n", 399354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 400354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, token2); 401d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 402d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 403d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 404354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 405354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but token = %d not in buf\n", 406354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 0, 407354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao token1); 408d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 409d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 410d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 411354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 412354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 413354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 0, nelem, 1); 414d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 415d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 416d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 417354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 418354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with unexpected rc = %d (errno = %d)\n", 419354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, rc, errno); 420d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 421d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 422d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 423d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation clean up */ 424354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_respond_event(sid, token2, DM_RESP_CONTINUE, 0, 425354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, NULL); 426354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc |= 427354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_respond_event(sid, token1, DM_RESP_CONTINUE, 0, 428354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, NULL); 429d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 430354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 431354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to clean up variation! (errno = %d)\n", 432354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 433d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 434d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 435d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 436bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 437d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* 438d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST : dm_getall_tokens - one event token 439d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EXPECTED: rc = 0 440d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 441d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (DMVAR_EXEC(GETALL_TOKENS_BASE + 7)) { 442d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t buf[TOKBUF_NUM]; 443d13d74bbf207c2d01598c6fef092a75b93b07c71vapier u_int nelem; 444d13d74bbf207c2d01598c6fef092a75b93b07c71vapier pthread_t tidToken; 445d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 446d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation set up */ 447d13d74bbf207c2d01598c6fef092a75b93b07c71vapier createToken = 0; 448d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = pthread_create(&tidToken, NULL, TokenThread, NULL); 449d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 450354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 451354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to set up variation! (errno = %d)\n", 452354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 453d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_SKIP(); 454d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 455d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation */ 456d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Wait for DM_EVENT_CREATE event to set token */ 457d13d74bbf207c2d01598c6fef092a75b93b07c71vapier while (createToken == 0) { 458d13d74bbf207c2d01598c6fef092a75b93b07c71vapier EVENT_DELIVERY_DELAY; 459d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 460354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, "%s(one event token)\n", 461354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName); 462d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_getall_tokens(sid, TOKBUF_NUM, buf, &nelem); 463d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == 0) { 464d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 465d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (nelem == 1) { 466354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 467354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "token 0: %d\n", buf[0]); 468d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (buf[0] == createToken) { 469354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 470354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s passed with expected rc = %d\n", 471354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 0); 472d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_PASS(); 473d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 474354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 475354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but unexpected token (%d vs %d)\n", 476354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 0, 477354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao buf[0], 478354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao createToken); 479d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 480d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 481d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 482354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 483354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 484354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 0, nelem, 1); 485d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 486d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 487d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 488354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 489354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with unexpected rc = %d (errno = %d)\n", 490354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, rc, errno); 491d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 492d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 493d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 494d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation clean up */ 495d13d74bbf207c2d01598c6fef092a75b93b07c71vapier pthread_join(tidToken, NULL); 496d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 497d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 498bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 499d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* 500d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST : dm_getall_tokens - one event token, one userevent token 501d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EXPECTED: rc = 0 502d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 503d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (DMVAR_EXEC(GETALL_TOKENS_BASE + 8)) { 504d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t buf[TOKBUF_NUM]; 505d13d74bbf207c2d01598c6fef092a75b93b07c71vapier u_int nelem; 506d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char msgbuf[MSG_DATALEN]; 507d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t token; 508d13d74bbf207c2d01598c6fef092a75b93b07c71vapier pthread_t tidToken; 509d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 510d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation set up */ 511d13d74bbf207c2d01598c6fef092a75b93b07c71vapier memcpy(msgbuf, MSG_DATA, MSG_DATALEN); 512d13d74bbf207c2d01598c6fef092a75b93b07c71vapier createToken = 0; 513354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if ((rc = 514354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_create_userevent(sid, MSG_DATALEN, msgbuf, 515354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &token)) == -1) { 516d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* No clean up */ 517354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } else 518354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if ((rc = 519354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao pthread_create(&tidToken, NULL, TokenThread, 520354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao NULL)) == -1) { 521354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_respond_event(sid, token, DM_RESP_CONTINUE, 0, 0, 522354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao NULL); 523d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 524d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 525354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 526354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to clean up variation! (errno = %d)\n", 527354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 528d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_SKIP(); 529d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 530d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation */ 531d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Wait for DM_EVENT_CREATE event to set token */ 532d13d74bbf207c2d01598c6fef092a75b93b07c71vapier while (createToken == 0) { 533d13d74bbf207c2d01598c6fef092a75b93b07c71vapier EVENT_DELIVERY_DELAY; 534d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 535354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 536354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s(one event token, one userevent token)\n", 537354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName); 538d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_getall_tokens(sid, TOKBUF_NUM, buf, &nelem); 539d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == 0) { 540d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMLOG_PRINT(DMLVL_DEBUG, "nelem = %d\n", nelem); 541d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (nelem == 2) { 542354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 543354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "token 0: %d\n", buf[0]); 544354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 545354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "token 1: %d\n", buf[1]); 546d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (token == buf[0] || token == buf[1]) { 547354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao if (createToken == buf[0] 548354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao || createToken == buf[1]) { 549354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 550354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s passed with expected rc = %d\n", 551354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 552354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0); 553d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_PASS(); 554d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 555354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 556354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but token = %d not in buf\n", 557354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 558354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, 559354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao createToken); 560d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 561d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 562d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 563354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 564354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but token = %d not in buf\n", 565354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 0, 566354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao token); 567d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 568d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 569d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 570354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 571354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with expected rc = %d but unexpected nelem (%d vs %d)\n", 572354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, 0, nelem, 1); 573d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 574d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 575d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 576354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 577354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "%s failed with unexpected rc = %d (errno = %d)\n", 578354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName, rc, errno); 579d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_FAIL(); 580d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 581d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 582d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation clean up */ 583354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_respond_event(sid, token, DM_RESP_CONTINUE, 0, 584354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, NULL); 585d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 586354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 587354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to clean up variation! (errno = %d)\n", 588354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 589d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 590d13d74bbf207c2d01598c6fef092a75b93b07c71vapier pthread_join(tidToken, NULL); 591d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 592d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 593bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 594d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* 595d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * TEST : dm_getall_tokens - DM_NO_SESSION sid 596d13d74bbf207c2d01598c6fef092a75b93b07c71vapier * EXPECTED: rc = -1, errno = EINVAL 597d13d74bbf207c2d01598c6fef092a75b93b07c71vapier */ 598d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (DMVAR_EXEC(GETALL_TOKENS_BASE + 9)) { 599d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t buf[TOKBUF_NUM]; 600d13d74bbf207c2d01598c6fef092a75b93b07c71vapier u_int nelem; 601d13d74bbf207c2d01598c6fef092a75b93b07c71vapier char msgbuf[MSG_DATALEN]; 602d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t token; 603d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 604d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation set up */ 605d13d74bbf207c2d01598c6fef092a75b93b07c71vapier memcpy(msgbuf, MSG_DATA, MSG_DATALEN); 606d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_create_userevent(sid, MSG_DATALEN, msgbuf, &token); 607d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 608354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 609354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to clean up variation! (errno = %d)\n", 610354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 611d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMVAR_SKIP(); 612d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 613d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation */ 614354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, "%s(DM_NO_SESSION, sid)\n", 615354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao szFuncName); 616354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_getall_tokens(DM_NO_SESSION, TOKBUF_NUM, buf, 617354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao &nelem); 6184bb656a129f7507823e9e6d6b98b1a02fd80ef89subrata_modak DMVAR_ENDFAILEXP(szFuncName, -1, rc, EINVAL); 619d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 620d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Variation clean up */ 621354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_respond_event(sid, token, DM_RESP_CONTINUE, 0, 622354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, NULL); 623d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 624354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 625354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Unable to clean up variation! (errno = %d)\n", 626354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao errno); 627d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 628d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 629d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 630bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak 631d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = umount(mountPt); 632d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 633354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, "umount failed! (rc = %d, errno = %d)\n", 634354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 635d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 636d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 637d13d74bbf207c2d01598c6fef092a75b93b07c71vapier pthread_join(tid, NULL); 638d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 639d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rc = dm_destroy_session(sid); 640d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 641354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 642354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "dm_destroy_session failed! (rc = %d, errno = %d)\n", 643354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 644d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 645d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 646d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMLOG_STOP(); 6472c28215423293e443469a07ae7011135d058b671Garrett Cooper 6482c28215423293e443469a07ae7011135d058b671Garrett Cooper tst_exit(); 649d13d74bbf207c2d01598c6fef092a75b93b07c71vapier} 650d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 651d13d74bbf207c2d01598c6fef092a75b93b07c71vapiervoid *Thread(void *parm) 652d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{ 653d13d74bbf207c2d01598c6fef092a75b93b07c71vapier int rc; 654d13d74bbf207c2d01598c6fef092a75b93b07c71vapier size_t dmMsgBufLen; 655d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_eventmsg_t *dmMsg; 656d13d74bbf207c2d01598c6fef092a75b93b07c71vapier int bMounted = DM_FALSE; 657d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_eventtype_t type; 658d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_token_t token; 659d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_eventset_t events; 660d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_response_t response; 661d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 662d13d74bbf207c2d01598c6fef092a75b93b07c71vapier do { 663d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* Loop until message received (wait could be interrupted) */ 664d13d74bbf207c2d01598c6fef092a75b93b07c71vapier do { 665d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMLOG_PRINT(DMLVL_DEBUG, "Waiting for event...\n"); 666d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dmMsgBufLen = 0; 667d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 668354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_get_events(sid, 1, DM_EV_WAIT, sizeof(dmMsgBuf), 669354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dmMsgBuf, &dmMsgBufLen); 670354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 671354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "... dm_get_events returned %d (errno %d)\n", 672354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 673d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } while ((rc == -1) && (errno == EINTR) && (dmMsgBufLen == 0)); 674d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 675d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc) { 676354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 677354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "dm_get_events failed with rc = %d, errno = %d\n", 678354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 679d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_destroy_session(sid); 680d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DM_EXIT(); 681d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 682354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dmMsg = (dm_eventmsg_t *) dmMsgBuf; 683d13d74bbf207c2d01598c6fef092a75b93b07c71vapier token = dmMsg->ev_token; 684d13d74bbf207c2d01598c6fef092a75b93b07c71vapier type = dmMsg->ev_type; 685d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 686d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMLOG_PRINT(DMLVL_DEBUG, "Received message %d\n", type); 687d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 688d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 689d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (type == DM_EVENT_MOUNT) { 690d13d74bbf207c2d01598c6fef092a75b93b07c71vapier /* SPECIAL CASE: need to set disposition, events and response */ 691354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_mount_event_t *me = 692354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_VALUE(dmMsg, ev_data, dm_mount_event_t *); 693d13d74bbf207c2d01598c6fef092a75b93b07c71vapier void *hanp = DM_GET_VALUE(me, me_handle1, void *); 694d13d74bbf207c2d01598c6fef092a75b93b07c71vapier size_t hlen = DM_GET_LEN(me, me_handle1); 695d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 696d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMLOG_PRINT(DMLVL_DEBUG, "Message is DM_EVENT_MOUNT\n"); 697d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMLOG_PRINT(DMLVL_DEBUG, " Mode: %x\n", me->me_mode); 698354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, " File system handle: %p\n", 699354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao hanp); 700354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 701354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao " File system handle length: %d\n", hlen); 702354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, " Mountpoint handle: %p\n", 703354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_VALUE(me, me_handle2, void *)); 704354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 705354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao " Mountpoint handle length: %d\n", 706354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_LEN(me, me_handle2)); 707354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, " Mountpoint path: %s\n", 708354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_VALUE(me, me_name1, char *)); 709354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, " Media designator: %s\n", 710354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_VALUE(me, me_name2, char *)); 711354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, " Root handle: %p\n", 712354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_VALUE(me, me_roothandle, void *)); 713354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, " Root handle length: %d\n", 714354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_LEN(me, me_roothandle)); 715354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 716354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao bMounted = dm_handle_is_valid(hanp, hlen); 717354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 718354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_request_right(sid, hanp, hlen, token, 719354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_RR_WAIT, DM_RIGHT_EXCL); 720d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 721354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 722354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "dm_request_right failed! (rc = %d, errno = %d)\n", 723354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 724d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_destroy_session(sid); 725d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DM_EXIT(); 726d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 727d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 728d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMEV_ZERO(events); 729d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMEV_SET(DM_EVENT_PREUNMOUNT, events); 730d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMEV_SET(DM_EVENT_UNMOUNT, events); 731d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DMEV_SET(DM_EVENT_CREATE, events); 732354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_set_disp(sid, hanp, hlen, token, &events, 733354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_EVENT_MAX); 734d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 735354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 736354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "dm_set_disp failed! (rc = %d, errno = %d)\n", 737354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 738d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_destroy_session(sid); 739d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DM_EXIT(); 740d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 741d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 742354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_set_eventlist(sid, hanp, hlen, token, &events, 743354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_EVENT_MAX); 744d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 745354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 746354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "dm_set_eventlist failed! (rc = %d, errno = %d)\n", 747354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 748d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_destroy_session(sid); 749d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DM_EXIT(); 750d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 751d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 752354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_release_right(sid, hanp, hlen, token); 753d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc == -1) { 754354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 755354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "dm_request_right failed! (rc = %d, errno = %d)\n", 756354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc, errno); 757d13d74bbf207c2d01598c6fef092a75b93b07c71vapier dm_destroy_session(sid); 758d13d74bbf207c2d01598c6fef092a75b93b07c71vapier DM_EXIT(); 759d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 760d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 761d13d74bbf207c2d01598c6fef092a75b93b07c71vapier response = DM_RESP_CONTINUE; 762d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else if (type == DM_EVENT_UNMOUNT) { 763354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_namesp_event_t *nse = 764354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_VALUE(dmMsg, ev_data, dm_namesp_event_t *); 765d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (nse->ne_retcode == 0) { 766d13d74bbf207c2d01598c6fef092a75b93b07c71vapier bMounted = DM_FALSE; 767d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 768d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 769d13d74bbf207c2d01598c6fef092a75b93b07c71vapier response = DM_RESP_CONTINUE; 770d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } else { 771d13d74bbf207c2d01598c6fef092a75b93b07c71vapier switch (type) { 772d13d74bbf207c2d01598c6fef092a75b93b07c71vapier case DM_EVENT_PREUNMOUNT: 773d13d74bbf207c2d01598c6fef092a75b93b07c71vapier response = DM_RESP_CONTINUE; 774d13d74bbf207c2d01598c6fef092a75b93b07c71vapier break; 7752c28215423293e443469a07ae7011135d058b671Garrett Cooper 776d13d74bbf207c2d01598c6fef092a75b93b07c71vapier case DM_EVENT_CREATE: 777354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao { 778354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_namesp_event_t *nse = 779354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_VALUE(dmMsg, ev_data, 780354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao dm_namesp_event_t *); 781354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 782354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 783354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Message is DM_EVENT_CREATE\n"); 784354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, " Mode: %x\n", 785354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao nse->ne_mode); 786354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 787354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao " Parent handle: %p\n", 788354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_VALUE(nse, 789354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ne_handle1, 790354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao void *)); 791354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 792354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao " Parent handle length: %d\n", 793354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_LEN(nse, 794354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao ne_handle1)); 795354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 796354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao " Entry name: %s\n", 797354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_GET_VALUE(nse, ne_name1, 798354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao char *)); 799354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 800354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao createToken = token; 801354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 802354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao " Token: %d\n", 803354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao createToken); 804354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 805354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao /* Wait for main thread to call dm_getall_tokens */ 806354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao sleep(3); 807354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 808354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao response = DM_RESP_CONTINUE; 809354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao break; 810354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 811d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 812d13d74bbf207c2d01598c6fef092a75b93b07c71vapier default: 813354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao { 814354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_ERR, 815354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Message is unexpected!\n"); 816354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao response = DM_RESP_ABORT; 817354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao break; 818354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao } 819d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 820d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 821d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 822d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (response != DM_RESP_INVALID) { 823354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DMLOG_PRINT(DMLVL_DEBUG, 824354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao "Responding to message %d with %d\n", type, 825354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao response); 826354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao rc = dm_respond_event(sid, token, response, 827354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao response == 828354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao DM_RESP_ABORT ? ABORT_ERRNO : 0, 829354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao 0, NULL); 830d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 831d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } while (bMounted); 832d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 833d13d74bbf207c2d01598c6fef092a75b93b07c71vapier pthread_exit(0); 834bdbaec51a423e715c2b03ed9e497e9a1fba6103esubrata_modak} 835d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 836d13d74bbf207c2d01598c6fef092a75b93b07c71vapiervoid *TokenThread(void *parm) 837d13d74bbf207c2d01598c6fef092a75b93b07c71vapier{ 838e753fd7967c95651b952dd6fe67d2cb56478056esubrata_modak int rc = mkdir(DummySubdir, DUMMY_DIR_RW_MODE); 839d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 840d13d74bbf207c2d01598c6fef092a75b93b07c71vapier if (rc != -1) { 841d13d74bbf207c2d01598c6fef092a75b93b07c71vapier rmdir(DummySubdir); 842d13d74bbf207c2d01598c6fef092a75b93b07c71vapier } 843d13d74bbf207c2d01598c6fef092a75b93b07c71vapier 844d13d74bbf207c2d01598c6fef092a75b93b07c71vapier pthread_exit(0); 845ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 846