[ipoib] mcast garbage collector and igmp V2 support.
[mirror/winof/.git] / ulp / ipoib / kernel / ipoib_endpoint.h
1 /*\r
2  * Copyright (c) 2005 SilverStorm Technologies.  All rights reserved.\r
3  * Copyright (c) 2006 Mellanox Technologies.  All rights reserved.\r
4  * Portions Copyright (c) 2008 Microsoft Corporation.  All rights reserved.\r
5  *\r
6  * This software is available to you under the OpenIB.org BSD license\r
7  * below:\r
8  *\r
9  *     Redistribution and use in source and binary forms, with or\r
10  *     without modification, are permitted provided that the following\r
11  *     conditions are met:\r
12  *\r
13  *      - Redistributions of source code must retain the above\r
14  *        copyright notice, this list of conditions and the following\r
15  *        disclaimer.\r
16  *\r
17  *      - Redistributions in binary form must reproduce the above\r
18  *        copyright notice, this list of conditions and the following\r
19  *        disclaimer in the documentation and/or other materials\r
20  *        provided with the distribution.\r
21  *\r
22  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
23  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
24  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
25  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
26  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
27  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
28  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
29  * SOFTWARE.\r
30  *\r
31  * $Id$\r
32  */\r
33 \r
34 \r
35 #ifndef _IPOIB_ENDPOINT_H_\r
36 #define _IPOIB_ENDPOINT_H_\r
37 \r
38 \r
39 #include <iba/ib_al.h>\r
40 #include <complib/cl_qlist.h>\r
41 #include <complib/cl_qmap.h>\r
42 #include <complib/cl_fleximap.h>\r
43 #include <complib/cl_obj.h>\r
44 #include "iba/ipoib_ifc.h"\r
45 #include <ip_packet.h>\r
46 #include "ipoib_debug.h"\r
47 \r
48 \r
49 typedef struct _ipoib_endpt\r
50 {\r
51         cl_obj_t                                obj;\r
52         cl_obj_rel_t                    rel;\r
53         cl_map_item_t                   mac_item;\r
54         cl_fmap_item_t                  gid_item;\r
55         cl_map_item_t                   lid_item;\r
56         ib_query_handle_t               h_query;\r
57         ib_mcast_handle_t               h_mcast;\r
58         mac_addr_t                              mac;\r
59         ib_gid_t                                dgid;\r
60         net16_t                                 dlid;\r
61         net32_t                                 qpn;\r
62         ib_av_handle_t                  h_av;\r
63         boolean_t                               expired;\r
64         ib_al_ifc_t                             *p_ifc;\r
65         boolean_t                       is_in_use;\r
66         boolean_t                               is_mcast_listener;\r
67 }       ipoib_endpt_t;\r
68 /*\r
69 * FIELDS\r
70 *       mac_item\r
71 *               Map item for storing the endpoint in a map.  The key is the\r
72 *               destination MAC address.\r
73 *\r
74 *       lid_item\r
75 *               Map item for storing the endpoint in a map.  The key is the\r
76 *               destination LID.\r
77 *\r
78 *       gid_item\r
79 *               Map item for storing the endpoint in a map.  The key is the\r
80 *               destination GID.\r
81 *\r
82 *       h_query\r
83 *               Query handle for cancelling SA queries.\r
84 *\r
85 *       h_mcast\r
86 *               For multicast endpoints, the multicast handle.\r
87 *\r
88 *       mac\r
89 *               MAC address.\r
90 *\r
91 *       dgid\r
92 *               Destination GID.\r
93 *\r
94 *       dlid\r
95 *               Destination LID.  The destination LID is only set for endpoints\r
96 *               that are on the same subnet.  It is used as key in the LID map.\r
97 *\r
98 *       qpn\r
99 *               Destination queue pair number.\r
100 *\r
101 *       h_av\r
102 *               Address vector for sending data.\r
103 *\r
104 *       expired\r
105 *               Flag to indicate that the endpoint should be flushed.\r
106 *\r
107 *       p_ifc\r
108 *               Reference to transport functions, can be used\r
109 *               while endpoint is not attached to port yet.\r
110 *\r
111 * NOTES\r
112 *       If the h_mcast member is set, the endpoint is never expired.\r
113 *********/\r
114 \r
115 \r
116 ipoib_endpt_t*\r
117 ipoib_endpt_create(\r
118         IN              const   ib_gid_t* const                         p_dgid,\r
119         IN              const   net16_t                                         dlid,\r
120         IN              const   net32_t                                         qpn );\r
121 \r
122 \r
123 ib_api_status_t\r
124 ipoib_endpt_set_mcast(\r
125         IN                              ipoib_endpt_t* const            p_endpt,\r
126         IN                              ib_pd_handle_t                          h_pd,\r
127         IN                              uint8_t                                         port_num,\r
128         IN                              ib_mcast_rec_t* const           p_mcast_rec );\r
129 \r
130 \r
131 static inline void\r
132 ipoib_endpt_ref(\r
133         IN                              ipoib_endpt_t* const            p_endpt )\r
134 {\r
135         CL_ASSERT( p_endpt );\r
136 \r
137         cl_obj_ref( &p_endpt->obj );\r
138         /*\r
139          * Anytime we reference the endpoint, we're either receiving data\r
140          * or trying to send data to that endpoint.  Clear the expired flag\r
141          * to prevent the AV from being flushed.\r
142          */\r
143         p_endpt->expired = FALSE;\r
144 }\r
145 \r
146 \r
147 static inline void\r
148 ipoib_endpt_deref(\r
149         IN                              ipoib_endpt_t* const            p_endpt )\r
150 {\r
151         cl_obj_deref( &p_endpt->obj );\r
152 }\r
153 \r
154 \r
155 NDIS_STATUS\r
156 ipoib_endpt_queue(\r
157         IN                              ipoib_endpt_t* const            p_endpt );\r
158 \r
159 \r
160 #endif  /* _IPOIB_ENDPOINT_H_ */\r