osm_vendor_test.c revision 219820
1251881Speter/* 2251881Speter * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved. 3251881Speter * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved. 4251881Speter * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. 5251881Speter * 6251881Speter * This software is available to you under a choice of one of two 7251881Speter * licenses. You may choose to be licensed under the terms of the GNU 8251881Speter * General Public License (GPL) Version 2, available from the file 9251881Speter * COPYING in the main directory of this source tree, or the 10251881Speter * OpenIB.org BSD license below: 11251881Speter * 12251881Speter * Redistribution and use in source and binary forms, with or 13251881Speter * without modification, are permitted provided that the following 14251881Speter * conditions are met: 15251881Speter * 16251881Speter * - Redistributions of source code must retain the above 17251881Speter * copyright notice, this list of conditions and the following 18251881Speter * disclaimer. 19251881Speter * 20251881Speter * - Redistributions in binary form must reproduce the above 21251881Speter * copyright notice, this list of conditions and the following 22251881Speter * disclaimer in the documentation and/or other materials 23251881Speter * provided with the distribution. 24251881Speter * 25251881Speter * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 26251881Speter * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 27251881Speter * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 28251881Speter * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 29251881Speter * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 30251881Speter * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 31251881Speter * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 32251881Speter * SOFTWARE. 33251881Speter * 34251881Speter */ 35251881Speter 36251881Speter/* 37251881Speter * Abstract: 38251881Speter * Implementation of vendor specific transport interface. 39251881Speter * This is the "Test" vendor which allows compilation and some 40251881Speter * testing without a real vendor interface. 41251881Speter * These objects are part of the opensm family of objects. 42251881Speter * 43251881Speter */ 44251881Speter 45251881Speter#if HAVE_CONFIG_H 46251881Speter# include <config.h> 47251881Speter#endif /* HAVE_CONFIG_H */ 48251881Speter 49251881Speter#ifdef OSM_VENDOR_INTF_TEST 50251881Speter 51251881Speter#include <stdlib.h> 52251881Speter#include <string.h> 53251881Speter#include <opensm/osm_log.h> 54251881Speter#include <vendor/osm_vendor_test.h> 55251881Speter#include <vendor/osm_vendor_api.h> 56251881Speter 57251881Speter/********************************************************************** 58251881Speter **********************************************************************/ 59251881Spetervoid osm_vendor_construct(IN osm_vendor_t * const p_vend) 60251881Speter{ 61251881Speter memset(p_vend, 0, sizeof(*p_vend)); 62251881Speter} 63251881Speter 64251881Speter/********************************************************************** 65251881Speter **********************************************************************/ 66251881Spetervoid osm_vendor_destroy(IN osm_vendor_t * const p_vend) 67251881Speter{ 68251881Speter UNUSED_PARAM(p_vend); 69251881Speter} 70251881Speter 71251881Speter/********************************************************************** 72269847Speter **********************************************************************/ 73251881Spetervoid osm_vendor_delete(IN osm_vendor_t ** const pp_vend) 74251881Speter{ 75251881Speter CL_ASSERT(pp_vend); 76251881Speter 77251881Speter osm_vendor_destroy(*pp_vend); 78251881Speter free(*pp_vend); 79251881Speter *pp_vend = NULL; 80251881Speter} 81251881Speter 82251881Speter/********************************************************************** 83251881Speter **********************************************************************/ 84251881Speterib_api_status_t 85251881Speterosm_vendor_init(IN osm_vendor_t * const p_vend, 86251881Speter IN osm_log_t * const p_log, IN const uint32_t timeout) 87251881Speter{ 88251881Speter OSM_LOG_ENTER(p_log); 89251881Speter 90251881Speter CL_ASSERT(p_vend); 91251881Speter CL_ASSERT(p_log); 92251881Speter 93251881Speter p_vend->p_log = p_log; 94251881Speter p_vend->timeout = timeout; 95251881Speter OSM_LOG_EXIT(p_log); 96251881Speter return (IB_SUCCESS); 97253734Speter} 98251881Speter 99251881Speter/********************************************************************** 100251881Speter **********************************************************************/ 101251881Speterosm_vendor_t *osm_vendor_new(IN osm_log_t * const p_log, 102251881Speter IN const uint32_t timeout) 103251881Speter{ 104251881Speter ib_api_status_t status; 105251881Speter osm_vendor_t *p_vend; 106251881Speter OSM_LOG_ENTER(p_log); 107251881Speter 108251881Speter CL_ASSERT(p_log); 109251881Speter 110253734Speter p_vend = malloc(sizeof(*p_vend)); 111251881Speter if (p_vend != NULL) { 112251881Speter memset(p_vend, 0, sizeof(*p_vend)); 113251881Speter 114251881Speter status = osm_vendor_init(p_vend, p_log, timeout); 115251881Speter if (status != IB_SUCCESS) { 116251881Speter osm_vendor_delete(&p_vend); 117251881Speter } 118251881Speter } 119251881Speter 120251881Speter OSM_LOG_EXIT(p_log); 121251881Speter return (p_vend); 122251881Speter} 123251881Speter 124251881Speter/********************************************************************** 125251881Speter **********************************************************************/ 126251881Speterib_mad_t *osm_vendor_get(IN osm_bind_handle_t h_bind, 127251881Speter IN const uint32_t size, 128251881Speter IN osm_vend_wrap_t * const p_vend_wrap) 129251881Speter{ 130251881Speter osm_vendor_t *p_vend; 131251881Speter ib_mad_t *p_mad; 132251881Speter OSM_LOG_ENTER(h_bind->p_vend->p_log); 133251881Speter 134253734Speter UNUSED_PARAM(p_vend_wrap); 135251881Speter 136251881Speter p_vend = h_bind->p_vend; 137251881Speter 138251881Speter /* 139251881Speter Simply malloc the MAD off the heap. 140251881Speter */ 141251881Speter p_mad = (ib_mad_t *) malloc(size); 142251881Speter 143251881Speter osm_log(p_vend->p_log, OSM_LOG_VERBOSE, 144251881Speter "osm_vendor_get: " "MAD %p.\n", p_mad); 145251881Speter 146251881Speter if (p_mad) 147251881Speter memset(p_mad, 0, size); 148251881Speter 149251881Speter OSM_LOG_EXIT(p_vend->p_log); 150251881Speter return (p_mad); 151251881Speter} 152251881Speter 153251881Speter/********************************************************************** 154251881Speter **********************************************************************/ 155251881Spetervoid 156251881Speterosm_vendor_put(IN osm_bind_handle_t h_bind, 157251881Speter IN osm_vend_wrap_t * const p_vend_wrap, 158251881Speter IN ib_mad_t * const p_mad) 159251881Speter{ 160251881Speter osm_vendor_t *p_vend; 161251881Speter 162251881Speter OSM_LOG_ENTER(h_bind->p_vend->p_log); 163251881Speter 164251881Speter UNUSED_PARAM(p_vend_wrap); 165251881Speter 166251881Speter p_vend = h_bind->p_vend; 167251881Speter 168251881Speter osm_log(p_vend->p_log, OSM_LOG_VERBOSE, 169251881Speter "osm_vendor_put: " "MAD %p.\n", p_mad); 170251881Speter 171251881Speter /* 172251881Speter Return the MAD to the heap. 173251881Speter */ 174251881Speter free(p_mad); 175251881Speter 176251881Speter OSM_LOG_EXIT(p_vend->p_log); 177251881Speter} 178251881Speter 179251881Speter/********************************************************************** 180251881Speter **********************************************************************/ 181251881Speterib_api_status_t 182251881Speterosm_vendor_send(IN osm_bind_handle_t h_bind, 183251881Speter IN osm_vend_wrap_t * const p_vend_wrap, 184251881Speter IN osm_mad_addr_t * const p_mad_addr, 185251881Speter IN ib_mad_t * const p_mad, 186251881Speter IN void *transaction_context, IN boolean_t const resp_expected) 187251881Speter{ 188251881Speter osm_vendor_t *p_vend = h_bind->p_vend; 189251881Speter 190251881Speter OSM_LOG_ENTER(p_vend->p_log); 191251881Speter 192253734Speter UNUSED_PARAM(p_vend_wrap); 193253734Speter UNUSED_PARAM(p_mad_addr); 194253734Speter UNUSED_PARAM(transaction_context); 195253734Speter UNUSED_PARAM(resp_expected); 196253734Speter 197251881Speter osm_log(p_vend->p_log, OSM_LOG_VERBOSE, 198253734Speter "osm_vendor_send: " "MAD %p.\n", p_mad); 199253734Speter 200253734Speter OSM_LOG_EXIT(p_vend->p_log); 201253734Speter return (IB_SUCCESS); 202253734Speter} 203253734Speter 204253734Speter/********************************************************************** 205253734Speter **********************************************************************/ 206253734Speterosm_bind_handle_t 207253734Speterosm_vendor_bind(IN osm_vendor_t * const p_vend, 208253734Speter IN osm_bind_info_t * const p_bind_info, 209253734Speter IN osm_mad_pool_t * const p_mad_pool, 210253734Speter IN osm_vend_mad_recv_callback_t mad_recv_callback, 211253734Speter IN void *context) 212253734Speter{ 213253734Speter osm_bind_handle_t h_bind; 214253734Speter 215253734Speter OSM_LOG_ENTER(p_vend->p_log); 216253734Speter 217253734Speter CL_ASSERT(p_vend); 218253734Speter CL_ASSERT(p_bind_info); 219251881Speter CL_ASSERT(p_mad_pool); 220251881Speter CL_ASSERT(mad_recv_callback); 221251881Speter CL_ASSERT(context); 222251881Speter 223251881Speter UNUSED_PARAM(p_vend); 224251881Speter UNUSED_PARAM(p_mad_pool); 225251881Speter UNUSED_PARAM(mad_recv_callback); 226251881Speter UNUSED_PARAM(context); 227251881Speter 228251881Speter h_bind = (osm_bind_handle_t) malloc(sizeof(*h_bind)); 229251881Speter if (h_bind != NULL) { 230251881Speter memset(h_bind, 0, sizeof(*h_bind)); 231251881Speter h_bind->p_vend = p_vend; 232251881Speter h_bind->port_guid = p_bind_info->port_guid; 233251881Speter h_bind->mad_class = p_bind_info->mad_class; 234251881Speter h_bind->class_version = p_bind_info->class_version; 235251881Speter h_bind->is_responder = p_bind_info->is_responder; 236251881Speter h_bind->is_trap_processor = p_bind_info->is_trap_processor; 237251881Speter h_bind->is_report_processor = p_bind_info->is_report_processor; 238251881Speter h_bind->send_q_size = p_bind_info->send_q_size; 239251881Speter h_bind->recv_q_size = p_bind_info->recv_q_size; 240251881Speter } 241251881Speter 242251881Speter OSM_LOG_EXIT(p_vend->p_log); 243251881Speter return (h_bind); 244251881Speter} 245251881Speter 246251881Speter/********************************************************************** 247251881Speter **********************************************************************/ 248251881Speterib_api_status_t 249251881Speterosm_vendor_get_ports(IN osm_vendor_t * const p_vend, 250251881Speter IN ib_net64_t * const p_guids, 251251881Speter IN uint32_t * const num_guids) 252251881Speter{ 253251881Speter OSM_LOG_ENTER(p_vend->p_log); 254251881Speter 255251881Speter *p_guids = CL_NTOH64(0x0000000000001234); 256251881Speter *num_guids = 1; 257251881Speter 258251881Speter OSM_LOG_EXIT(p_vend->p_log); 259251881Speter return (IB_SUCCESS); 260251881Speter} 261251881Speter 262251881Speter/********************************************************************** 263251881Speter **********************************************************************/ 264251881Speterib_api_status_t osm_vendor_local_lid_change(IN osm_bind_handle_t h_bind) 265251881Speter{ 266251881Speter osm_vendor_t *p_vend = h_bind->p_vend; 267251881Speter 268251881Speter OSM_LOG_ENTER(p_vend->p_log); 269251881Speter 270251881Speter OSM_LOG_EXIT(p_vend->p_log); 271251881Speter 272251881Speter return (IB_SUCCESS); 273251881Speter} 274251881Speter 275251881Speter/********************************************************************** 276251881Speter **********************************************************************/ 277251881Spetervoid osm_vendor_set_debug(IN osm_vendor_t * const p_vend, IN int32_t level) 278251881Speter{ 279251881Speter 280251881Speter} 281251881Speter 282251881Speter#endif /* OSM_VENDOR_INTF_TEST */ 283251881Speter