Krishna iResearch Intelligent Cloud Platform - VIRtual Generic Os - VIRGO - Linux kernel extensions for cloud
 All Classes
virgo_kernelupcall_plugin.c
1 /***************************************************************************************
2 VIRGO - a linux module extension with CPU and Memory pooling with cloud capabilities
3 
4 Copyright (C) 2009-2013 Ka.Shrinivaasan
5 
6 This program is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10 
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
15 
16 You should have received a copy of the GNU General Public License
17 along with this program. If not, see <http://www.gnu.org/licenses/>.
18 
19 mail to: ka.shrinivaasan@gmail.com
20 *****************************************************************************************/
21 
22 #include <sys/types.h>
23 #include <sys/stat.h>
24 #include <stdio.h>
25 #include <stdlib.h>
26 #include <dlfcn.h>
27 #include <pthread.h>
28 #include <fcntl.h>
29 #include <unistd.h>
30 #include <string.h>
31 
32 int main(int argc, char **argv)
33 {
34  void *handle;
35  void* (*cloud_function)(void*);
36  char *error;
37  pthread_t tid;
38  void* x;
39 
40  int s=0;
41 
42  handle = dlopen("/home/kashrinivaasan/linux-3.7.8/drivers/virgo/cloudfs/libvirgo_fs.so", RTLD_LAZY);
43  if (!handle) {
44  fprintf(stderr, "%s\n", dlerror());
45  exit(EXIT_FAILURE);
46  }
47 
48  dlerror(); /* Clear any existing error */
49 
50  printf("dlsym lookup for cloud fs function: %s\n", argv[1]);
51  char* symbol_args=strdup(argv[1]);
52  char* symbol=strsep(&symbol_args," ");
53  printf("virgo_kernel_upcall_plugin: symbol=%s, symbol_args=%s\n",symbol,symbol_args);
54  *(void **) (&cloud_function) = dlsym(handle, symbol);
55  /* *(void **) (&cloud_function) = dlsym(handle, "_Z16virgo_cloud_testPv");*/
56 
57  if ((error = dlerror()) != NULL) {
58  fprintf(stderr, "%s\n", error);
59  exit(EXIT_FAILURE);
60  }
61  printf("virgo_kernel_upcall_plugin: spawning userspace thread for virgo cloud fs function pointer: %x\n",cloud_function);
62  s=pthread_create(&tid, NULL, cloud_function, symbol_args);
63  pthread_join(tid, &x);
64  fflush(stdout);
65  dlclose(handle);
66 
67  exit(EXIT_SUCCESS);
68 }