[IPoIB] Add port number to IBAT_PORT_RECORD to allow SDP to prepost receives.
[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              4\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_ANY_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         UINT8                           PortNum;\r
60 \r
61 } IBAT_PORT_RECORD;\r
62 \r
63 typedef struct _IOCTL_IBAT_PORTS_IN\r
64 {\r
65         ULONG                           Version;\r
66 \r
67 } IOCTL_IBAT_PORTS_IN;\r
68 \r
69 typedef struct _IOCTL_IBAT_PORTS_OUT\r
70 {\r
71         /** Total size, of the output buffer needed if the\r
72          * suplied buffer wasn't enough */\r
73         ULONG                           Size;\r
74         LONG                            NumPorts;\r
75         IBAT_PORT_RECORD        Ports[1];\r
76 \r
77 } IOCTL_IBAT_PORTS_OUT;\r
78 \r
79 \r
80 /** This IRP is used to return all the ip addresses that\r
81  * are assigned to a port */\r
82 #define IOCTL_IBAT_IP_ADDRESSES         IOCTL_IBAT( 2 )\r
83 \r
84 typedef struct _IOCTL_IBAT_IP_ADDRESSES_IN\r
85 {\r
86         ULONG                           Version;\r
87         /** The guid of the port that we are querying for.  May be\r
88          * zero if querying for IP addresses of all ports. */\r
89         UINT64                          PortGuid;\r
90 \r
91 } IOCTL_IBAT_IP_ADDRESSES_IN;\r
92 \r
93 typedef struct _IP_ADDRESS\r
94 {\r
95         /** Might only be 4 or 6 */\r
96         CHAR                            IpVersion;\r
97         /** Sized to support both IPv4 and IPv6 */\r
98         UCHAR                           Address[16];\r
99 \r
100 } IP_ADDRESS;\r
101 \r
102 typedef struct _IOCTL_IBAT_IP_ADDRESSES_OUT\r
103 {\r
104         /** Total size of the output buffer needed if the\r
105          * suplied buffer wasn't enough */\r
106         ULONG                           Size;\r
107         LONG                            AddressCount;\r
108         IP_ADDRESS                      Address[1];\r
109 \r
110 } IOCTL_IBAT_IP_ADDRESSES_OUT;\r
111 \r
112 \r
113 /** This IRP is used to convert a remote MAC addresses to a remote GID */\r
114 #define IOCTL_IBAT_MAC_TO_GID IOCTL_IBAT( 3 )\r
115 \r
116 typedef struct _IOCTL_IBAT_MAC_TO_GID_IN\r
117 {\r
118         ULONG                           Version;\r
119         UINT64                          PortGuid;\r
120         UCHAR                           DestMac[IBAT_MAC_LEN];\r
121 \r
122 } IOCTL_IBAT_MAC_TO_GID_IN;\r
123 \r
124 typedef struct _IOCTL_IBAT_MAC_TO_GID_OUT\r
125 {\r
126         ib_gid_t                        DestGid;\r
127 \r
128 } IOCTL_IBAT_MAC_TO_GID_OUT;\r
129 \r
130 \r
131 #define IBAT_DEV_NAME   L"\\Device\\ibat"\r
132 #define IBAT_DOS_DEV_NAME L"\\DosDevices\\Global\\ibat"\r
133 #define IBAT_WIN32_NAME L"\\\\.\\ibat"\r
134 \r
135 #endif  /* _IB_AT_IOCTL_H_ */\r