[IPoIB] Add support for address translation
[mirror/winof/.git] / inc / iba / ib_at_ioctl.h
1 /*\r
2 * Copyright (c) 2005 Mellanox Technologies.  All rights reserved.\r
3 * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
4 *\r
5 * This software is available to you under the OpenIB.org BSD license\r
6 * below:\r
7 *\r
8 *     Redistribution and use in source and binary forms, with or\r
9 *     without modification, are permitted provided that the following\r
10 *     conditions are met:\r
11 *\r
12 *      - Redistributions of source code must retain the above\r
13 *        copyright notice, this list of conditions and the following\r
14 *        disclaimer.\r
15 *\r
16 *      - Redistributions in binary form must reproduce the above\r
17 *        copyright notice, this list of conditions and the following\r
18 *        disclaimer in the documentation and/or other materials\r
19 *        provided with the distribution.\r
20 *\r
21 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
22 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
23 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
24 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
25 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
26 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
27 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
28 * SOFTWARE.\r
29 *\r
30 * $Id$\r
31 */\r
32 \r
33 /* This file is shared between user- and kernel-mode */\r
34 \r
35 #include <iba/ib_types.h>\r
36 \r
37 \r
38 #ifndef _IB_AT_IOCTL_H_\r
39 #define _IB_AT_IOCTL_H_\r
40 \r
41 \r
42 #define IBAT_IOCTL_VERSION              2\r
43 \r
44 #define IBAT_MAC_LEN                    6\r
45 \r
46 \r
47 #define IOCTL_IBAT( n )         \\r
48         CTL_CODE( FILE_DEVICE_UNKNOWN, (0x800 + n), \\r
49                 METHOD_BUFFERED, FILE_READ_ACCESS )\r
50 \r
51 /** This IRP is used to return all available CAs ports number\r
52  * and port guid */\r
53 #define IOCTL_IBAT_PORTS        IOCTL_IBAT( 1 )\r
54 \r
55 typedef struct _IBAT_PORT_RECORD\r
56 {\r
57         UINT64                          CaGuid;\r
58         UINT64                          PortGuid;\r
59 } IBAT_PORT_RECORD;\r
60 \r
61 typedef struct _IOCTL_IBAT_PORTS_IN\r
62 {\r
63         ULONG                           Version;\r
64 \r
65 } IOCTL_IBAT_PORTS_IN;\r
66 \r
67 typedef struct _IOCTL_IBAT_PORTS_OUT\r
68 {\r
69         /** Total size, of the output buffer needed if the\r
70          * suplied buffer wasn't enough */\r
71         ULONG                           Size;\r
72         LONG                            NumPorts;\r
73         IBAT_PORT_RECORD        Ports[1];\r
74 \r
75 } IOCTL_IBAT_PORTS_OUT;\r
76 \r
77 \r
78 /** This IRP is used to return all the ip addresses that\r
79  * are assigned to a port */\r
80 #define IOCTL_IBAT_IP_ADDRESSES         IOCTL_IBAT( 2 )\r
81 \r
82 typedef struct _IOCTL_IBAT_IP_ADDRESSES_IN\r
83 {\r
84         ULONG                           Version;\r
85         /** The guid of the port that we are querying for.  May be\r
86          * zero if querying for IP addresses of all ports. */\r
87         UINT64                          PortGuid;\r
88 \r
89 } IOCTL_IBAT_IP_ADDRESSES_IN;\r
90 \r
91 typedef struct _IP_ADDRESS\r
92 {\r
93         /** Might only be 4 or 6 */\r
94         CHAR                            IpVersion;\r
95         /** Sized to support both IPv4 and IPv6 */\r
96         UCHAR                           Address[16];\r
97 \r
98 } IP_ADDRESS;\r
99 \r
100 typedef struct _IOCTL_IBAT_IP_ADDRESSES_OUT\r
101 {\r
102         /** Total size of the output buffer needed if the\r
103          * suplied buffer wasn't enough */\r
104         ULONG                           Size;\r
105         LONG                            AddressCount;\r
106         IP_ADDRESS                      Address[1];\r
107 \r
108 } IOCTL_IBAT_IP_ADDRESSES_OUT;\r
109 \r
110 \r
111 /** This IRP is used to convert a remote MAC addresses to a remote GID */\r
112 #define IOCTL_IBAT_MAC_TO_GID IOCTL_IBAT( 3 )\r
113 \r
114 typedef struct _IOCTL_IBAT_MAC_TO_GID_IN\r
115 {\r
116         ULONG                           Version;\r
117         UINT64                          PortGuid;\r
118         UCHAR                           DestMac[IBAT_MAC_LEN];\r
119 \r
120 } IOCTL_IBAT_MAC_TO_GID_IN;\r
121 \r
122 typedef struct _IOCTL_IBAT_MAC_TO_GID_OUT\r
123 {\r
124         ib_gid_t                        DestGid;\r
125 \r
126 } IOCTL_IBAT_MAC_TO_GID_OUT;\r
127 \r
128 \r
129 #define IBAT_DEV_NAME   L"\\Device\\ibat"\r
130 #define IBAT_DOS_DEV_NAME L"\\DosDevices\\Global\\ibat"\r
131 #define IBAT_WIN32_NAME L"\\\\.\\ibat"\r
132 \r
133 #endif  /* _IB_AT_IOCTL_H_ */\r