|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
|
|
Packit |
13e616 |
* Copyright (c) 2002-2012 Mellanox Technologies LTD. All rights reserved.
|
|
Packit |
13e616 |
* Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* This software is available to you under a choice of one of two
|
|
Packit |
13e616 |
* licenses. You may choose to be licensed under the terms of the GNU
|
|
Packit |
13e616 |
* General Public License (GPL) Version 2, available from the file
|
|
Packit |
13e616 |
* COPYING in the main directory of this source tree, or the
|
|
Packit |
13e616 |
* OpenIB.org BSD license below:
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* Redistribution and use in source and binary forms, with or
|
|
Packit |
13e616 |
* without modification, are permitted provided that the following
|
|
Packit |
13e616 |
* conditions are met:
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* - Redistributions of source code must retain the above
|
|
Packit |
13e616 |
* copyright notice, this list of conditions and the following
|
|
Packit |
13e616 |
* disclaimer.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* - Redistributions in binary form must reproduce the above
|
|
Packit |
13e616 |
* copyright notice, this list of conditions and the following
|
|
Packit |
13e616 |
* disclaimer in the documentation and/or other materials
|
|
Packit |
13e616 |
* provided with the distribution.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
Packit |
13e616 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
Packit |
13e616 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
Packit |
13e616 |
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
Packit |
13e616 |
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
Packit |
13e616 |
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
Packit |
13e616 |
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
Packit |
13e616 |
* SOFTWARE.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/*
|
|
Packit |
13e616 |
* Abstract:
|
|
Packit |
13e616 |
* Declaration of OSM QoS Policy data types and functions.
|
|
Packit |
13e616 |
*
|
|
Packit |
13e616 |
* Author:
|
|
Packit |
13e616 |
* Yevgeny Kliteynik, Mellanox
|
|
Packit |
13e616 |
*/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#ifndef OSM_QOS_POLICY_H
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_H
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#include <iba/ib_types.h>
|
|
Packit |
13e616 |
#include <complib/cl_list.h>
|
|
Packit |
13e616 |
#include <opensm/st.h>
|
|
Packit |
13e616 |
#include <opensm/osm_port.h>
|
|
Packit |
13e616 |
#include <opensm/osm_partition.h>
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#define YYSTYPE char *
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_MAX_PORTS_ON_SWITCH 128
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_DEFAULT_LEVEL_NAME "default"
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_ULP_SDP_SERVICE_ID 0x0000000000010000ULL
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_ULP_RDS_SERVICE_ID 0x0000000001060000ULL
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_ULP_RDS_PORT 0x48CA
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_ULP_ISER_SERVICE_ID 0x0000000001060000ULL
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_ULP_ISER_PORT 0x0CBC
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_NODE_TYPE_CA (((uint8_t)1)<
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_NODE_TYPE_SWITCH (((uint8_t)1)<
|
|
Packit |
13e616 |
#define OSM_QOS_POLICY_NODE_TYPE_ROUTER (((uint8_t)1)<
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/***************************************************/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
typedef struct osm_qos_port {
|
|
Packit |
13e616 |
cl_map_item_t map_item;
|
|
Packit |
13e616 |
osm_physp_t * p_physp;
|
|
Packit |
13e616 |
} osm_qos_port_t;
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
typedef struct osm_qos_port_group {
|
|
Packit |
13e616 |
char *name; /* single string (this port group name) */
|
|
Packit |
13e616 |
char *use; /* single string (description) */
|
|
Packit |
13e616 |
uint8_t node_types; /* node types bitmask */
|
|
Packit |
13e616 |
cl_qmap_t port_map;
|
|
Packit |
13e616 |
} osm_qos_port_group_t;
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/***************************************************/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
typedef struct osm_qos_vlarb_scope {
|
|
Packit |
13e616 |
cl_list_t group_list; /* list of group names (strings) */
|
|
Packit |
13e616 |
cl_list_t across_list; /* list of 'across' group names (strings) */
|
|
Packit |
13e616 |
cl_list_t vlarb_high_list; /* list of num pairs (n:m,...), 32-bit values */
|
|
Packit |
13e616 |
cl_list_t vlarb_low_list; /* list of num pairs (n:m,...), 32-bit values */
|
|
Packit |
13e616 |
uint32_t vl_high_limit; /* single integer */
|
|
Packit |
13e616 |
boolean_t vl_high_limit_set;
|
|
Packit |
13e616 |
} osm_qos_vlarb_scope_t;
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/***************************************************/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
typedef struct osm_qos_sl2vl_scope {
|
|
Packit |
13e616 |
cl_list_t group_list; /* list of strings (port group names) */
|
|
Packit |
13e616 |
boolean_t from[OSM_QOS_POLICY_MAX_PORTS_ON_SWITCH];
|
|
Packit |
13e616 |
boolean_t to[OSM_QOS_POLICY_MAX_PORTS_ON_SWITCH];
|
|
Packit |
13e616 |
cl_list_t across_from_list; /* list of strings (port group names) */
|
|
Packit |
13e616 |
cl_list_t across_to_list; /* list of strings (port group names) */
|
|
Packit |
13e616 |
uint8_t sl2vl_table[16]; /* array of sl2vl values */
|
|
Packit |
13e616 |
boolean_t sl2vl_table_set;
|
|
Packit |
13e616 |
} osm_qos_sl2vl_scope_t;
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/***************************************************/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
typedef struct osm_qos_level {
|
|
Packit |
13e616 |
char *use;
|
|
Packit |
13e616 |
char *name;
|
|
Packit |
13e616 |
uint8_t sl;
|
|
Packit |
13e616 |
boolean_t sl_set;
|
|
Packit |
13e616 |
uint8_t mtu_limit;
|
|
Packit |
13e616 |
boolean_t mtu_limit_set;
|
|
Packit |
13e616 |
uint8_t rate_limit;
|
|
Packit |
13e616 |
boolean_t rate_limit_set;
|
|
Packit |
13e616 |
uint8_t pkt_life;
|
|
Packit |
13e616 |
boolean_t pkt_life_set;
|
|
Packit |
13e616 |
uint64_t **path_bits_range_arr; /* array of bit ranges (real values are 32bits) */
|
|
Packit |
13e616 |
unsigned path_bits_range_len; /* num of bit ranges in the array */
|
|
Packit |
13e616 |
uint64_t **pkey_range_arr; /* array of PKey ranges (real values are 16bits) */
|
|
Packit |
13e616 |
unsigned pkey_range_len;
|
|
Packit |
13e616 |
} osm_qos_level_t;
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/***************************************************/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
typedef struct osm_qos_match_rule {
|
|
Packit |
13e616 |
char *use;
|
|
Packit |
13e616 |
cl_list_t source_list; /* list of strings */
|
|
Packit |
13e616 |
cl_list_t source_group_list; /* list of pointers to relevant port-group */
|
|
Packit |
13e616 |
cl_list_t destination_list; /* list of strings */
|
|
Packit |
13e616 |
cl_list_t destination_group_list; /* list of pointers to relevant port-group */
|
|
Packit |
13e616 |
char *qos_level_name;
|
|
Packit |
13e616 |
osm_qos_level_t *p_qos_level;
|
|
Packit |
13e616 |
uint64_t **service_id_range_arr; /* array of SID ranges (64-bit values) */
|
|
Packit |
13e616 |
unsigned service_id_range_len;
|
|
Packit |
13e616 |
uint64_t **qos_class_range_arr; /* array of QoS Class ranges (real values are 16bits) */
|
|
Packit |
13e616 |
unsigned qos_class_range_len;
|
|
Packit |
13e616 |
uint64_t **pkey_range_arr; /* array of PKey ranges (real values are 16bits) */
|
|
Packit |
13e616 |
unsigned pkey_range_len;
|
|
Packit |
13e616 |
} osm_qos_match_rule_t;
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/***************************************************/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
typedef struct osm_qos_policy {
|
|
Packit |
13e616 |
cl_list_t port_groups; /* list of osm_qos_port_group_t */
|
|
Packit |
13e616 |
cl_list_t sl2vl_tables; /* list of osm_qos_sl2vl_scope_t */
|
|
Packit |
13e616 |
cl_list_t vlarb_tables; /* list of osm_qos_vlarb_scope_t */
|
|
Packit |
13e616 |
cl_list_t qos_levels; /* list of osm_qos_level_t */
|
|
Packit |
13e616 |
cl_list_t qos_match_rules; /* list of osm_qos_match_rule_t */
|
|
Packit |
13e616 |
osm_qos_level_t *p_default_qos_level; /* default QoS level */
|
|
Packit |
13e616 |
osm_subn_t *p_subn; /* osm subnet object */
|
|
Packit |
13e616 |
st_table * p_node_hash; /* node by name hash */
|
|
Packit |
13e616 |
} osm_qos_policy_t;
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/***************************************************/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
osm_qos_port_t *osm_qos_policy_port_create(osm_physp_t * p_physp);
|
|
Packit |
13e616 |
osm_qos_port_group_t * osm_qos_policy_port_group_create();
|
|
Packit |
13e616 |
void osm_qos_policy_port_group_destroy(osm_qos_port_group_t * p_port_group);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
osm_qos_vlarb_scope_t * osm_qos_policy_vlarb_scope_create();
|
|
Packit |
13e616 |
void osm_qos_policy_vlarb_scope_destroy(osm_qos_vlarb_scope_t * p_vlarb_scope);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
osm_qos_sl2vl_scope_t * osm_qos_policy_sl2vl_scope_create();
|
|
Packit |
13e616 |
void osm_qos_policy_sl2vl_scope_destroy(osm_qos_sl2vl_scope_t * p_sl2vl_scope);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
osm_qos_level_t * osm_qos_policy_qos_level_create();
|
|
Packit |
13e616 |
void osm_qos_policy_qos_level_destroy(osm_qos_level_t * p_qos_level);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
boolean_t osm_qos_level_has_pkey(IN const osm_qos_level_t * p_qos_level,
|
|
Packit |
13e616 |
IN ib_net16_t pkey);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
ib_net16_t osm_qos_level_get_shared_pkey(IN const osm_qos_level_t * p_qos_level,
|
|
Packit |
13e616 |
IN const osm_physp_t * p_src_physp,
|
|
Packit |
13e616 |
IN const osm_physp_t * p_dest_physp,
|
|
Packit |
13e616 |
IN const boolean_t allow_both_pkeys);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
osm_qos_match_rule_t * osm_qos_policy_match_rule_create();
|
|
Packit |
13e616 |
void osm_qos_policy_match_rule_destroy(osm_qos_match_rule_t * p_match_rule);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
osm_qos_policy_t * osm_qos_policy_create(osm_subn_t * p_subn);
|
|
Packit |
13e616 |
void osm_qos_policy_destroy(osm_qos_policy_t * p_qos_policy);
|
|
Packit |
13e616 |
int osm_qos_policy_validate(osm_qos_policy_t * p_qos_policy, osm_log_t * p_log);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
osm_qos_level_t * osm_qos_policy_get_qos_level_by_pr(
|
|
Packit |
13e616 |
IN const osm_qos_policy_t * p_qos_policy,
|
|
Packit |
13e616 |
IN const ib_path_rec_t * p_pr,
|
|
Packit |
13e616 |
IN const osm_physp_t * p_src_physp,
|
|
Packit |
13e616 |
IN const osm_physp_t * p_dest_physp,
|
|
Packit |
13e616 |
IN ib_net64_t comp_mask);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
osm_qos_level_t * osm_qos_policy_get_qos_level_by_mpr(
|
|
Packit |
13e616 |
IN const osm_qos_policy_t * p_qos_policy,
|
|
Packit |
13e616 |
IN const ib_multipath_rec_t * p_mpr,
|
|
Packit |
13e616 |
IN const osm_physp_t * p_src_physp,
|
|
Packit |
13e616 |
IN const osm_physp_t * p_dest_physp,
|
|
Packit |
13e616 |
IN ib_net64_t comp_mask);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/***************************************************/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
int osm_qos_parse_policy_file(IN osm_subn_t * p_subn);
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
/***************************************************/
|
|
Packit |
13e616 |
|
|
Packit |
13e616 |
#endif /* ifndef OSM_QOS_POLICY_H */
|