1 /* 2 * Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved. 3 * Copyright (c) 2002-2012 Mellanox Technologies LTD. All rights reserved. 4 * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. 5 * 6 * This software is available to you under a choice of one of two 7 * licenses. You may choose to be licensed under the terms of the GNU 8 * General Public License (GPL) Version 2, available from the file 9 * COPYING in the main directory of this source tree, or the 10 * OpenIB.org BSD license below: 11 * 12 * Redistribution and use in source and binary forms, with or 13 * without modification, are permitted provided that the following 14 * conditions are met: 15 * 16 * - Redistributions of source code must retain the above 17 * copyright notice, this list of conditions and the following 18 * disclaimer. 19 * 20 * - Redistributions in binary form must reproduce the above 21 * copyright notice, this list of conditions and the following 22 * disclaimer in the documentation and/or other materials 23 * provided with the distribution. 24 * 25 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32 * SOFTWARE. 33 * 34 */ 35 36 /* 37 * Abstract: 38 * Declaration of osm_mcm_port_t. 39 * This object represents the membership of a port in a multicast group. 40 * This object is part of the OpenSM family of objects. 41 */ 42 43 #ifndef _OSM_MCM_PORT_H_ 44 #define _OSM_MCM_PORT_H_ 45 46 #include <iba/ib_types.h> 47 #include <complib/cl_qmap.h> 48 #include <opensm/osm_base.h> 49 #include <opensm/osm_port.h> 50 51 #ifdef __cplusplus 52 # define BEGIN_C_DECLS extern "C" { 53 # define END_C_DECLS } 54 #else /* !__cplusplus */ 55 # define BEGIN_C_DECLS 56 # define END_C_DECLS 57 #endif /* __cplusplus */ 58 59 BEGIN_C_DECLS 60 61 struct osm_mgrp; 62 63 /****s* OpenSM: MCM Port Object/osm_mcm_port_t 64 * NAME 65 * osm_mcm_port_t 66 * 67 * DESCRIPTION 68 * This object represents a particular port as a member of a 69 * multicast group. 70 * 71 * This object should be treated as opaque and should 72 * be manipulated only through the provided functions. 73 * 74 * SYNOPSIS 75 */ 76 typedef struct osm_mcm_port { 77 cl_map_item_t map_item; 78 cl_list_item_t list_item; 79 osm_port_t *port; 80 struct osm_mgrp *mgrp; 81 } osm_mcm_port_t; 82 /* 83 * FIELDS 84 * map_item 85 * Map Item for qmap linkage. Must be first element!! 86 * 87 * list_item 88 * Linkage structure for cl_qlist. 89 * 90 * port 91 * Reference to the parent port 92 * 93 * mgrp 94 * The pointer to multicast group where this port is member of 95 * 96 * SEE ALSO 97 * MCM Port Object 98 *********/ 99 100 /****f* OpenSM: MCM Port Object/osm_mcm_port_new 101 * NAME 102 * osm_mcm_port_new 103 * 104 * DESCRIPTION 105 * The osm_mcm_port_new function allocates and initializes a 106 * MCM Port Object for use. 107 * 108 * SYNOPSIS 109 */ 110 osm_mcm_port_t *osm_mcm_port_new(IN osm_port_t * port, IN struct osm_mgrp *mgrp); 111 /* 112 * PARAMETERS 113 * port 114 * [in] Pointer to the port object 115 * 116 * mgrp 117 * [in] Pointer to multicast group where this port is joined 118 * 119 * RETURN VALUES 120 * Pointer to the allocated and initialized MCM Port object. 121 * 122 * NOTES 123 * 124 * SEE ALSO 125 * MCM Port Object, osm_mcm_port_delete, 126 *********/ 127 128 /****f* OpenSM: MCM Port Object/osm_mcm_port_delete 129 * NAME 130 * osm_mcm_port_delete 131 * 132 * DESCRIPTION 133 * The osm_mcm_port_delete function destroys and dellallocates an 134 * MCM Port Object, releasing all resources. 135 * 136 * SYNOPSIS 137 */ 138 void osm_mcm_port_delete(IN osm_mcm_port_t * p_mcm); 139 /* 140 * PARAMETERS 141 * p_mcm 142 * [in] Pointer to a MCM Port Object to delete. 143 * 144 * RETURN VALUE 145 * This function does not return a value. 146 * 147 * NOTES 148 * 149 * SEE ALSO 150 * MCM Port Object, osm_mcm_port_new 151 *********/ 152 153 /****s* OpenSM: MCM Port Object/osm_mcm_alias_guid_t 154 * NAME 155 * osm_mcm_alias_guid_t 156 * 157 * DESCRIPTION 158 * This object represents an alias guid for a mcm port. 159 * 160 * The osm_mcm_alias_guid_t object should be treated as opaque and should 161 * be manipulated only through the provided functions. 162 * 163 * SYNOPSIS 164 */ 165 typedef struct osm_mcm_alias_guid { 166 cl_map_item_t map_item; 167 ib_net64_t alias_guid; 168 osm_mcm_port_t *p_base_mcm_port; 169 ib_gid_t port_gid; 170 uint8_t scope_state; 171 boolean_t proxy_join; 172 } osm_mcm_alias_guid_t; 173 /* 174 * FIELDS 175 * map_item 176 * Linkage structure for cl_qmap. MUST BE FIRST MEMBER! 177 * 178 * alias_guid 179 * Alias GUID for port obtained from SM GUIDInfo attribute 180 * 181 * p_base_mcm_port 182 * Pointer to osm_mcm_port_t for base port GUID 183 * 184 * port_gid 185 * GID of the member port 186 * 187 * scope_state 188 * 189 * proxy_join 190 * If FALSE - Join was performed by the endport identified 191 * by PortGID. If TRUE - Join was performed on behalf of 192 * the endport identified by PortGID by another port within 193 * the same partition. 194 * 195 * SEE ALSO 196 * MCM Port, Physical Port, Physical Port Table 197 */ 198 199 /****f* OpenSM: MCM Port Object/osm_mcm_alias_guid_new 200 * NAME 201 * osm_mcm_alias_guid_new 202 * 203 * DESCRIPTION 204 * This function allocates and initializes an mcm alias guid object. 205 * 206 * SYNOPSIS 207 */ 208 osm_mcm_alias_guid_t *osm_mcm_alias_guid_new(IN osm_mcm_port_t *p_base_mcm_port, 209 IN ib_member_rec_t *mcmr, 210 IN boolean_t proxy); 211 /* 212 * PARAMETERS 213 * p_base_mcm_port 214 * [in] Pointer to the mcm port for this base GUID 215 * 216 * mcmr 217 * [in] Pointer to MCMember record of the join request 218 * 219 * proxy 220 * [in] proxy_join state analyzed from the request 221 * 222 * RETURN VALUE 223 * Pointer to the initialized mcm alias guid object. 224 * 225 * NOTES 226 * Allows calling other mcm alias guid methods. 227 * 228 * SEE ALSO 229 * MCM Port Object 230 *********/ 231 232 /****f* OpenSM: MCM Port Object/osm_mcm_alias_guid_delete 233 * NAME 234 * osm_mcm_alias_guid_delete 235 * 236 * DESCRIPTION 237 * This function destroys and deallocates an mcm alias guid object. 238 * 239 * SYNOPSIS 240 */ 241 void osm_mcm_alias_guid_delete(IN OUT osm_mcm_alias_guid_t ** pp_mcm_alias_guid); 242 /* 243 * PARAMETERS 244 * pp_mcm_alias_guid 245 * [in][out] Pointer to a pointer to an mcm alias guid object to 246 * delete. On return, this pointer is NULL. 247 * 248 * RETURN VALUE 249 * This function does not return a value. 250 * 251 * NOTES 252 * Performs any necessary cleanup of the specified mcm alias guid object. 253 * 254 * SEE ALSO 255 * MCM Port Object 256 *********/ 257 258 END_C_DECLS 259 #endif /* _OSM_MCM_PORT_H_ */ 260