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 * Implementation 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#if HAVE_CONFIG_H 44# include <config.h> 45#endif /* HAVE_CONFIG_H */ 46 47#include <stdlib.h> 48#include <string.h> 49#include <opensm/osm_file_ids.h> 50#define FILE_ID OSM_FILE_MCM_PORT_C 51#include <opensm/osm_mcm_port.h> 52#include <opensm/osm_multicast.h> 53 54osm_mcm_port_t *osm_mcm_port_new(IN osm_port_t *port, IN osm_mgrp_t *mgrp) 55{ 56 osm_mcm_port_t *p_mcm; 57 58 p_mcm = malloc(sizeof(*p_mcm)); 59 if (p_mcm) { 60 memset(p_mcm, 0, sizeof(*p_mcm)); 61 p_mcm->port = port; 62 p_mcm->mgrp = mgrp; 63 } 64 65 return p_mcm; 66} 67 68void osm_mcm_port_delete(IN osm_mcm_port_t * p_mcm) 69{ 70 CL_ASSERT(p_mcm); 71 72 free(p_mcm); 73} 74 75osm_mcm_alias_guid_t *osm_mcm_alias_guid_new(IN osm_mcm_port_t *p_base_mcm_port, 76 IN ib_member_rec_t *mcmr, 77 IN boolean_t proxy) 78{ 79 osm_mcm_alias_guid_t *p_mcm_alias_guid; 80 81 p_mcm_alias_guid = calloc(1, sizeof(*p_mcm_alias_guid)); 82 if (p_mcm_alias_guid) { 83 p_mcm_alias_guid->alias_guid = mcmr->port_gid.unicast.interface_id; 84 p_mcm_alias_guid->p_base_mcm_port = p_base_mcm_port; 85 p_mcm_alias_guid->port_gid.unicast.prefix = mcmr->port_gid.unicast.prefix; 86 p_mcm_alias_guid->port_gid.unicast.interface_id = mcmr->port_gid.unicast.interface_id; 87 p_mcm_alias_guid->scope_state = mcmr->scope_state; 88 p_mcm_alias_guid->proxy_join = proxy; 89 } 90 91 return p_mcm_alias_guid; 92} 93 94void osm_mcm_alias_guid_delete(IN OUT osm_mcm_alias_guid_t ** pp_mcm_alias_guid) 95{ 96 free(*pp_mcm_alias_guid); 97 *pp_mcm_alias_guid = NULL; 98} 99