1*d6b92ffaSHans Petter Selasky /* 2*d6b92ffaSHans Petter Selasky * Copyright (c) 2008 Voltaire, Inc. All rights reserved. 3*d6b92ffaSHans Petter Selasky * Copyright (c) 2008,2009 System Fabric Works, Inc. All rights reserved. 4*d6b92ffaSHans Petter Selasky * 5*d6b92ffaSHans Petter Selasky * This software is available to you under a choice of one of two 6*d6b92ffaSHans Petter Selasky * licenses. You may choose to be licensed under the terms of the GNU 7*d6b92ffaSHans Petter Selasky * General Public License (GPL) Version 2, available from the file 8*d6b92ffaSHans Petter Selasky * COPYING in the main directory of this source tree, or the 9*d6b92ffaSHans Petter Selasky * OpenIB.org BSD license below: 10*d6b92ffaSHans Petter Selasky * 11*d6b92ffaSHans Petter Selasky * Redistribution and use in source and binary forms, with or 12*d6b92ffaSHans Petter Selasky * without modification, are permitted provided that the following 13*d6b92ffaSHans Petter Selasky * conditions are met: 14*d6b92ffaSHans Petter Selasky * 15*d6b92ffaSHans Petter Selasky * - Redistributions of source code must retain the above 16*d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 17*d6b92ffaSHans Petter Selasky * disclaimer. 18*d6b92ffaSHans Petter Selasky * 19*d6b92ffaSHans Petter Selasky * - Redistributions in binary form must reproduce the above 20*d6b92ffaSHans Petter Selasky * copyright notice, this list of conditions and the following 21*d6b92ffaSHans Petter Selasky * disclaimer in the documentation and/or other materials 22*d6b92ffaSHans Petter Selasky * provided with the distribution. 23*d6b92ffaSHans Petter Selasky * 24*d6b92ffaSHans Petter Selasky * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 25*d6b92ffaSHans Petter Selasky * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 26*d6b92ffaSHans Petter Selasky * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 27*d6b92ffaSHans Petter Selasky * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 28*d6b92ffaSHans Petter Selasky * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 29*d6b92ffaSHans Petter Selasky * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 30*d6b92ffaSHans Petter Selasky * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 31*d6b92ffaSHans Petter Selasky * SOFTWARE. 32*d6b92ffaSHans Petter Selasky * 33*d6b92ffaSHans Petter Selasky */ 34*d6b92ffaSHans Petter Selasky 35*d6b92ffaSHans Petter Selasky /* 36*d6b92ffaSHans Petter Selasky * Abstract: 37*d6b92ffaSHans Petter Selasky * Declarations for mesh analysis 38*d6b92ffaSHans Petter Selasky */ 39*d6b92ffaSHans Petter Selasky 40*d6b92ffaSHans Petter Selasky #ifndef OSM_MESH_H 41*d6b92ffaSHans Petter Selasky #define OSM_MESH_H 42*d6b92ffaSHans Petter Selasky 43*d6b92ffaSHans Petter Selasky struct _lash; 44*d6b92ffaSHans Petter Selasky struct _switch; 45*d6b92ffaSHans Petter Selasky 46*d6b92ffaSHans Petter Selasky /* 47*d6b92ffaSHans Petter Selasky * per switch to switch link info 48*d6b92ffaSHans Petter Selasky */ 49*d6b92ffaSHans Petter Selasky typedef struct _link { 50*d6b92ffaSHans Petter Selasky int switch_id; 51*d6b92ffaSHans Petter Selasky int link_id; 52*d6b92ffaSHans Petter Selasky int next_port; 53*d6b92ffaSHans Petter Selasky int num_ports; 54*d6b92ffaSHans Petter Selasky int ports[0]; 55*d6b92ffaSHans Petter Selasky } link_t; 56*d6b92ffaSHans Petter Selasky 57*d6b92ffaSHans Petter Selasky /* 58*d6b92ffaSHans Petter Selasky * per switch node mesh info 59*d6b92ffaSHans Petter Selasky */ 60*d6b92ffaSHans Petter Selasky typedef struct _mesh_node { 61*d6b92ffaSHans Petter Selasky int *axes; /* used to hold and reorder assigned axes */ 62*d6b92ffaSHans Petter Selasky int *coord; /* mesh coordinates of switch */ 63*d6b92ffaSHans Petter Selasky int **matrix; /* distances between adjacant switches */ 64*d6b92ffaSHans Petter Selasky int *poly; /* characteristic polynomial of matrix */ 65*d6b92ffaSHans Petter Selasky /* used as an invariant classification */ 66*d6b92ffaSHans Petter Selasky int dimension; /* apparent dimension of mesh around node */ 67*d6b92ffaSHans Petter Selasky int temp; /* temporary holder for distance info */ 68*d6b92ffaSHans Petter Selasky int type; /* index of node type in mesh_info array */ 69*d6b92ffaSHans Petter Selasky unsigned int num_links; /* number of 'links' to adjacent switches */ 70*d6b92ffaSHans Petter Selasky link_t *links[0]; /* per link information */ 71*d6b92ffaSHans Petter Selasky } mesh_node_t; 72*d6b92ffaSHans Petter Selasky 73*d6b92ffaSHans Petter Selasky void osm_mesh_node_delete(struct _lash *p_lash, struct _switch *sw); 74*d6b92ffaSHans Petter Selasky int osm_mesh_node_create(struct _lash *p_lash, struct _switch *sw); 75*d6b92ffaSHans Petter Selasky int osm_do_mesh_analysis(struct _lash *p_lash); 76*d6b92ffaSHans Petter Selasky 77*d6b92ffaSHans Petter Selasky #endif 78