[DAPL2] DAPL Counters 2.0.3 & extensions.
[mirror/winof/.git] / tests / wherebu / user / wherebu.cpp
1 /*\r
2  * Copyright (c) 2008 Microsoft Corporation.  All rights reserved.\r
3  *\r
4  * This software is available to you under the OpenIB.org BSD license\r
5  * below:\r
6  *\r
7  *     Redistribution and use in source and binary forms, with or\r
8  *     without modification, are permitted provided that the following\r
9  *     conditions are met:\r
10  *\r
11  *      - Redistributions of source code must retain the above\r
12  *        copyright notice, this list of conditions and the following\r
13  *        disclaimer.\r
14  *\r
15  *      - Redistributions in binary form must reproduce the above\r
16  *        copyright notice, this list of conditions and the following\r
17  *        disclaimer in the documentation and/or other materials\r
18  *        provided with the distribution.\r
19  *\r
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
24  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
25  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
26  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
27  * SOFTWARE.\r
28  *\r
29  * $Id:$\r
30  */\r
31 \r
32 \r
33 #include "stdlib.h"\r
34 #include "stdio.h"\r
35 #include "iba/ib_types.h"\r
36 #include "iba/ibat.h"\r
37 \r
38 \r
39 inline LONGLONG GetElapsedTime()\r
40 {\r
41     LARGE_INTEGER elapsed;\r
42     QueryPerformanceCounter(&elapsed);\r
43     return elapsed.QuadPart;\r
44 }\r
45 \r
46 inline LONGLONG GetFrequency()\r
47 {\r
48     LARGE_INTEGER Frequency;\r
49     QueryPerformanceFrequency(&Frequency);\r
50     return Frequency.QuadPart;\r
51 }\r
52 \r
53 int PrintUsage( int argc, char *argv[] )\r
54 {\r
55     UNREFERENCED_PARAMETER( argc );\r
56     printf( "%s <source IP> <destination IP>\n", argv[0] );\r
57 \r
58     return __LINE__;\r
59 }\r
60 \r
61 int __cdecl main(int argc, char *argv[])\r
62 {\r
63     if( argc < 3 )\r
64         return PrintUsage( argc, argv );\r
65 \r
66     struct sockaddr_in srcAddr = {0};\r
67     srcAddr.sin_family = AF_INET;\r
68     srcAddr.sin_addr.s_addr = inet_addr( argv[1] );\r
69 \r
70     struct sockaddr_in destAddr = {0};\r
71     destAddr.sin_family = AF_INET;\r
72     destAddr.sin_addr.s_addr = inet_addr( argv[2] );\r
73 \r
74     ib_path_rec_t path;\r
75     HRESULT hr = IBAT::Resolve(\r
76         (struct sockaddr*)&srcAddr,\r
77         (struct sockaddr*)&destAddr,\r
78         (IBAT_PATH_BLOB*)&path\r
79         );\r
80     if( FAILED( hr ) )\r
81     {\r
82         printf( "Resolve returned %08x.\n", hr );\r
83         return hr;\r
84     }\r
85 \r
86     printf(\r
87         "I B at:\n"\r
88         "partition %x\n"\r
89         "source GID %x%x:%x%x:%x%x:%x%x:%x%x:%x%x:%x%x:%x%x\n"\r
90         "destination GID %x%x:%x%x:%x%x:%x%x:%x%x:%x%x:%x%x:%x%x\n",\r
91         path.pkey,\r
92         path.sgid.raw[0], path.sgid.raw[1], path.sgid.raw[2], path.sgid.raw[3],\r
93         path.sgid.raw[4], path.sgid.raw[5], path.sgid.raw[6], path.sgid.raw[7],\r
94         path.sgid.raw[8], path.sgid.raw[9], path.sgid.raw[10], path.sgid.raw[11],\r
95         path.sgid.raw[12], path.sgid.raw[13], path.sgid.raw[14], path.sgid.raw[15],\r
96         path.dgid.raw[0], path.dgid.raw[1], path.dgid.raw[2], path.dgid.raw[3],\r
97         path.dgid.raw[4], path.dgid.raw[5], path.dgid.raw[6], path.dgid.raw[7],\r
98         path.dgid.raw[8], path.dgid.raw[9], path.dgid.raw[10], path.dgid.raw[11],\r
99         path.dgid.raw[12], path.dgid.raw[13], path.dgid.raw[14], path.dgid.raw[15]\r
100     );\r
101 \r
102     LONGLONG StartTime = GetElapsedTime();\r
103     for( int i = 0; i < 2000; i++ )\r
104     {\r
105         HRESULT hr = IBAT::Resolve(\r
106             (struct sockaddr*)&srcAddr,\r
107             (struct sockaddr*)&destAddr,\r
108             (IBAT_PATH_BLOB*)&path\r
109             );\r
110         if( FAILED( hr ) )\r
111         {\r
112             printf( "Resolve returned %08x.\n", hr );\r
113             return hr;\r
114         }\r
115     }\r
116     LONGLONG RunTime = GetElapsedTime() - StartTime;\r
117     double Rate = 2000.0 / ((double)RunTime / (double)GetFrequency());\r
118     printf( "%7.2f lookups per second\n", Rate );\r
119 \r
120     return 0;\r
121 }\r