Whamcloud - gitweb
land 0.5.20.3 b_devel onto HEAD (b_devel will remain)
[fs/lustre-release.git] / lustre / liblustre / libtest.c
1 #include <stdio.h>
2 #include <netinet/in.h>
3 #include <sys/socket.h>
4 #include <arpa/inet.h>
5
6 #include <portals/api-support.h> /* needed for ptpctl.h */
7 #include <portals/ptlctl.h>     /* needed for parse_dump */
8
9
10 #include <liblustre.h>
11 #include <linux/obd.h>
12 #include <linux/obd_class.h>
13 #include <../user/procbridge/procbridge.h>
14
15 ptl_handle_ni_t         tcpnal_ni;
16
17 struct pingcli_args {
18         ptl_nid_t mynid;
19         ptl_nid_t nid;
20         ptl_pid_t port;
21         int count;
22         int size;
23 };
24
25 struct task_struct *current;
26
27 struct obd_class_user_state ocus;
28
29 /* portals interfaces */
30 inline const ptl_handle_ni_t *
31 kportal_get_ni (int nal)
32 {
33         return &tcpnal_ni;
34 }
35
36 inline void
37 kportal_put_ni (int nal)
38 {
39         return;
40 }
41
42 void init_current(int argc, char **argv)
43
44         current = malloc(sizeof(*current));
45         strncpy(current->comm, argv[0], sizeof(current->comm));
46         current->pid = getpid();
47
48 }
49
50 ptl_nid_t tcpnal_mynid;
51
52 int init_lib_portals(struct pingcli_args *args)
53 {
54         int rc;
55
56         PtlInit();
57         tcpnal_mynid = args->mynid;
58         rc = PtlNIInit(procbridge_interface, 0, 0, 0, &tcpnal_ni);
59         if (rc != 0) {
60                 CERROR("ksocknal: PtlNIInit failed: error %d\n", rc);
61                 PtlFini();
62                 RETURN (rc);
63         }
64         PtlNIDebug(tcpnal_ni, ~0);
65         return rc;
66 }
67
68 extern int class_handle_ioctl(struct obd_class_user_state *ocus, unsigned int cmd, unsigned long arg);
69
70
71 int lib_ioctl(int dev_id, int opc, void * ptr)
72 {
73
74         if (dev_id == OBD_DEV_ID) {
75                 struct obd_ioctl_data *ioc = ptr;
76                 class_handle_ioctl(&ocus, opc, (unsigned long)ptr);
77
78                 /* you _may_ need to call obd_ioctl_unpack or some
79                    other verification function if you want to use ioc
80                    directly here */
81                 printf ("processing ioctl cmd: %x buf len: %d\n", 
82                         opc,  ioc->ioc_len);
83         }
84         return (0);
85 }
86
87 int main(int argc, char **argv) 
88 {
89         struct pingcli_args *args;
90         args= malloc(sizeof(*args));
91         if (!args) { 
92                 printf("Malloc error\n");
93                 exit(1);
94         }
95
96         args->mynid   = ntohl (inet_addr (argv[1]));
97         INIT_LIST_HEAD(&ocus.ocus_conns);
98
99         init_current(argc, argv);
100         init_obdclass();
101         init_lib_portals(args);
102         ptlrpc_init();
103         ldlm_init();
104         osc_init();
105         echo_client_init();
106         /* XXX  need mdc_getlovinfo before lov_init can work.. */
107         //        lov_init();
108
109         parse_dump("/tmp/DUMP_FILE", lib_ioctl);
110
111         printf("Hello\n");
112         return 0;
113 }
114