|
Packit Service |
54dbc3 |
%{
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Copyright (c) 2004-2009 Voltaire, Inc. All rights reserved.
|
|
Packit Service |
54dbc3 |
* Copyright (c) 2002-2008 Mellanox Technologies LTD. All rights reserved.
|
|
Packit Service |
54dbc3 |
* Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
|
|
Packit Service |
54dbc3 |
* Copyright (c) 2008 HNR Consulting. All rights reserved.
|
|
Packit Service |
54dbc3 |
*
|
|
Packit Service |
54dbc3 |
* This software is available to you under a choice of one of two
|
|
Packit Service |
54dbc3 |
* licenses. You may choose to be licensed under the terms of the GNU
|
|
Packit Service |
54dbc3 |
* General Public License (GPL) Version 2, available from the file
|
|
Packit Service |
54dbc3 |
* COPYING in the main directory of this source tree, or the
|
|
Packit Service |
54dbc3 |
* OpenIB.org BSD license below:
|
|
Packit Service |
54dbc3 |
*
|
|
Packit Service |
54dbc3 |
* Redistribution and use in source and binary forms, with or
|
|
Packit Service |
54dbc3 |
* without modification, are permitted provided that the following
|
|
Packit Service |
54dbc3 |
* conditions are met:
|
|
Packit Service |
54dbc3 |
*
|
|
Packit Service |
54dbc3 |
* - Redistributions of source code must retain the above
|
|
Packit Service |
54dbc3 |
* copyright notice, this list of conditions and the following
|
|
Packit Service |
54dbc3 |
* disclaimer.
|
|
Packit Service |
54dbc3 |
*
|
|
Packit Service |
54dbc3 |
* - Redistributions in binary form must reproduce the above
|
|
Packit Service |
54dbc3 |
* copyright notice, this list of conditions and the following
|
|
Packit Service |
54dbc3 |
* disclaimer in the documentation and/or other materials
|
|
Packit Service |
54dbc3 |
* provided with the distribution.
|
|
Packit Service |
54dbc3 |
*
|
|
Packit Service |
54dbc3 |
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
Packit Service |
54dbc3 |
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
Packit Service |
54dbc3 |
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
Packit Service |
54dbc3 |
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
Packit Service |
54dbc3 |
* BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
Packit Service |
54dbc3 |
* ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
Packit Service |
54dbc3 |
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
Packit Service |
54dbc3 |
* SOFTWARE.
|
|
Packit Service |
54dbc3 |
*
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Abstract:
|
|
Packit Service |
54dbc3 |
* Grammar of OSM QoS parser.
|
|
Packit Service |
54dbc3 |
*
|
|
Packit Service |
54dbc3 |
* Environment:
|
|
Packit Service |
54dbc3 |
* Linux User Mode
|
|
Packit Service |
54dbc3 |
*
|
|
Packit Service |
54dbc3 |
* Author:
|
|
Packit Service |
54dbc3 |
* Yevgeny Kliteynik, Mellanox
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
#include <stdio.h>
|
|
Packit Service |
54dbc3 |
#include <assert.h>
|
|
Packit Service |
54dbc3 |
#include <stdarg.h>
|
|
Packit Service |
54dbc3 |
#include <stdlib.h>
|
|
Packit Service |
54dbc3 |
#include <string.h>
|
|
Packit Service |
54dbc3 |
#include <ctype.h>
|
|
Packit Service |
54dbc3 |
#include <errno.h>
|
|
Packit Service |
54dbc3 |
#include <opensm/osm_file_ids.h>
|
|
Packit Service |
54dbc3 |
#define FILE_ID OSM_FILE_QOS_PARSER_Y_Y
|
|
Packit Service |
54dbc3 |
#include <opensm/osm_opensm.h>
|
|
Packit Service |
54dbc3 |
#include <opensm/osm_qos_policy.h>
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
#define OSM_QOS_POLICY_MAX_LINE_LEN 1024*10
|
|
Packit Service |
54dbc3 |
#define OSM_QOS_POLICY_SL2VL_TABLE_LEN IB_MAX_NUM_VLS
|
|
Packit Service |
54dbc3 |
#define OSM_QOS_POLICY_MAX_VL_NUM IB_MAX_NUM_VLS
|
|
Packit Service |
54dbc3 |
#define OSM_QOS_POLICY_MAX_RATE IB_MAX_RATE
|
|
Packit Service |
54dbc3 |
#define OSM_QOS_POLICY_MIN_RATE IB_MIN_RATE
|
|
Packit Service |
54dbc3 |
#define OSM_QOS_POLICY_MAX_MTU IB_MAX_MTU
|
|
Packit Service |
54dbc3 |
#define OSM_QOS_POLICY_MIN_MTU IB_MIN_MTU
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
typedef struct tmp_parser_struct_t_ {
|
|
Packit Service |
54dbc3 |
char str[OSM_QOS_POLICY_MAX_LINE_LEN];
|
|
Packit Service |
54dbc3 |
uint64_t num_pair[2];
|
|
Packit Service |
54dbc3 |
cl_list_t str_list;
|
|
Packit Service |
54dbc3 |
cl_list_t num_list;
|
|
Packit Service |
54dbc3 |
cl_list_t num_pair_list;
|
|
Packit Service |
54dbc3 |
} tmp_parser_struct_t;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_tmp_struct_init();
|
|
Packit Service |
54dbc3 |
static void __parser_tmp_struct_reset();
|
|
Packit Service |
54dbc3 |
static void __parser_tmp_struct_destroy();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static char * __parser_strip_white(char * str);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_str2uint64(uint64_t * p_val, char * str);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_port_group_start();
|
|
Packit Service |
54dbc3 |
static int __parser_port_group_end();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_sl2vl_scope_start();
|
|
Packit Service |
54dbc3 |
static int __parser_sl2vl_scope_end();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_vlarb_scope_start();
|
|
Packit Service |
54dbc3 |
static int __parser_vlarb_scope_end();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_qos_level_start();
|
|
Packit Service |
54dbc3 |
static int __parser_qos_level_end();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_match_rule_start();
|
|
Packit Service |
54dbc3 |
static int __parser_match_rule_end();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_ulp_match_rule_start();
|
|
Packit Service |
54dbc3 |
static int __parser_ulp_match_rule_end();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __pkey_rangelist2rangearr(
|
|
Packit Service |
54dbc3 |
cl_list_t * p_list,
|
|
Packit Service |
54dbc3 |
uint64_t ** * p_arr,
|
|
Packit Service |
54dbc3 |
unsigned * p_arr_len);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __rangelist2rangearr(
|
|
Packit Service |
54dbc3 |
cl_list_t * p_list,
|
|
Packit Service |
54dbc3 |
uint64_t ** * p_arr,
|
|
Packit Service |
54dbc3 |
unsigned * p_arr_len);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __merge_rangearr(
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr_1,
|
|
Packit Service |
54dbc3 |
unsigned range_len_1,
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr_2,
|
|
Packit Service |
54dbc3 |
unsigned range_len_2,
|
|
Packit Service |
54dbc3 |
uint64_t ** * p_arr,
|
|
Packit Service |
54dbc3 |
unsigned * p_arr_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_add_port_to_port_map(
|
|
Packit Service |
54dbc3 |
cl_qmap_t * p_map,
|
|
Packit Service |
54dbc3 |
osm_physp_t * p_physp);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_add_guid_range_to_port_map(
|
|
Packit Service |
54dbc3 |
cl_qmap_t * p_map,
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr,
|
|
Packit Service |
54dbc3 |
unsigned range_len);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_add_pkey_range_to_port_map(
|
|
Packit Service |
54dbc3 |
cl_qmap_t * p_map,
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr,
|
|
Packit Service |
54dbc3 |
unsigned range_len);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_add_partition_list_to_port_map(
|
|
Packit Service |
54dbc3 |
cl_qmap_t * p_map,
|
|
Packit Service |
54dbc3 |
cl_list_t * p_list);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_add_map_to_port_map(
|
|
Packit Service |
54dbc3 |
cl_qmap_t * p_dmap,
|
|
Packit Service |
54dbc3 |
cl_map_t * p_smap);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static int __validate_pkeys(
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr,
|
|
Packit Service |
54dbc3 |
unsigned range_len,
|
|
Packit Service |
54dbc3 |
boolean_t is_ipoib);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __setup_simple_qos_levels();
|
|
Packit Service |
54dbc3 |
static void __clear_simple_qos_levels();
|
|
Packit Service |
54dbc3 |
static void __setup_ulp_match_rules();
|
|
Packit Service |
54dbc3 |
static void __process_ulp_match_rules();
|
|
Packit Service |
54dbc3 |
static void yyerror(const char *format, ...);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
extern char * yytext;
|
|
Packit Service |
54dbc3 |
extern int yylex (void);
|
|
Packit Service |
54dbc3 |
extern FILE * yyin;
|
|
Packit Service |
54dbc3 |
extern int errno;
|
|
Packit Service |
54dbc3 |
extern void yyrestart(FILE *input_file);
|
|
Packit Service |
54dbc3 |
int yyparse();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
#define RESET_BUFFER __parser_tmp_struct_reset()
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
tmp_parser_struct_t tmp_parser_struct;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
int column_num;
|
|
Packit Service |
54dbc3 |
int line_num;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
osm_qos_policy_t * p_qos_policy = NULL;
|
|
Packit Service |
54dbc3 |
osm_qos_port_group_t * p_current_port_group = NULL;
|
|
Packit Service |
54dbc3 |
osm_qos_sl2vl_scope_t * p_current_sl2vl_scope = NULL;
|
|
Packit Service |
54dbc3 |
osm_qos_vlarb_scope_t * p_current_vlarb_scope = NULL;
|
|
Packit Service |
54dbc3 |
osm_qos_level_t * p_current_qos_level = NULL;
|
|
Packit Service |
54dbc3 |
osm_qos_match_rule_t * p_current_qos_match_rule = NULL;
|
|
Packit Service |
54dbc3 |
osm_log_t * p_qos_parser_osm_log;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* 16 Simple QoS Levels - one for each SL */
|
|
Packit Service |
54dbc3 |
static osm_qos_level_t osm_qos_policy_simple_qos_levels[16];
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* Default Simple QoS Level */
|
|
Packit Service |
54dbc3 |
osm_qos_level_t __default_simple_qos_level;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* List of match rules that will be generated by the
|
|
Packit Service |
54dbc3 |
* qos-ulp section. These rules are concatenated to
|
|
Packit Service |
54dbc3 |
* the end of the usual matching rules list at the
|
|
Packit Service |
54dbc3 |
* end of parsing.
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
static cl_list_t __ulp_match_rules;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%token TK_NUMBER
|
|
Packit Service |
54dbc3 |
%token TK_DASH
|
|
Packit Service |
54dbc3 |
%token TK_DOTDOT
|
|
Packit Service |
54dbc3 |
%token TK_COMMA
|
|
Packit Service |
54dbc3 |
%token TK_ASTERISK
|
|
Packit Service |
54dbc3 |
%token TK_TEXT
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%token TK_QOS_ULPS_START
|
|
Packit Service |
54dbc3 |
%token TK_QOS_ULPS_END
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%token TK_PORT_GROUPS_START
|
|
Packit Service |
54dbc3 |
%token TK_PORT_GROUPS_END
|
|
Packit Service |
54dbc3 |
%token TK_PORT_GROUP_START
|
|
Packit Service |
54dbc3 |
%token TK_PORT_GROUP_END
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%token TK_QOS_SETUP_START
|
|
Packit Service |
54dbc3 |
%token TK_QOS_SETUP_END
|
|
Packit Service |
54dbc3 |
%token TK_VLARB_TABLES_START
|
|
Packit Service |
54dbc3 |
%token TK_VLARB_TABLES_END
|
|
Packit Service |
54dbc3 |
%token TK_VLARB_SCOPE_START
|
|
Packit Service |
54dbc3 |
%token TK_VLARB_SCOPE_END
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%token TK_SL2VL_TABLES_START
|
|
Packit Service |
54dbc3 |
%token TK_SL2VL_TABLES_END
|
|
Packit Service |
54dbc3 |
%token TK_SL2VL_SCOPE_START
|
|
Packit Service |
54dbc3 |
%token TK_SL2VL_SCOPE_END
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%token TK_QOS_LEVELS_START
|
|
Packit Service |
54dbc3 |
%token TK_QOS_LEVELS_END
|
|
Packit Service |
54dbc3 |
%token TK_QOS_LEVEL_START
|
|
Packit Service |
54dbc3 |
%token TK_QOS_LEVEL_END
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%token TK_QOS_MATCH_RULES_START
|
|
Packit Service |
54dbc3 |
%token TK_QOS_MATCH_RULES_END
|
|
Packit Service |
54dbc3 |
%token TK_QOS_MATCH_RULE_START
|
|
Packit Service |
54dbc3 |
%token TK_QOS_MATCH_RULE_END
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%token TK_NAME
|
|
Packit Service |
54dbc3 |
%token TK_USE
|
|
Packit Service |
54dbc3 |
%token TK_PORT_GUID
|
|
Packit Service |
54dbc3 |
%token TK_PORT_NAME
|
|
Packit Service |
54dbc3 |
%token TK_PARTITION
|
|
Packit Service |
54dbc3 |
%token TK_NODE_TYPE
|
|
Packit Service |
54dbc3 |
%token TK_GROUP
|
|
Packit Service |
54dbc3 |
%token TK_ACROSS
|
|
Packit Service |
54dbc3 |
%token TK_VLARB_HIGH
|
|
Packit Service |
54dbc3 |
%token TK_VLARB_LOW
|
|
Packit Service |
54dbc3 |
%token TK_VLARB_HIGH_LIMIT
|
|
Packit Service |
54dbc3 |
%token TK_TO
|
|
Packit Service |
54dbc3 |
%token TK_FROM
|
|
Packit Service |
54dbc3 |
%token TK_ACROSS_TO
|
|
Packit Service |
54dbc3 |
%token TK_ACROSS_FROM
|
|
Packit Service |
54dbc3 |
%token TK_SL2VL_TABLE
|
|
Packit Service |
54dbc3 |
%token TK_SL
|
|
Packit Service |
54dbc3 |
%token TK_MTU_LIMIT
|
|
Packit Service |
54dbc3 |
%token TK_RATE_LIMIT
|
|
Packit Service |
54dbc3 |
%token TK_PACKET_LIFE
|
|
Packit Service |
54dbc3 |
%token TK_PATH_BITS
|
|
Packit Service |
54dbc3 |
%token TK_QOS_CLASS
|
|
Packit Service |
54dbc3 |
%token TK_SOURCE
|
|
Packit Service |
54dbc3 |
%token TK_DESTINATION
|
|
Packit Service |
54dbc3 |
%token TK_SERVICE_ID
|
|
Packit Service |
54dbc3 |
%token TK_QOS_LEVEL_NAME
|
|
Packit Service |
54dbc3 |
%token TK_PKEY
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%token TK_NODE_TYPE_ROUTER
|
|
Packit Service |
54dbc3 |
%token TK_NODE_TYPE_CA
|
|
Packit Service |
54dbc3 |
%token TK_NODE_TYPE_SWITCH
|
|
Packit Service |
54dbc3 |
%token TK_NODE_TYPE_SELF
|
|
Packit Service |
54dbc3 |
%token TK_NODE_TYPE_ALL
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%token TK_ULP_DEFAULT
|
|
Packit Service |
54dbc3 |
%token TK_ULP_ANY_SERVICE_ID
|
|
Packit Service |
54dbc3 |
%token TK_ULP_ANY_PKEY
|
|
Packit Service |
54dbc3 |
%token TK_ULP_ANY_TARGET_PORT_GUID
|
|
Packit Service |
54dbc3 |
%token TK_ULP_ANY_SOURCE_PORT_GUID
|
|
Packit Service |
54dbc3 |
%token TK_ULP_ANY_SOURCE_TARGET_PORT_GUID
|
|
Packit Service |
54dbc3 |
%token TK_ULP_SDP_DEFAULT
|
|
Packit Service |
54dbc3 |
%token TK_ULP_SDP_PORT
|
|
Packit Service |
54dbc3 |
%token TK_ULP_RDS_DEFAULT
|
|
Packit Service |
54dbc3 |
%token TK_ULP_RDS_PORT
|
|
Packit Service |
54dbc3 |
%token TK_ULP_ISER_DEFAULT
|
|
Packit Service |
54dbc3 |
%token TK_ULP_ISER_PORT
|
|
Packit Service |
54dbc3 |
%token TK_ULP_SRP_GUID
|
|
Packit Service |
54dbc3 |
%token TK_ULP_IPOIB_DEFAULT
|
|
Packit Service |
54dbc3 |
%token TK_ULP_IPOIB_PKEY
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%start head
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%%
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
head: qos_policy_entries
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_policy_entries: /* empty */
|
|
Packit Service |
54dbc3 |
| qos_policy_entries qos_policy_entry
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_policy_entry: qos_ulps_section
|
|
Packit Service |
54dbc3 |
| port_groups_section
|
|
Packit Service |
54dbc3 |
| qos_setup_section
|
|
Packit Service |
54dbc3 |
| qos_levels_section
|
|
Packit Service |
54dbc3 |
| qos_match_rules_section
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Parsing qos-ulps:
|
|
Packit Service |
54dbc3 |
* -------------------
|
|
Packit Service |
54dbc3 |
* qos-ulps
|
|
Packit Service |
54dbc3 |
* default : 0 #default SL
|
|
Packit Service |
54dbc3 |
* sdp, port-num 30000 : 1 #SL for SDP when destination port is 30000
|
|
Packit Service |
54dbc3 |
* sdp, port-num 10000-20000 : 2
|
|
Packit Service |
54dbc3 |
* sdp : 0 #default SL for SDP
|
|
Packit Service |
54dbc3 |
* srp, target-port-guid 0x1234 : 2
|
|
Packit Service |
54dbc3 |
* rds, port-num 25000 : 2 #SL for RDS when destination port is 25000
|
|
Packit Service |
54dbc3 |
* rds, : 0 #default SL for RDS
|
|
Packit Service |
54dbc3 |
* iser, port-num 900 : 5 #SL for iSER where target port is 900
|
|
Packit Service |
54dbc3 |
* iser : 4 #default SL for iSER
|
|
Packit Service |
54dbc3 |
* ipoib, pkey 0x0001 : 5 #SL for IPoIB on partition with pkey 0x0001
|
|
Packit Service |
54dbc3 |
* ipoib : 6 #default IPoIB partition - pkey=0x7FFF
|
|
Packit Service |
54dbc3 |
* any, service-id 0x6234 : 2
|
|
Packit Service |
54dbc3 |
* any, pkey 0x0ABC : 3
|
|
Packit Service |
54dbc3 |
* any, target-port-guid 0x0ABC-0xFFFFF : 6
|
|
Packit Service |
54dbc3 |
* any, source-port-guid 0x1234 : 7
|
|
Packit Service |
54dbc3 |
* any, source-target-port-guid 0x5678 : 8
|
|
Packit Service |
54dbc3 |
* end-qos-ulps
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulps_section: TK_QOS_ULPS_START qos_ulps TK_QOS_ULPS_END
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulps: qos_ulp
|
|
Packit Service |
54dbc3 |
| qos_ulps qos_ulp
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Parsing port groups:
|
|
Packit Service |
54dbc3 |
* -------------------
|
|
Packit Service |
54dbc3 |
* port-groups
|
|
Packit Service |
54dbc3 |
* port-group
|
|
Packit Service |
54dbc3 |
* name: Storage
|
|
Packit Service |
54dbc3 |
* use: our SRP storage targets
|
|
Packit Service |
54dbc3 |
* port-guid: 0x1000000000000001,0x1000000000000002
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* port-name: vs1 HCA-1/P1
|
|
Packit Service |
54dbc3 |
* port-name: node_description/P2
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* pkey: 0x00FF-0x0FFF
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* partition: Part1
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* node-type: ROUTER,CA,SWITCH,SELF,ALL
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* end-port-group
|
|
Packit Service |
54dbc3 |
* port-group
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* end-port-group
|
|
Packit Service |
54dbc3 |
* end-port-groups
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_groups_section: TK_PORT_GROUPS_START port_groups TK_PORT_GROUPS_END
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_groups: port_group
|
|
Packit Service |
54dbc3 |
| port_groups port_group
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group: port_group_start port_group_entries port_group_end
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_start: TK_PORT_GROUP_START {
|
|
Packit Service |
54dbc3 |
__parser_port_group_start();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_end: TK_PORT_GROUP_END {
|
|
Packit Service |
54dbc3 |
if ( __parser_port_group_end() )
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_entries: /* empty */
|
|
Packit Service |
54dbc3 |
| port_group_entries port_group_entry
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_entry: port_group_name
|
|
Packit Service |
54dbc3 |
| port_group_use
|
|
Packit Service |
54dbc3 |
| port_group_port_guid
|
|
Packit Service |
54dbc3 |
| port_group_port_name
|
|
Packit Service |
54dbc3 |
| port_group_pkey
|
|
Packit Service |
54dbc3 |
| port_group_partition
|
|
Packit Service |
54dbc3 |
| port_group_node_type
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Parsing qos setup:
|
|
Packit Service |
54dbc3 |
* -----------------
|
|
Packit Service |
54dbc3 |
* qos-setup
|
|
Packit Service |
54dbc3 |
* vlarb-tables
|
|
Packit Service |
54dbc3 |
* vlarb-scope
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* end-vlarb-scope
|
|
Packit Service |
54dbc3 |
* vlarb-scope
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* end-vlarb-scope
|
|
Packit Service |
54dbc3 |
* end-vlarb-tables
|
|
Packit Service |
54dbc3 |
* sl2vl-tables
|
|
Packit Service |
54dbc3 |
* sl2vl-scope
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* end-sl2vl-scope
|
|
Packit Service |
54dbc3 |
* sl2vl-scope
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* end-sl2vl-scope
|
|
Packit Service |
54dbc3 |
* end-sl2vl-tables
|
|
Packit Service |
54dbc3 |
* end-qos-setup
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_setup_section: TK_QOS_SETUP_START qos_setup_items TK_QOS_SETUP_END
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_setup_items: /* empty */
|
|
Packit Service |
54dbc3 |
| qos_setup_items vlarb_tables
|
|
Packit Service |
54dbc3 |
| qos_setup_items sl2vl_tables
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* Parsing vlarb-tables */
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_tables: TK_VLARB_TABLES_START vlarb_scope_items TK_VLARB_TABLES_END
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_items: /* empty */
|
|
Packit Service |
54dbc3 |
| vlarb_scope_items vlarb_scope
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope: vlarb_scope_start vlarb_scope_entries vlarb_scope_end
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_start: TK_VLARB_SCOPE_START {
|
|
Packit Service |
54dbc3 |
__parser_vlarb_scope_start();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_end: TK_VLARB_SCOPE_END {
|
|
Packit Service |
54dbc3 |
if ( __parser_vlarb_scope_end() )
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_entries:/* empty */
|
|
Packit Service |
54dbc3 |
| vlarb_scope_entries vlarb_scope_entry
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* vlarb-scope
|
|
Packit Service |
54dbc3 |
* group: Storage
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* across: Storage
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* vlarb-high: 0:255,1:127,2:63,3:31,4:15,5:7,6:3,7:1
|
|
Packit Service |
54dbc3 |
* vlarb-low: 8:255,9:127,10:63,11:31,12:15,13:7,14:3
|
|
Packit Service |
54dbc3 |
* vl-high-limit: 10
|
|
Packit Service |
54dbc3 |
* end-vlarb-scope
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_entry: vlarb_scope_group
|
|
Packit Service |
54dbc3 |
| vlarb_scope_across
|
|
Packit Service |
54dbc3 |
| vlarb_scope_vlarb_high
|
|
Packit Service |
54dbc3 |
| vlarb_scope_vlarb_low
|
|
Packit Service |
54dbc3 |
| vlarb_scope_vlarb_high_limit
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* Parsing sl2vl-tables */
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_tables: TK_SL2VL_TABLES_START sl2vl_scope_items TK_SL2VL_TABLES_END
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_items: /* empty */
|
|
Packit Service |
54dbc3 |
| sl2vl_scope_items sl2vl_scope
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope: sl2vl_scope_start sl2vl_scope_entries sl2vl_scope_end
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_start: TK_SL2VL_SCOPE_START {
|
|
Packit Service |
54dbc3 |
__parser_sl2vl_scope_start();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_end: TK_SL2VL_SCOPE_END {
|
|
Packit Service |
54dbc3 |
if ( __parser_sl2vl_scope_end() )
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_entries:/* empty */
|
|
Packit Service |
54dbc3 |
| sl2vl_scope_entries sl2vl_scope_entry
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* sl2vl-scope
|
|
Packit Service |
54dbc3 |
* group: Part1
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* from: *
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* to: *
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* across-to: Storage2
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* across-from: Storage1
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* sl2vl-table: 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,7
|
|
Packit Service |
54dbc3 |
* end-sl2vl-scope
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_entry: sl2vl_scope_group
|
|
Packit Service |
54dbc3 |
| sl2vl_scope_across
|
|
Packit Service |
54dbc3 |
| sl2vl_scope_across_from
|
|
Packit Service |
54dbc3 |
| sl2vl_scope_across_to
|
|
Packit Service |
54dbc3 |
| sl2vl_scope_from
|
|
Packit Service |
54dbc3 |
| sl2vl_scope_to
|
|
Packit Service |
54dbc3 |
| sl2vl_scope_sl2vl_table
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Parsing qos-levels:
|
|
Packit Service |
54dbc3 |
* ------------------
|
|
Packit Service |
54dbc3 |
* qos-levels
|
|
Packit Service |
54dbc3 |
* qos-level
|
|
Packit Service |
54dbc3 |
* name: qos_level_1
|
|
Packit Service |
54dbc3 |
* use: for the lowest priority communication
|
|
Packit Service |
54dbc3 |
* sl: 15
|
|
Packit Service |
54dbc3 |
* mtu-limit: 1
|
|
Packit Service |
54dbc3 |
* rate-limit: 1
|
|
Packit Service |
54dbc3 |
* packet-life: 12
|
|
Packit Service |
54dbc3 |
* path-bits: 2,4,8-32
|
|
Packit Service |
54dbc3 |
* pkey: 0x00FF-0x0FFF
|
|
Packit Service |
54dbc3 |
* end-qos-level
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* qos-level
|
|
Packit Service |
54dbc3 |
* end-qos-level
|
|
Packit Service |
54dbc3 |
* end-qos-levels
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_levels_section: TK_QOS_LEVELS_START qos_levels TK_QOS_LEVELS_END
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_levels: /* empty */
|
|
Packit Service |
54dbc3 |
| qos_levels qos_level
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level: qos_level_start qos_level_entries qos_level_end
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_start: TK_QOS_LEVEL_START {
|
|
Packit Service |
54dbc3 |
__parser_qos_level_start();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_end: TK_QOS_LEVEL_END {
|
|
Packit Service |
54dbc3 |
if ( __parser_qos_level_end() )
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_entries: /* empty */
|
|
Packit Service |
54dbc3 |
| qos_level_entries qos_level_entry
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_entry: qos_level_name
|
|
Packit Service |
54dbc3 |
| qos_level_use
|
|
Packit Service |
54dbc3 |
| qos_level_sl
|
|
Packit Service |
54dbc3 |
| qos_level_mtu_limit
|
|
Packit Service |
54dbc3 |
| qos_level_rate_limit
|
|
Packit Service |
54dbc3 |
| qos_level_packet_life
|
|
Packit Service |
54dbc3 |
| qos_level_path_bits
|
|
Packit Service |
54dbc3 |
| qos_level_pkey
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Parsing qos-match-rules:
|
|
Packit Service |
54dbc3 |
* -----------------------
|
|
Packit Service |
54dbc3 |
* qos-match-rules
|
|
Packit Service |
54dbc3 |
* qos-match-rule
|
|
Packit Service |
54dbc3 |
* use: low latency by class 7-9 or 11 and bla bla
|
|
Packit Service |
54dbc3 |
* qos-class: 7-9,11
|
|
Packit Service |
54dbc3 |
* qos-level-name: default
|
|
Packit Service |
54dbc3 |
* source: Storage
|
|
Packit Service |
54dbc3 |
* destination: Storage
|
|
Packit Service |
54dbc3 |
* service-id: 22,4719-5000
|
|
Packit Service |
54dbc3 |
* pkey: 0x00FF-0x0FFF
|
|
Packit Service |
54dbc3 |
* end-qos-match-rule
|
|
Packit Service |
54dbc3 |
* qos-match-rule
|
|
Packit Service |
54dbc3 |
* ...
|
|
Packit Service |
54dbc3 |
* end-qos-match-rule
|
|
Packit Service |
54dbc3 |
* end-qos-match-rules
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rules_section: TK_QOS_MATCH_RULES_START qos_match_rules TK_QOS_MATCH_RULES_END
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rules: /* empty */
|
|
Packit Service |
54dbc3 |
| qos_match_rules qos_match_rule
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule: qos_match_rule_start qos_match_rule_entries qos_match_rule_end
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_start: TK_QOS_MATCH_RULE_START {
|
|
Packit Service |
54dbc3 |
__parser_match_rule_start();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_end: TK_QOS_MATCH_RULE_END {
|
|
Packit Service |
54dbc3 |
if ( __parser_match_rule_end() )
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_entries: /* empty */
|
|
Packit Service |
54dbc3 |
| qos_match_rule_entries qos_match_rule_entry
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_entry: qos_match_rule_use
|
|
Packit Service |
54dbc3 |
| qos_match_rule_qos_class
|
|
Packit Service |
54dbc3 |
| qos_match_rule_qos_level_name
|
|
Packit Service |
54dbc3 |
| qos_match_rule_source
|
|
Packit Service |
54dbc3 |
| qos_match_rule_destination
|
|
Packit Service |
54dbc3 |
| qos_match_rule_service_id
|
|
Packit Service |
54dbc3 |
| qos_match_rule_pkey
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Parsing qos-ulps:
|
|
Packit Service |
54dbc3 |
* -----------------
|
|
Packit Service |
54dbc3 |
* default
|
|
Packit Service |
54dbc3 |
* sdp
|
|
Packit Service |
54dbc3 |
* sdp with port-num
|
|
Packit Service |
54dbc3 |
* rds
|
|
Packit Service |
54dbc3 |
* rds with port-num
|
|
Packit Service |
54dbc3 |
* srp with target-port-guid
|
|
Packit Service |
54dbc3 |
* iser
|
|
Packit Service |
54dbc3 |
* iser with port-num
|
|
Packit Service |
54dbc3 |
* ipoib
|
|
Packit Service |
54dbc3 |
* ipoib with pkey
|
|
Packit Service |
54dbc3 |
* any with service-id
|
|
Packit Service |
54dbc3 |
* any with pkey
|
|
Packit Service |
54dbc3 |
* any with target-port-guid
|
|
Packit Service |
54dbc3 |
* any with source-port-guid
|
|
Packit Service |
54dbc3 |
* any with source-target-port-guid
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp: TK_ULP_DEFAULT single_number {
|
|
Packit Service |
54dbc3 |
/* parsing default ulp rule: "default: num" */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * p_tmp_num;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
p_tmp_num = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (*p_tmp_num > 15)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("illegal SL value");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
__default_simple_qos_level.sl = (uint8_t)(*p_tmp_num);
|
|
Packit Service |
54dbc3 |
__default_simple_qos_level.sl_set = TRUE;
|
|
Packit Service |
54dbc3 |
free(p_tmp_num);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_any_service list_of_ranges TK_DOTDOT {
|
|
Packit Service |
54dbc3 |
/* "any, service-id ... : sl" - one instance of list of ranges */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("ULP rule doesn't have service ids");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* get all the service id ranges */
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_len = range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_any_pkey list_of_ranges TK_DOTDOT {
|
|
Packit Service |
54dbc3 |
/* "any, pkey ... : sl" - one instance of list of ranges */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("ULP rule doesn't have pkeys");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* get all the pkey ranges */
|
|
Packit Service |
54dbc3 |
__pkey_rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_len = range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_any_target_port_guid list_of_ranges TK_DOTDOT {
|
|
Packit Service |
54dbc3 |
/* any, target-port-guid ... : sl */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("ULP rule doesn't have port guids");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* create a new port group with these ports */
|
|
Packit Service |
54dbc3 |
__parser_port_group_start();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_port_group->name = strdup("_ULP_Targets_");
|
|
Packit Service |
54dbc3 |
p_current_port_group->use = strdup("Generated from ULP rules");
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_add_guid_range_to_port_map(
|
|
Packit Service |
54dbc3 |
&p_current_port_group->port_map,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* add this port group to the destination
|
|
Packit Service |
54dbc3 |
groups of the current match rule */
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_qos_match_rule->destination_group_list,
|
|
Packit Service |
54dbc3 |
p_current_port_group);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_port_group_end();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_any_source_port_guid list_of_ranges TK_DOTDOT {
|
|
Packit Service |
54dbc3 |
/* any, source-port-guid ... : sl */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("ULP rule doesn't have port guids");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* create a new port group with these ports */
|
|
Packit Service |
54dbc3 |
__parser_port_group_start();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_port_group->name = strdup("_ULP_Sources_");
|
|
Packit Service |
54dbc3 |
p_current_port_group->use = strdup("Generated from ULP rules");
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_add_guid_range_to_port_map(
|
|
Packit Service |
54dbc3 |
&p_current_port_group->port_map,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* add this port group to the source
|
|
Packit Service |
54dbc3 |
groups of the current match rule */
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_qos_match_rule->source_group_list,
|
|
Packit Service |
54dbc3 |
p_current_port_group);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_port_group_end();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_any_source_target_port_guid list_of_ranges TK_DOTDOT {
|
|
Packit Service |
54dbc3 |
/* any, source-target-port-guid ... : sl */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("ULP rule doesn't have port guids");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* create a new port group with these ports */
|
|
Packit Service |
54dbc3 |
__parser_port_group_start();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_port_group->name = strdup("_ULP_Sources_Targets_");
|
|
Packit Service |
54dbc3 |
p_current_port_group->use = strdup("Generated from ULP rules");
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_add_guid_range_to_port_map(
|
|
Packit Service |
54dbc3 |
&p_current_port_group->port_map,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* add this port group to the source and destination
|
|
Packit Service |
54dbc3 |
groups of the current match rule */
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_qos_match_rule->source_group_list,
|
|
Packit Service |
54dbc3 |
p_current_port_group);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_qos_match_rule->destination_group_list,
|
|
Packit Service |
54dbc3 |
p_current_port_group);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_port_group_end();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_sdp_default {
|
|
Packit Service |
54dbc3 |
/* "sdp : sl" - default SL for SDP */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr =
|
|
Packit Service |
54dbc3 |
(uint64_t **)malloc(sizeof(uint64_t *));
|
|
Packit Service |
54dbc3 |
range_arr[0] = (uint64_t *)malloc(2*sizeof(uint64_t));
|
|
Packit Service |
54dbc3 |
range_arr[0][0] = OSM_QOS_POLICY_ULP_SDP_SERVICE_ID;
|
|
Packit Service |
54dbc3 |
range_arr[0][1] = OSM_QOS_POLICY_ULP_SDP_SERVICE_ID + 0xFFFF;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_len = 1;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_sdp_port list_of_ranges TK_DOTDOT {
|
|
Packit Service |
54dbc3 |
/* sdp with port numbers */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
unsigned i;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("SDP ULP rule doesn't have port numbers");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* get all the port ranges */
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
/* now translate these port numbers into service ids */
|
|
Packit Service |
54dbc3 |
for (i = 0; i < range_len; i++)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (range_arr[i][0] > 0xFFFF || range_arr[i][1] > 0xFFFF)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("SDP port number out of range");
|
|
Packit Service |
54dbc3 |
free(range_arr);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
range_arr[i][0] += OSM_QOS_POLICY_ULP_SDP_SERVICE_ID;
|
|
Packit Service |
54dbc3 |
range_arr[i][1] += OSM_QOS_POLICY_ULP_SDP_SERVICE_ID;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_len = range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_rds_default {
|
|
Packit Service |
54dbc3 |
/* "rds : sl" - default SL for RDS */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr =
|
|
Packit Service |
54dbc3 |
(uint64_t **)malloc(sizeof(uint64_t *));
|
|
Packit Service |
54dbc3 |
range_arr[0] = (uint64_t *)malloc(2*sizeof(uint64_t));
|
|
Packit Service |
54dbc3 |
range_arr[0][0] = range_arr[0][1] =
|
|
Packit Service |
54dbc3 |
OSM_QOS_POLICY_ULP_RDS_SERVICE_ID + OSM_QOS_POLICY_ULP_RDS_PORT;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_len = 1;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_rds_port list_of_ranges TK_DOTDOT {
|
|
Packit Service |
54dbc3 |
/* rds with port numbers */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
unsigned i;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("RDS ULP rule doesn't have port numbers");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* get all the port ranges */
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
/* now translate these port numbers into service ids */
|
|
Packit Service |
54dbc3 |
for (i = 0; i < range_len; i++)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (range_arr[i][0] > 0xFFFF || range_arr[i][1] > 0xFFFF)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("SDP port number out of range");
|
|
Packit Service |
54dbc3 |
free(range_arr);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
range_arr[i][0] += OSM_QOS_POLICY_ULP_RDS_SERVICE_ID;
|
|
Packit Service |
54dbc3 |
range_arr[i][1] += OSM_QOS_POLICY_ULP_RDS_SERVICE_ID;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_len = range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_iser_default {
|
|
Packit Service |
54dbc3 |
/* "iSER : sl" - default SL for iSER */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr =
|
|
Packit Service |
54dbc3 |
(uint64_t **)malloc(sizeof(uint64_t *));
|
|
Packit Service |
54dbc3 |
range_arr[0] = (uint64_t *)malloc(2*sizeof(uint64_t));
|
|
Packit Service |
54dbc3 |
range_arr[0][0] = range_arr[0][1] =
|
|
Packit Service |
54dbc3 |
OSM_QOS_POLICY_ULP_ISER_SERVICE_ID + OSM_QOS_POLICY_ULP_ISER_PORT;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_len = 1;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_iser_port list_of_ranges TK_DOTDOT {
|
|
Packit Service |
54dbc3 |
/* iser with port numbers */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
unsigned i;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("iSER ULP rule doesn't have port numbers");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* get all the port ranges */
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
/* now translate these port numbers into service ids */
|
|
Packit Service |
54dbc3 |
for (i = 0; i < range_len; i++)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (range_arr[i][0] > 0xFFFF || range_arr[i][1] > 0xFFFF)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("SDP port number out of range");
|
|
Packit Service |
54dbc3 |
free(range_arr);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
range_arr[i][0] += OSM_QOS_POLICY_ULP_ISER_SERVICE_ID;
|
|
Packit Service |
54dbc3 |
range_arr[i][1] += OSM_QOS_POLICY_ULP_ISER_SERVICE_ID;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_len = range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_srp_guid list_of_ranges TK_DOTDOT {
|
|
Packit Service |
54dbc3 |
/* srp with target guids - this rule is similar
|
|
Packit Service |
54dbc3 |
to writing 'any' ulp with target port guids */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("SRP ULP rule doesn't have port guids");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* create a new port group with these ports */
|
|
Packit Service |
54dbc3 |
__parser_port_group_start();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_port_group->name = strdup("_SRP_Targets_");
|
|
Packit Service |
54dbc3 |
p_current_port_group->use = strdup("Generated from ULP rules");
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_add_guid_range_to_port_map(
|
|
Packit Service |
54dbc3 |
&p_current_port_group->port_map,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* add this port group to the destination
|
|
Packit Service |
54dbc3 |
groups of the current match rule */
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_qos_match_rule->destination_group_list,
|
|
Packit Service |
54dbc3 |
p_current_port_group);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_port_group_end();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_ipoib_default {
|
|
Packit Service |
54dbc3 |
/* ipoib w/o any pkeys (default pkey) */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr =
|
|
Packit Service |
54dbc3 |
(uint64_t **)malloc(sizeof(uint64_t *));
|
|
Packit Service |
54dbc3 |
range_arr[0] = (uint64_t *)malloc(2*sizeof(uint64_t));
|
|
Packit Service |
54dbc3 |
range_arr[0][0] = range_arr[0][1] = 0x7fff;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Although we know that the default partition exists,
|
|
Packit Service |
54dbc3 |
* we still need to validate it by checking that it has
|
|
Packit Service |
54dbc3 |
* at least two full members. Otherwise IPoIB won't work.
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
if (__validate_pkeys(range_arr, 1, TRUE)) {
|
|
Packit Service |
54dbc3 |
free(range_arr[0]);
|
|
Packit Service |
54dbc3 |
free(range_arr);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_len = 1;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
| qos_ulp_type_ipoib_pkey list_of_ranges TK_DOTDOT {
|
|
Packit Service |
54dbc3 |
/* ipoib with pkeys */
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("IPoIB ULP rule doesn't have pkeys");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* get all the pkey ranges */
|
|
Packit Service |
54dbc3 |
__pkey_rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Validate pkeys.
|
|
Packit Service |
54dbc3 |
* For IPoIB pkeys the validation is strict.
|
|
Packit Service |
54dbc3 |
* If some problem would be found, parsing will
|
|
Packit Service |
54dbc3 |
* be aborted with a proper error messages.
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
if (__validate_pkeys(range_arr, range_len, TRUE)) {
|
|
Packit Service |
54dbc3 |
free(range_arr);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_len = range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
} qos_ulp_sl
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_any_service: TK_ULP_ANY_SERVICE_ID
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_any_pkey: TK_ULP_ANY_PKEY
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_any_target_port_guid: TK_ULP_ANY_TARGET_PORT_GUID
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_any_source_port_guid: TK_ULP_ANY_SOURCE_PORT_GUID
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_any_source_target_port_guid: TK_ULP_ANY_SOURCE_TARGET_PORT_GUID
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_sdp_default: TK_ULP_SDP_DEFAULT
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_sdp_port: TK_ULP_SDP_PORT
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_rds_default: TK_ULP_RDS_DEFAULT
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_rds_port: TK_ULP_RDS_PORT
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_iser_default: TK_ULP_ISER_DEFAULT
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_iser_port: TK_ULP_ISER_PORT
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_srp_guid: TK_ULP_SRP_GUID
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_ipoib_default: TK_ULP_IPOIB_DEFAULT
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_type_ipoib_pkey: TK_ULP_IPOIB_PKEY
|
|
Packit Service |
54dbc3 |
{ __parser_ulp_match_rule_start(); };
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_ulp_sl: single_number {
|
|
Packit Service |
54dbc3 |
/* get the SL for ULP rules */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * p_tmp_num;
|
|
Packit Service |
54dbc3 |
uint8_t sl;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
p_tmp_num = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (*p_tmp_num > 15)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("illegal SL value");
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl = (uint8_t)(*p_tmp_num);
|
|
Packit Service |
54dbc3 |
free(p_tmp_num);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->p_qos_level =
|
|
Packit Service |
54dbc3 |
&osm_qos_policy_simple_qos_levels[sl];
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->qos_level_name =
|
|
Packit Service |
54dbc3 |
strdup(osm_qos_policy_simple_qos_levels[sl].name);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (__parser_ulp_match_rule_end())
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* port_group_entry values:
|
|
Packit Service |
54dbc3 |
* port_group_name
|
|
Packit Service |
54dbc3 |
* port_group_use
|
|
Packit Service |
54dbc3 |
* port_group_port_guid
|
|
Packit Service |
54dbc3 |
* port_group_port_name
|
|
Packit Service |
54dbc3 |
* port_group_pkey
|
|
Packit Service |
54dbc3 |
* port_group_partition
|
|
Packit Service |
54dbc3 |
* port_group_node_type
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_name: port_group_name_start single_string {
|
|
Packit Service |
54dbc3 |
/* 'name' of 'port-group' - one instance */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_port_group->name)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("port-group has multiple 'name' tags");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
if ( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
p_current_port_group->name = tmp_str;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_name_start: TK_NAME {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_use: port_group_use_start single_string {
|
|
Packit Service |
54dbc3 |
/* 'use' of 'port-group' - one instance */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_port_group->use)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("port-group has multiple 'use' tags");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
if ( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
p_current_port_group->use = tmp_str;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_use_start: TK_USE {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_port_name: port_group_port_name_start string_list {
|
|
Packit Service |
54dbc3 |
/* 'port-name' in 'port-group' - any num of instances */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
osm_node_t * p_node;
|
|
Packit Service |
54dbc3 |
osm_physp_t * p_physp;
|
|
Packit Service |
54dbc3 |
unsigned port_num;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
char * port_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* parsing port name strings */
|
|
Packit Service |
54dbc3 |
for (list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
list_iterator != cl_list_end(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
/* last slash in port name string is a separator
|
|
Packit Service |
54dbc3 |
between node name and port number */
|
|
Packit Service |
54dbc3 |
port_str = strrchr(tmp_str, '/');
|
|
Packit Service |
54dbc3 |
if (!port_str || (strlen(port_str) < 3) ||
|
|
Packit Service |
54dbc3 |
(port_str[1] != 'p' && port_str[1] != 'P')) {
|
|
Packit Service |
54dbc3 |
yyerror("'%s' - illegal port name",
|
|
Packit Service |
54dbc3 |
tmp_str);
|
|
Packit Service |
54dbc3 |
free(tmp_str);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!(port_num = strtoul(&port_str[2],NULL,0))) {
|
|
Packit Service |
54dbc3 |
yyerror(
|
|
Packit Service |
54dbc3 |
"'%s' - illegal port number in port name",
|
|
Packit Service |
54dbc3 |
tmp_str);
|
|
Packit Service |
54dbc3 |
free(tmp_str);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* separate node name from port number */
|
|
Packit Service |
54dbc3 |
port_str[0] = '\0';
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (st_lookup(p_qos_policy->p_node_hash,
|
|
Packit Service |
54dbc3 |
(st_data_t)tmp_str,
|
|
Packit Service |
54dbc3 |
(void *)&p_node))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
/* we found the node, now get the right port */
|
|
Packit Service |
54dbc3 |
p_physp = osm_node_get_physp_ptr(p_node, port_num);
|
|
Packit Service |
54dbc3 |
if (!p_physp) {
|
|
Packit Service |
54dbc3 |
yyerror(
|
|
Packit Service |
54dbc3 |
"'%s' - port number out of range in port name",
|
|
Packit Service |
54dbc3 |
tmp_str);
|
|
Packit Service |
54dbc3 |
free(tmp_str);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
/* we found the port, now add it to guid table */
|
|
Packit Service |
54dbc3 |
__parser_add_port_to_port_map(&p_current_port_group->port_map,
|
|
Packit Service |
54dbc3 |
p_physp);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
free(tmp_str);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_port_name_start: TK_PORT_NAME {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_port_guid: port_group_port_guid_start list_of_ranges {
|
|
Packit Service |
54dbc3 |
/* 'port-guid' in 'port-group' - any num of instances */
|
|
Packit Service |
54dbc3 |
/* list of guid ranges */
|
|
Packit Service |
54dbc3 |
if (cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_add_guid_range_to_port_map(
|
|
Packit Service |
54dbc3 |
&p_current_port_group->port_map,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_port_guid_start: TK_PORT_GUID {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_pkey: port_group_pkey_start list_of_ranges {
|
|
Packit Service |
54dbc3 |
/* 'pkey' in 'port-group' - any num of instances */
|
|
Packit Service |
54dbc3 |
/* list of pkey ranges */
|
|
Packit Service |
54dbc3 |
if (cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__pkey_rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_add_pkey_range_to_port_map(
|
|
Packit Service |
54dbc3 |
&p_current_port_group->port_map,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_pkey_start: TK_PKEY {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_partition: port_group_partition_start string_list {
|
|
Packit Service |
54dbc3 |
/* 'partition' in 'port-group' - any num of instances */
|
|
Packit Service |
54dbc3 |
__parser_add_partition_list_to_port_map(
|
|
Packit Service |
54dbc3 |
&p_current_port_group->port_map,
|
|
Packit Service |
54dbc3 |
&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_partition_start: TK_PARTITION {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_node_type: port_group_node_type_start port_group_node_type_list {
|
|
Packit Service |
54dbc3 |
/* 'node-type' in 'port-group' - any num of instances */
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_node_type_start: TK_NODE_TYPE {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
port_group_node_type_list: node_type_item
|
|
Packit Service |
54dbc3 |
| port_group_node_type_list TK_COMMA node_type_item
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
node_type_item: node_type_ca
|
|
Packit Service |
54dbc3 |
| node_type_switch
|
|
Packit Service |
54dbc3 |
| node_type_router
|
|
Packit Service |
54dbc3 |
| node_type_all
|
|
Packit Service |
54dbc3 |
| node_type_self
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
node_type_ca: TK_NODE_TYPE_CA {
|
|
Packit Service |
54dbc3 |
p_current_port_group->node_types |=
|
|
Packit Service |
54dbc3 |
OSM_QOS_POLICY_NODE_TYPE_CA;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
node_type_switch: TK_NODE_TYPE_SWITCH {
|
|
Packit Service |
54dbc3 |
p_current_port_group->node_types |=
|
|
Packit Service |
54dbc3 |
OSM_QOS_POLICY_NODE_TYPE_SWITCH;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
node_type_router: TK_NODE_TYPE_ROUTER {
|
|
Packit Service |
54dbc3 |
p_current_port_group->node_types |=
|
|
Packit Service |
54dbc3 |
OSM_QOS_POLICY_NODE_TYPE_ROUTER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
node_type_all: TK_NODE_TYPE_ALL {
|
|
Packit Service |
54dbc3 |
p_current_port_group->node_types |=
|
|
Packit Service |
54dbc3 |
(OSM_QOS_POLICY_NODE_TYPE_CA |
|
|
Packit Service |
54dbc3 |
OSM_QOS_POLICY_NODE_TYPE_SWITCH |
|
|
Packit Service |
54dbc3 |
OSM_QOS_POLICY_NODE_TYPE_ROUTER);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
node_type_self: TK_NODE_TYPE_SELF {
|
|
Packit Service |
54dbc3 |
osm_port_t * p_osm_port =
|
|
Packit Service |
54dbc3 |
osm_get_port_by_guid(p_qos_policy->p_subn,
|
|
Packit Service |
54dbc3 |
p_qos_policy->p_subn->sm_port_guid);
|
|
Packit Service |
54dbc3 |
if (p_osm_port)
|
|
Packit Service |
54dbc3 |
__parser_add_port_to_port_map(
|
|
Packit Service |
54dbc3 |
&p_current_port_group->port_map,
|
|
Packit Service |
54dbc3 |
p_osm_port->p_physp);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* vlarb_scope_entry values:
|
|
Packit Service |
54dbc3 |
* vlarb_scope_group
|
|
Packit Service |
54dbc3 |
* vlarb_scope_across
|
|
Packit Service |
54dbc3 |
* vlarb_scope_vlarb_high
|
|
Packit Service |
54dbc3 |
* vlarb_scope_vlarb_low
|
|
Packit Service |
54dbc3 |
* vlarb_scope_vlarb_high_limit
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_group: vlarb_scope_group_start string_list {
|
|
Packit Service |
54dbc3 |
/* 'group' in 'vlarb-scope' - any num of instances */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_vlarb_scope->group_list,tmp_str);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_group_start: TK_GROUP {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_across: vlarb_scope_across_start string_list {
|
|
Packit Service |
54dbc3 |
/* 'across' in 'vlarb-scope' - any num of instances */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_vlarb_scope->across_list,tmp_str);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_across_start: TK_ACROSS {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_vlarb_high_limit: vlarb_scope_vlarb_high_limit_start single_number {
|
|
Packit Service |
54dbc3 |
/* 'vl-high-limit' in 'vlarb-scope' - one instance of one number */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * p_tmp_num;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
p_tmp_num = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (p_tmp_num)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_vlarb_scope->vl_high_limit = (uint32_t)(*p_tmp_num);
|
|
Packit Service |
54dbc3 |
p_current_vlarb_scope->vl_high_limit_set = TRUE;
|
|
Packit Service |
54dbc3 |
free(p_tmp_num);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_vlarb_high_limit_start: TK_VLARB_HIGH_LIMIT {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_vlarb_high: vlarb_scope_vlarb_high_start num_list_with_dotdot {
|
|
Packit Service |
54dbc3 |
/* 'vlarb-high' in 'vlarb-scope' - list of pairs of numbers with ':' and ',' */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * num_pair;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.num_pair_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
num_pair = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (num_pair)
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_vlarb_scope->vlarb_high_list,num_pair);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_vlarb_high_start: TK_VLARB_HIGH {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_vlarb_low: vlarb_scope_vlarb_low_start num_list_with_dotdot {
|
|
Packit Service |
54dbc3 |
/* 'vlarb-low' in 'vlarb-scope' - list of pairs of numbers with ':' and ',' */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * num_pair;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.num_pair_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
num_pair = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (num_pair)
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_vlarb_scope->vlarb_low_list,num_pair);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
vlarb_scope_vlarb_low_start: TK_VLARB_LOW {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* sl2vl_scope_entry values:
|
|
Packit Service |
54dbc3 |
* sl2vl_scope_group
|
|
Packit Service |
54dbc3 |
* sl2vl_scope_across
|
|
Packit Service |
54dbc3 |
* sl2vl_scope_across_from
|
|
Packit Service |
54dbc3 |
* sl2vl_scope_across_to
|
|
Packit Service |
54dbc3 |
* sl2vl_scope_from
|
|
Packit Service |
54dbc3 |
* sl2vl_scope_to
|
|
Packit Service |
54dbc3 |
* sl2vl_scope_sl2vl_table
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_group: sl2vl_scope_group_start string_list {
|
|
Packit Service |
54dbc3 |
/* 'group' in 'sl2vl-scope' - any num of instances */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_sl2vl_scope->group_list,tmp_str);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_group_start: TK_GROUP {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_across: sl2vl_scope_across_start string_list {
|
|
Packit Service |
54dbc3 |
/* 'across' in 'sl2vl-scope' - any num of instances */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str) {
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_sl2vl_scope->across_from_list,tmp_str);
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_sl2vl_scope->across_to_list,strdup(tmp_str));
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_across_start: TK_ACROSS {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_across_from: sl2vl_scope_across_from_start string_list {
|
|
Packit Service |
54dbc3 |
/* 'across-from' in 'sl2vl-scope' - any num of instances */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_sl2vl_scope->across_from_list,tmp_str);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_across_from_start: TK_ACROSS_FROM {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_across_to: sl2vl_scope_across_to_start string_list {
|
|
Packit Service |
54dbc3 |
/* 'across-to' in 'sl2vl-scope' - any num of instances */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str) {
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_sl2vl_scope->across_to_list,tmp_str);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_across_to_start: TK_ACROSS_TO {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_from: sl2vl_scope_from_start sl2vl_scope_from_list_or_asterisk {
|
|
Packit Service |
54dbc3 |
/* 'from' in 'sl2vl-scope' - any num of instances */
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_from_start: TK_FROM {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_to: sl2vl_scope_to_start sl2vl_scope_to_list_or_asterisk {
|
|
Packit Service |
54dbc3 |
/* 'to' in 'sl2vl-scope' - any num of instances */
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_to_start: TK_TO {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_from_list_or_asterisk: sl2vl_scope_from_asterisk
|
|
Packit Service |
54dbc3 |
| sl2vl_scope_from_list_of_ranges
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_from_asterisk: TK_ASTERISK {
|
|
Packit Service |
54dbc3 |
int i;
|
|
Packit Service |
54dbc3 |
for (i = 0; i < OSM_QOS_POLICY_MAX_PORTS_ON_SWITCH; i++)
|
|
Packit Service |
54dbc3 |
p_current_sl2vl_scope->from[i] = TRUE;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_to_list_or_asterisk: sl2vl_scope_to_asterisk
|
|
Packit Service |
54dbc3 |
| sl2vl_scope_to_list_of_ranges
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_to_asterisk: TK_ASTERISK {
|
|
Packit Service |
54dbc3 |
int i;
|
|
Packit Service |
54dbc3 |
for (i = 0; i < OSM_QOS_POLICY_MAX_PORTS_ON_SWITCH; i++)
|
|
Packit Service |
54dbc3 |
p_current_sl2vl_scope->to[i] = TRUE;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_from_list_of_ranges: list_of_ranges {
|
|
Packit Service |
54dbc3 |
int i;
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * num_pair;
|
|
Packit Service |
54dbc3 |
uint8_t num1, num2;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.num_pair_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
num_pair = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (num_pair)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if ( num_pair[1] >= OSM_QOS_POLICY_MAX_PORTS_ON_SWITCH )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("port number out of range 'from' list");
|
|
Packit Service |
54dbc3 |
free(num_pair);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
num1 = (uint8_t)num_pair[0];
|
|
Packit Service |
54dbc3 |
num2 = (uint8_t)num_pair[1];
|
|
Packit Service |
54dbc3 |
free(num_pair);
|
|
Packit Service |
54dbc3 |
for (i = num1; i <= num2; i++)
|
|
Packit Service |
54dbc3 |
p_current_sl2vl_scope->from[i] = TRUE;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_to_list_of_ranges: list_of_ranges {
|
|
Packit Service |
54dbc3 |
int i;
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * num_pair;
|
|
Packit Service |
54dbc3 |
uint8_t num1, num2;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.num_pair_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
num_pair = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (num_pair)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if ( num_pair[1] >= OSM_QOS_POLICY_MAX_PORTS_ON_SWITCH )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("port number out of range 'to' list");
|
|
Packit Service |
54dbc3 |
free(num_pair);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
num1 = (uint8_t)num_pair[0];
|
|
Packit Service |
54dbc3 |
num2 = (uint8_t)num_pair[1];
|
|
Packit Service |
54dbc3 |
free(num_pair);
|
|
Packit Service |
54dbc3 |
for (i = num1; i <= num2; i++)
|
|
Packit Service |
54dbc3 |
p_current_sl2vl_scope->to[i] = TRUE;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_sl2vl_table: sl2vl_scope_sl2vl_table_start num_list {
|
|
Packit Service |
54dbc3 |
/* 'sl2vl-table' - one instance of exactly
|
|
Packit Service |
54dbc3 |
OSM_QOS_POLICY_SL2VL_TABLE_LEN numbers */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t num;
|
|
Packit Service |
54dbc3 |
uint64_t * p_num;
|
|
Packit Service |
54dbc3 |
int i = 0;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_sl2vl_scope->sl2vl_table_set)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("sl2vl-scope has more than one sl2vl-table");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (cl_list_count(&tmp_parser_struct.num_list) != OSM_QOS_POLICY_SL2VL_TABLE_LEN)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("wrong number of values in 'sl2vl-table' (should be 16)");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.num_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_num = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
num = *p_num;
|
|
Packit Service |
54dbc3 |
free(p_num);
|
|
Packit Service |
54dbc3 |
if (num >= OSM_QOS_POLICY_MAX_VL_NUM)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("wrong VL value in 'sl2vl-table' (should be 0 to 15)");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_current_sl2vl_scope->sl2vl_table[i++] = (uint8_t)num;
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
p_current_sl2vl_scope->sl2vl_table_set = TRUE;
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
sl2vl_scope_sl2vl_table_start: TK_SL2VL_TABLE {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* qos_level_entry values:
|
|
Packit Service |
54dbc3 |
* qos_level_name
|
|
Packit Service |
54dbc3 |
* qos_level_use
|
|
Packit Service |
54dbc3 |
* qos_level_sl
|
|
Packit Service |
54dbc3 |
* qos_level_mtu_limit
|
|
Packit Service |
54dbc3 |
* qos_level_rate_limit
|
|
Packit Service |
54dbc3 |
* qos_level_packet_life
|
|
Packit Service |
54dbc3 |
* qos_level_path_bits
|
|
Packit Service |
54dbc3 |
* qos_level_pkey
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_name: qos_level_name_start single_string {
|
|
Packit Service |
54dbc3 |
/* 'name' of 'qos-level' - one instance */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_qos_level->name)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("qos-level has multiple 'name' tags");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
if ( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
p_current_qos_level->name = tmp_str;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_name_start: TK_NAME {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_use: qos_level_use_start single_string {
|
|
Packit Service |
54dbc3 |
/* 'use' of 'qos-level' - one instance */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_qos_level->use)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("qos-level has multiple 'use' tags");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
if ( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
p_current_qos_level->use = tmp_str;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_use_start: TK_USE {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_sl: qos_level_sl_start single_number {
|
|
Packit Service |
54dbc3 |
/* 'sl' in 'qos-level' - one instance */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * p_num;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_qos_level->sl_set)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("'qos-level' has multiple 'sl' tags");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
p_num = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
p_current_qos_level->sl = (uint8_t)(*p_num);
|
|
Packit Service |
54dbc3 |
free(p_num);
|
|
Packit Service |
54dbc3 |
p_current_qos_level->sl_set = TRUE;
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_sl_start: TK_SL {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_mtu_limit: qos_level_mtu_limit_start single_number {
|
|
Packit Service |
54dbc3 |
/* 'mtu-limit' in 'qos-level' - one instance */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * p_num;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_qos_level->mtu_limit_set)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("'qos-level' has multiple 'mtu-limit' tags");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
p_num = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (*p_num > OSM_QOS_POLICY_MAX_MTU || *p_num < OSM_QOS_POLICY_MIN_MTU)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("mtu limit is out of range, value: %d", *p_num);
|
|
Packit Service |
54dbc3 |
free(p_num);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
p_current_qos_level->mtu_limit = (uint8_t)(*p_num);
|
|
Packit Service |
54dbc3 |
free(p_num);
|
|
Packit Service |
54dbc3 |
p_current_qos_level->mtu_limit_set = TRUE;
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_mtu_limit_start: TK_MTU_LIMIT {
|
|
Packit Service |
54dbc3 |
/* 'mtu-limit' in 'qos-level' - one instance */
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_rate_limit: qos_level_rate_limit_start single_number {
|
|
Packit Service |
54dbc3 |
/* 'rate-limit' in 'qos-level' - one instance */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * p_num;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_qos_level->rate_limit_set)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("'qos-level' has multiple 'rate-limit' tags");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
p_num = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (*p_num > OSM_QOS_POLICY_MAX_RATE || *p_num < OSM_QOS_POLICY_MIN_RATE)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("rate limit is out of range, value: %d", *p_num);
|
|
Packit Service |
54dbc3 |
free(p_num);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
p_current_qos_level->rate_limit = (uint8_t)(*p_num);
|
|
Packit Service |
54dbc3 |
free(p_num);
|
|
Packit Service |
54dbc3 |
p_current_qos_level->rate_limit_set = TRUE;
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_rate_limit_start: TK_RATE_LIMIT {
|
|
Packit Service |
54dbc3 |
/* 'rate-limit' in 'qos-level' - one instance */
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_packet_life: qos_level_packet_life_start single_number {
|
|
Packit Service |
54dbc3 |
/* 'packet-life' in 'qos-level' - one instance */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
uint64_t * p_num;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_qos_level->pkt_life_set)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("'qos-level' has multiple 'packet-life' tags");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
p_num = (uint64_t*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
p_current_qos_level->pkt_life = (uint8_t)(*p_num);
|
|
Packit Service |
54dbc3 |
free(p_num);
|
|
Packit Service |
54dbc3 |
p_current_qos_level->pkt_life_set= TRUE;
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_packet_life_start: TK_PACKET_LIFE {
|
|
Packit Service |
54dbc3 |
/* 'packet-life' in 'qos-level' - one instance */
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_path_bits: qos_level_path_bits_start list_of_ranges {
|
|
Packit Service |
54dbc3 |
/* 'path-bits' in 'qos-level' - any num of instances */
|
|
Packit Service |
54dbc3 |
/* list of path bit ranges */
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if ( !p_current_qos_level->path_bits_range_len )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_qos_level->path_bits_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_level->path_bits_range_len = range_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** new_range_arr;
|
|
Packit Service |
54dbc3 |
unsigned new_range_len;
|
|
Packit Service |
54dbc3 |
__merge_rangearr( p_current_qos_level->path_bits_range_arr,
|
|
Packit Service |
54dbc3 |
p_current_qos_level->path_bits_range_len,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len,
|
|
Packit Service |
54dbc3 |
&new_range_arr,
|
|
Packit Service |
54dbc3 |
&new_range_len );
|
|
Packit Service |
54dbc3 |
p_current_qos_level->path_bits_range_arr = new_range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_level->path_bits_range_len = new_range_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_path_bits_start: TK_PATH_BITS {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_pkey: qos_level_pkey_start list_of_ranges {
|
|
Packit Service |
54dbc3 |
/* 'pkey' in 'qos-level' - num of instances of list of ranges */
|
|
Packit Service |
54dbc3 |
if (cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__pkey_rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if ( !p_current_qos_level->pkey_range_len )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_qos_level->pkey_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_level->pkey_range_len = range_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** new_range_arr;
|
|
Packit Service |
54dbc3 |
unsigned new_range_len;
|
|
Packit Service |
54dbc3 |
__merge_rangearr( p_current_qos_level->pkey_range_arr,
|
|
Packit Service |
54dbc3 |
p_current_qos_level->pkey_range_len,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len,
|
|
Packit Service |
54dbc3 |
&new_range_arr,
|
|
Packit Service |
54dbc3 |
&new_range_len );
|
|
Packit Service |
54dbc3 |
p_current_qos_level->pkey_range_arr = new_range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_level->pkey_range_len = new_range_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_level_pkey_start: TK_PKEY {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* qos_match_rule_entry values:
|
|
Packit Service |
54dbc3 |
* qos_match_rule_use
|
|
Packit Service |
54dbc3 |
* qos_match_rule_qos_class
|
|
Packit Service |
54dbc3 |
* qos_match_rule_qos_level_name
|
|
Packit Service |
54dbc3 |
* qos_match_rule_source
|
|
Packit Service |
54dbc3 |
* qos_match_rule_destination
|
|
Packit Service |
54dbc3 |
* qos_match_rule_service_id
|
|
Packit Service |
54dbc3 |
* qos_match_rule_pkey
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_use: qos_match_rule_use_start single_string {
|
|
Packit Service |
54dbc3 |
/* 'use' of 'qos-match-rule' - one instance */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_qos_match_rule->use)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("'qos-match-rule' has multiple 'use' tags");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
if ( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->use = tmp_str;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_use_start: TK_USE {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_qos_class: qos_match_rule_qos_class_start list_of_ranges {
|
|
Packit Service |
54dbc3 |
/* 'qos-class' in 'qos-match-rule' - num of instances of list of ranges */
|
|
Packit Service |
54dbc3 |
/* list of class ranges (QoS Class is 12-bit value) */
|
|
Packit Service |
54dbc3 |
if (cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if ( !p_current_qos_match_rule->qos_class_range_len )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->qos_class_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->qos_class_range_len = range_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** new_range_arr;
|
|
Packit Service |
54dbc3 |
unsigned new_range_len;
|
|
Packit Service |
54dbc3 |
__merge_rangearr( p_current_qos_match_rule->qos_class_range_arr,
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->qos_class_range_len,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len,
|
|
Packit Service |
54dbc3 |
&new_range_arr,
|
|
Packit Service |
54dbc3 |
&new_range_len );
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->qos_class_range_arr = new_range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->qos_class_range_len = new_range_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_qos_class_start: TK_QOS_CLASS {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_source: qos_match_rule_source_start string_list {
|
|
Packit Service |
54dbc3 |
/* 'source' in 'qos-match-rule' - text */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_qos_match_rule->source_list,tmp_str);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_source_start: TK_SOURCE {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_destination: qos_match_rule_destination_start string_list {
|
|
Packit Service |
54dbc3 |
/* 'destination' in 'qos-match-rule' - text */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_current_qos_match_rule->destination_list,tmp_str);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_destination_start: TK_DESTINATION {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_qos_level_name: qos_match_rule_qos_level_name_start single_string {
|
|
Packit Service |
54dbc3 |
/* 'qos-level-name' in 'qos-match-rule' - single string */
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_current_qos_match_rule->qos_level_name)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("qos-match-rule has multiple 'qos-level-name' tags");
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
if ( list_iterator != cl_list_end(&tmp_parser_struct.str_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str)
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->qos_level_name = tmp_str;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_qos_level_name_start: TK_QOS_LEVEL_NAME {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_service_id: qos_match_rule_service_id_start list_of_ranges {
|
|
Packit Service |
54dbc3 |
/* 'service-id' in 'qos-match-rule' - num of instances of list of ranges */
|
|
Packit Service |
54dbc3 |
if (cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if ( !p_current_qos_match_rule->service_id_range_len )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_len = range_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** new_range_arr;
|
|
Packit Service |
54dbc3 |
unsigned new_range_len;
|
|
Packit Service |
54dbc3 |
__merge_rangearr( p_current_qos_match_rule->service_id_range_arr,
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_len,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len,
|
|
Packit Service |
54dbc3 |
&new_range_arr,
|
|
Packit Service |
54dbc3 |
&new_range_len );
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_arr = new_range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->service_id_range_len = new_range_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_service_id_start: TK_SERVICE_ID {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_pkey: qos_match_rule_pkey_start list_of_ranges {
|
|
Packit Service |
54dbc3 |
/* 'pkey' in 'qos-match-rule' - num of instances of list of ranges */
|
|
Packit Service |
54dbc3 |
if (cl_list_count(&tmp_parser_struct.num_pair_list))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr;
|
|
Packit Service |
54dbc3 |
unsigned range_len;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__pkey_rangelist2rangearr( &tmp_parser_struct.num_pair_list,
|
|
Packit Service |
54dbc3 |
&range_arr,
|
|
Packit Service |
54dbc3 |
&range_len );
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if ( !p_current_qos_match_rule->pkey_range_len )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_arr = range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_len = range_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t ** new_range_arr;
|
|
Packit Service |
54dbc3 |
unsigned new_range_len;
|
|
Packit Service |
54dbc3 |
__merge_rangearr( p_current_qos_match_rule->pkey_range_arr,
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_len,
|
|
Packit Service |
54dbc3 |
range_arr,
|
|
Packit Service |
54dbc3 |
range_len,
|
|
Packit Service |
54dbc3 |
&new_range_arr,
|
|
Packit Service |
54dbc3 |
&new_range_len );
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_arr = new_range_arr;
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule->pkey_range_len = new_range_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qos_match_rule_pkey_start: TK_PKEY {
|
|
Packit Service |
54dbc3 |
RESET_BUFFER;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Common part
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
single_string: single_string_elems {
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&tmp_parser_struct.str_list,
|
|
Packit Service |
54dbc3 |
strdup(__parser_strip_white(tmp_parser_struct.str)));
|
|
Packit Service |
54dbc3 |
tmp_parser_struct.str[0] = '\0';
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
single_string_elems: single_string_element
|
|
Packit Service |
54dbc3 |
| single_string_elems single_string_element
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
single_string_element: TK_TEXT {
|
|
Packit Service |
54dbc3 |
strcat(tmp_parser_struct.str,$1);
|
|
Packit Service |
54dbc3 |
free($1);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
string_list: single_string
|
|
Packit Service |
54dbc3 |
| string_list TK_COMMA single_string
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
single_number: number
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
num_list: number
|
|
Packit Service |
54dbc3 |
| num_list TK_COMMA number
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
number: TK_NUMBER {
|
|
Packit Service |
54dbc3 |
uint64_t * p_num = (uint64_t*)malloc(sizeof(uint64_t));
|
|
Packit Service |
54dbc3 |
__parser_str2uint64(p_num,$1);
|
|
Packit Service |
54dbc3 |
free($1);
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&tmp_parser_struct.num_list, p_num);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
num_list_with_dotdot: number_from_pair_1 TK_DOTDOT number_from_pair_2 {
|
|
Packit Service |
54dbc3 |
uint64_t * num_pair = (uint64_t*)malloc(sizeof(uint64_t)*2);
|
|
Packit Service |
54dbc3 |
num_pair[0] = tmp_parser_struct.num_pair[0];
|
|
Packit Service |
54dbc3 |
num_pair[1] = tmp_parser_struct.num_pair[1];
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&tmp_parser_struct.num_pair_list, num_pair);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
| num_list_with_dotdot TK_COMMA number_from_pair_1 TK_DOTDOT number_from_pair_2 {
|
|
Packit Service |
54dbc3 |
uint64_t * num_pair = (uint64_t*)malloc(sizeof(uint64_t)*2);
|
|
Packit Service |
54dbc3 |
num_pair[0] = tmp_parser_struct.num_pair[0];
|
|
Packit Service |
54dbc3 |
num_pair[1] = tmp_parser_struct.num_pair[1];
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&tmp_parser_struct.num_pair_list, num_pair);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
number_from_pair_1: TK_NUMBER {
|
|
Packit Service |
54dbc3 |
__parser_str2uint64(&tmp_parser_struct.num_pair[0],$1);
|
|
Packit Service |
54dbc3 |
free($1);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
number_from_pair_2: TK_NUMBER {
|
|
Packit Service |
54dbc3 |
__parser_str2uint64(&tmp_parser_struct.num_pair[1],$1);
|
|
Packit Service |
54dbc3 |
free($1);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_of_ranges: num_list_with_dash
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
num_list_with_dash: single_number_from_range {
|
|
Packit Service |
54dbc3 |
uint64_t * num_pair = (uint64_t*)malloc(sizeof(uint64_t)*2);
|
|
Packit Service |
54dbc3 |
num_pair[0] = tmp_parser_struct.num_pair[0];
|
|
Packit Service |
54dbc3 |
num_pair[1] = tmp_parser_struct.num_pair[1];
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&tmp_parser_struct.num_pair_list, num_pair);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
| number_from_range_1 TK_DASH number_from_range_2 {
|
|
Packit Service |
54dbc3 |
uint64_t * num_pair = (uint64_t*)malloc(sizeof(uint64_t)*2);
|
|
Packit Service |
54dbc3 |
if (tmp_parser_struct.num_pair[0] <= tmp_parser_struct.num_pair[1]) {
|
|
Packit Service |
54dbc3 |
num_pair[0] = tmp_parser_struct.num_pair[0];
|
|
Packit Service |
54dbc3 |
num_pair[1] = tmp_parser_struct.num_pair[1];
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else {
|
|
Packit Service |
54dbc3 |
num_pair[1] = tmp_parser_struct.num_pair[0];
|
|
Packit Service |
54dbc3 |
num_pair[0] = tmp_parser_struct.num_pair[1];
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&tmp_parser_struct.num_pair_list, num_pair);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
| num_list_with_dash TK_COMMA number_from_range_1 TK_DASH number_from_range_2 {
|
|
Packit Service |
54dbc3 |
uint64_t * num_pair = (uint64_t*)malloc(sizeof(uint64_t)*2);
|
|
Packit Service |
54dbc3 |
if (tmp_parser_struct.num_pair[0] <= tmp_parser_struct.num_pair[1]) {
|
|
Packit Service |
54dbc3 |
num_pair[0] = tmp_parser_struct.num_pair[0];
|
|
Packit Service |
54dbc3 |
num_pair[1] = tmp_parser_struct.num_pair[1];
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else {
|
|
Packit Service |
54dbc3 |
num_pair[1] = tmp_parser_struct.num_pair[0];
|
|
Packit Service |
54dbc3 |
num_pair[0] = tmp_parser_struct.num_pair[1];
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&tmp_parser_struct.num_pair_list, num_pair);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
| num_list_with_dash TK_COMMA single_number_from_range {
|
|
Packit Service |
54dbc3 |
uint64_t * num_pair = (uint64_t*)malloc(sizeof(uint64_t)*2);
|
|
Packit Service |
54dbc3 |
num_pair[0] = tmp_parser_struct.num_pair[0];
|
|
Packit Service |
54dbc3 |
num_pair[1] = tmp_parser_struct.num_pair[1];
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&tmp_parser_struct.num_pair_list, num_pair);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
single_number_from_range: TK_NUMBER {
|
|
Packit Service |
54dbc3 |
__parser_str2uint64(&tmp_parser_struct.num_pair[0],$1);
|
|
Packit Service |
54dbc3 |
__parser_str2uint64(&tmp_parser_struct.num_pair[1],$1);
|
|
Packit Service |
54dbc3 |
free($1);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
number_from_range_1: TK_NUMBER {
|
|
Packit Service |
54dbc3 |
__parser_str2uint64(&tmp_parser_struct.num_pair[0],$1);
|
|
Packit Service |
54dbc3 |
free($1);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
number_from_range_2: TK_NUMBER {
|
|
Packit Service |
54dbc3 |
__parser_str2uint64(&tmp_parser_struct.num_pair[1],$1);
|
|
Packit Service |
54dbc3 |
free($1);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
%%
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
int osm_qos_parse_policy_file(IN osm_subn_t * p_subn)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
int res = 0;
|
|
Packit Service |
54dbc3 |
static boolean_t first_time = TRUE;
|
|
Packit Service |
54dbc3 |
p_qos_parser_osm_log = &p_subn->p_osm->log;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
OSM_LOG_ENTER(p_qos_parser_osm_log);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
osm_qos_policy_destroy(p_subn->p_qos_policy);
|
|
Packit Service |
54dbc3 |
p_subn->p_qos_policy = NULL;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!p_subn->opt.qos_policy_file) {
|
|
Packit Service |
54dbc3 |
OSM_LOG(p_qos_parser_osm_log, OSM_LOG_ERROR, "ERR AC06: "
|
|
Packit Service |
54dbc3 |
"QoS policy file name is empty\n");
|
|
Packit Service |
54dbc3 |
res = 1;
|
|
Packit Service |
54dbc3 |
goto Exit;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
yyin = fopen (p_subn->opt.qos_policy_file, "r");
|
|
Packit Service |
54dbc3 |
if (!yyin)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (strcmp(p_subn->opt.qos_policy_file,OSM_DEFAULT_QOS_POLICY_FILE)) {
|
|
Packit Service |
54dbc3 |
OSM_LOG(p_qos_parser_osm_log, OSM_LOG_ERROR, "ERR AC01: "
|
|
Packit Service |
54dbc3 |
"Failed opening QoS policy file %s - %s\n",
|
|
Packit Service |
54dbc3 |
p_subn->opt.qos_policy_file, strerror(errno));
|
|
Packit Service |
54dbc3 |
res = 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else
|
|
Packit Service |
54dbc3 |
OSM_LOG(p_qos_parser_osm_log, OSM_LOG_VERBOSE,
|
|
Packit Service |
54dbc3 |
"QoS policy file not found (%s)\n",
|
|
Packit Service |
54dbc3 |
p_subn->opt.qos_policy_file);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
goto Exit;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (first_time)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
first_time = FALSE;
|
|
Packit Service |
54dbc3 |
__setup_simple_qos_levels();
|
|
Packit Service |
54dbc3 |
__setup_ulp_match_rules();
|
|
Packit Service |
54dbc3 |
OSM_LOG(p_qos_parser_osm_log, OSM_LOG_INFO,
|
|
Packit Service |
54dbc3 |
"Loading QoS policy file (%s)\n",
|
|
Packit Service |
54dbc3 |
p_subn->opt.qos_policy_file);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* ULP match rules list was emptied at the end of
|
|
Packit Service |
54dbc3 |
* previous parsing iteration.
|
|
Packit Service |
54dbc3 |
* What's left is to clear simple QoS levels.
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
__clear_simple_qos_levels();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
column_num = 1;
|
|
Packit Service |
54dbc3 |
line_num = 1;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
p_subn->p_qos_policy = osm_qos_policy_create(p_subn);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_tmp_struct_init();
|
|
Packit Service |
54dbc3 |
p_qos_policy = p_subn->p_qos_policy;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
res = yyparse();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__parser_tmp_struct_destroy();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (res != 0)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
OSM_LOG(p_qos_parser_osm_log, OSM_LOG_ERROR, "ERR AC03: "
|
|
Packit Service |
54dbc3 |
"Failed parsing QoS policy file (%s)\n",
|
|
Packit Service |
54dbc3 |
p_subn->opt.qos_policy_file);
|
|
Packit Service |
54dbc3 |
osm_qos_policy_destroy(p_subn->p_qos_policy);
|
|
Packit Service |
54dbc3 |
p_subn->p_qos_policy = NULL;
|
|
Packit Service |
54dbc3 |
res = 1;
|
|
Packit Service |
54dbc3 |
goto Exit;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* add generated ULP match rules to the usual match rules */
|
|
Packit Service |
54dbc3 |
__process_ulp_match_rules();
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (osm_qos_policy_validate(p_subn->p_qos_policy,p_qos_parser_osm_log))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
OSM_LOG(p_qos_parser_osm_log, OSM_LOG_ERROR, "ERR AC04: "
|
|
Packit Service |
54dbc3 |
"Error(s) in QoS policy file (%s)\n",
|
|
Packit Service |
54dbc3 |
p_subn->opt.qos_policy_file);
|
|
Packit Service |
54dbc3 |
fprintf(stderr, "Error(s) in QoS policy file (%s)\n",
|
|
Packit Service |
54dbc3 |
p_subn->opt.qos_policy_file);
|
|
Packit Service |
54dbc3 |
osm_qos_policy_destroy(p_subn->p_qos_policy);
|
|
Packit Service |
54dbc3 |
p_subn->p_qos_policy = NULL;
|
|
Packit Service |
54dbc3 |
res = 1;
|
|
Packit Service |
54dbc3 |
goto Exit;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
Exit:
|
|
Packit Service |
54dbc3 |
if (yyin)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyrestart(yyin);
|
|
Packit Service |
54dbc3 |
fclose(yyin);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
OSM_LOG_EXIT(p_qos_parser_osm_log);
|
|
Packit Service |
54dbc3 |
return res;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
int yywrap()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
return(1);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void yyerror(const char *format, ...)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
char s[256];
|
|
Packit Service |
54dbc3 |
va_list pvar;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
OSM_LOG_ENTER(p_qos_parser_osm_log);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
va_start(pvar, format);
|
|
Packit Service |
54dbc3 |
vsnprintf(s, sizeof(s), format, pvar);
|
|
Packit Service |
54dbc3 |
va_end(pvar);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
OSM_LOG(p_qos_parser_osm_log, OSM_LOG_ERROR, "ERR AC05: "
|
|
Packit Service |
54dbc3 |
"Syntax error (line %d:%d): %s\n",
|
|
Packit Service |
54dbc3 |
line_num, column_num, s);
|
|
Packit Service |
54dbc3 |
fprintf(stderr, "Error in QoS Policy File (line %d:%d): %s.\n",
|
|
Packit Service |
54dbc3 |
line_num, column_num, s);
|
|
Packit Service |
54dbc3 |
OSM_LOG_EXIT(p_qos_parser_osm_log);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static char * __parser_strip_white(char * str)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
char *p;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
while (isspace(*str))
|
|
Packit Service |
54dbc3 |
str++;
|
|
Packit Service |
54dbc3 |
if (!*str)
|
|
Packit Service |
54dbc3 |
return str;
|
|
Packit Service |
54dbc3 |
p = str + strlen(str) - 1;
|
|
Packit Service |
54dbc3 |
while (isspace(*p))
|
|
Packit Service |
54dbc3 |
*p-- = '\0';
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
return str;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_str2uint64(uint64_t * p_val, char * str)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
*p_val = strtoull(str, NULL, 0);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_port_group_start()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_port_group = osm_qos_policy_port_group_create();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static int __parser_port_group_end()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if(!p_current_port_group->name)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("port-group validation failed - no port group name specified");
|
|
Packit Service |
54dbc3 |
return -1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_qos_policy->port_groups,
|
|
Packit Service |
54dbc3 |
p_current_port_group);
|
|
Packit Service |
54dbc3 |
p_current_port_group = NULL;
|
|
Packit Service |
54dbc3 |
return 0;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_vlarb_scope_start()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_vlarb_scope = osm_qos_policy_vlarb_scope_create();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static int __parser_vlarb_scope_end()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if ( !cl_list_count(&p_current_vlarb_scope->group_list) &&
|
|
Packit Service |
54dbc3 |
!cl_list_count(&p_current_vlarb_scope->across_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("vlarb-scope validation failed - no port groups specified by 'group' or by 'across'");
|
|
Packit Service |
54dbc3 |
return -1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_qos_policy->vlarb_tables,
|
|
Packit Service |
54dbc3 |
p_current_vlarb_scope);
|
|
Packit Service |
54dbc3 |
p_current_vlarb_scope = NULL;
|
|
Packit Service |
54dbc3 |
return 0;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_sl2vl_scope_start()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_sl2vl_scope = osm_qos_policy_sl2vl_scope_create();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static int __parser_sl2vl_scope_end()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (!p_current_sl2vl_scope->sl2vl_table_set)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("sl2vl-scope validation failed - no sl2vl table specified");
|
|
Packit Service |
54dbc3 |
return -1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
if ( !cl_list_count(&p_current_sl2vl_scope->group_list) &&
|
|
Packit Service |
54dbc3 |
!cl_list_count(&p_current_sl2vl_scope->across_to_list) &&
|
|
Packit Service |
54dbc3 |
!cl_list_count(&p_current_sl2vl_scope->across_from_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("sl2vl-scope validation failed - no port groups specified by 'group', 'across-to' or 'across-from'");
|
|
Packit Service |
54dbc3 |
return -1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_qos_policy->sl2vl_tables,
|
|
Packit Service |
54dbc3 |
p_current_sl2vl_scope);
|
|
Packit Service |
54dbc3 |
p_current_sl2vl_scope = NULL;
|
|
Packit Service |
54dbc3 |
return 0;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_qos_level_start()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_qos_level = osm_qos_policy_qos_level_create();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static int __parser_qos_level_end()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (!p_current_qos_level->sl_set)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("qos-level validation failed - no 'sl' specified");
|
|
Packit Service |
54dbc3 |
return -1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
if (!p_current_qos_level->name)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("qos-level validation failed - no 'name' specified");
|
|
Packit Service |
54dbc3 |
return -1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_qos_policy->qos_levels,
|
|
Packit Service |
54dbc3 |
p_current_qos_level);
|
|
Packit Service |
54dbc3 |
p_current_qos_level = NULL;
|
|
Packit Service |
54dbc3 |
return 0;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_match_rule_start()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule = osm_qos_policy_match_rule_create();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static int __parser_match_rule_end()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (!p_current_qos_match_rule->qos_level_name)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
yyerror("match-rule validation failed - no 'qos-level-name' specified");
|
|
Packit Service |
54dbc3 |
return -1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_qos_policy->qos_match_rules,
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule);
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule = NULL;
|
|
Packit Service |
54dbc3 |
return 0;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_ulp_match_rule_start()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule = osm_qos_policy_match_rule_create();
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static int __parser_ulp_match_rule_end()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
CL_ASSERT(p_current_qos_match_rule->p_qos_level);
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&__ulp_match_rules,
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule);
|
|
Packit Service |
54dbc3 |
p_current_qos_match_rule = NULL;
|
|
Packit Service |
54dbc3 |
return 0;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_tmp_struct_init()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_parser_struct.str[0] = '\0';
|
|
Packit Service |
54dbc3 |
cl_list_construct(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
cl_list_init(&tmp_parser_struct.str_list, 10);
|
|
Packit Service |
54dbc3 |
cl_list_construct(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
cl_list_init(&tmp_parser_struct.num_list, 10);
|
|
Packit Service |
54dbc3 |
cl_list_construct(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
cl_list_init(&tmp_parser_struct.num_pair_list, 10);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Do NOT free objects from the temp struct.
|
|
Packit Service |
54dbc3 |
* Either they are inserted into the parse tree data
|
|
Packit Service |
54dbc3 |
* structure, or they are already freed when copying
|
|
Packit Service |
54dbc3 |
* their values to the parse tree data structure.
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
static void __parser_tmp_struct_reset()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_parser_struct.str[0] = '\0';
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_tmp_struct_destroy()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
__parser_tmp_struct_reset();
|
|
Packit Service |
54dbc3 |
cl_list_destroy(&tmp_parser_struct.str_list);
|
|
Packit Service |
54dbc3 |
cl_list_destroy(&tmp_parser_struct.num_list);
|
|
Packit Service |
54dbc3 |
cl_list_destroy(&tmp_parser_struct.num_pair_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
#define __SIMPLE_QOS_LEVEL_NAME "SimpleQoSLevel_SL"
|
|
Packit Service |
54dbc3 |
#define __SIMPLE_QOS_LEVEL_DEFAULT_NAME "SimpleQoSLevel_DEFAULT"
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __setup_simple_qos_levels()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint8_t i;
|
|
Packit Service |
54dbc3 |
char tmp_buf[30];
|
|
Packit Service |
54dbc3 |
memset(osm_qos_policy_simple_qos_levels, 0,
|
|
Packit Service |
54dbc3 |
sizeof(osm_qos_policy_simple_qos_levels));
|
|
Packit Service |
54dbc3 |
for (i = 0; i < 16; i++)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
osm_qos_policy_simple_qos_levels[i].sl = i;
|
|
Packit Service |
54dbc3 |
osm_qos_policy_simple_qos_levels[i].sl_set = TRUE;
|
|
Packit Service |
54dbc3 |
sprintf(tmp_buf, "%s%u", __SIMPLE_QOS_LEVEL_NAME, i);
|
|
Packit Service |
54dbc3 |
osm_qos_policy_simple_qos_levels[i].name = strdup(tmp_buf);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
memset(&__default_simple_qos_level, 0,
|
|
Packit Service |
54dbc3 |
sizeof(__default_simple_qos_level));
|
|
Packit Service |
54dbc3 |
__default_simple_qos_level.name =
|
|
Packit Service |
54dbc3 |
strdup(__SIMPLE_QOS_LEVEL_DEFAULT_NAME);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __clear_simple_qos_levels()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Simple QoS levels are static.
|
|
Packit Service |
54dbc3 |
* What's left is to invalidate default simple QoS level.
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
__default_simple_qos_level.sl_set = FALSE;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __setup_ulp_match_rules()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
cl_list_construct(&__ulp_match_rules);
|
|
Packit Service |
54dbc3 |
cl_list_init(&__ulp_match_rules, 10);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __process_ulp_match_rules()
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
osm_qos_match_rule_t *p_qos_match_rule = NULL;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(&__ulp_match_rules);
|
|
Packit Service |
54dbc3 |
while (list_iterator != cl_list_end(&__ulp_match_rules))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_qos_match_rule = (osm_qos_match_rule_t *) cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (p_qos_match_rule)
|
|
Packit Service |
54dbc3 |
cl_list_insert_tail(&p_qos_policy->qos_match_rules,
|
|
Packit Service |
54dbc3 |
p_qos_match_rule);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(&__ulp_match_rules);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static int __cmp_num_range(const void * p1, const void * p2)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t * pair1 = *((uint64_t **)p1);
|
|
Packit Service |
54dbc3 |
uint64_t * pair2 = *((uint64_t **)p2);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (pair1[0] < pair2[0])
|
|
Packit Service |
54dbc3 |
return -1;
|
|
Packit Service |
54dbc3 |
if (pair1[0] > pair2[0])
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (pair1[1] < pair2[1])
|
|
Packit Service |
54dbc3 |
return -1;
|
|
Packit Service |
54dbc3 |
if (pair1[1] > pair2[1])
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
return 0;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __sort_reduce_rangearr(
|
|
Packit Service |
54dbc3 |
uint64_t ** arr,
|
|
Packit Service |
54dbc3 |
unsigned arr_len,
|
|
Packit Service |
54dbc3 |
uint64_t ** * p_res_arr,
|
|
Packit Service |
54dbc3 |
unsigned * p_res_arr_len )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
unsigned i = 0;
|
|
Packit Service |
54dbc3 |
unsigned j = 0;
|
|
Packit Service |
54dbc3 |
unsigned last_valid_ind = 0;
|
|
Packit Service |
54dbc3 |
unsigned valid_cnt = 0;
|
|
Packit Service |
54dbc3 |
uint64_t ** res_arr;
|
|
Packit Service |
54dbc3 |
boolean_t * is_valid_arr;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
*p_res_arr = NULL;
|
|
Packit Service |
54dbc3 |
*p_res_arr_len = 0;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
qsort(arr, arr_len, sizeof(uint64_t*), __cmp_num_range);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
is_valid_arr = (boolean_t *)malloc(arr_len * sizeof(boolean_t));
|
|
Packit Service |
54dbc3 |
is_valid_arr[last_valid_ind] = TRUE;
|
|
Packit Service |
54dbc3 |
valid_cnt++;
|
|
Packit Service |
54dbc3 |
for (i = 1; i < arr_len; i++)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (arr[i][0] <= arr[last_valid_ind][1])
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (arr[i][1] > arr[last_valid_ind][1])
|
|
Packit Service |
54dbc3 |
arr[last_valid_ind][1] = arr[i][1];
|
|
Packit Service |
54dbc3 |
free(arr[i]);
|
|
Packit Service |
54dbc3 |
arr[i] = NULL;
|
|
Packit Service |
54dbc3 |
is_valid_arr[i] = FALSE;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else if ((arr[i][0] - 1) == arr[last_valid_ind][1])
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
arr[last_valid_ind][1] = arr[i][1];
|
|
Packit Service |
54dbc3 |
free(arr[i]);
|
|
Packit Service |
54dbc3 |
arr[i] = NULL;
|
|
Packit Service |
54dbc3 |
is_valid_arr[i] = FALSE;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
is_valid_arr[i] = TRUE;
|
|
Packit Service |
54dbc3 |
last_valid_ind = i;
|
|
Packit Service |
54dbc3 |
valid_cnt++;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
res_arr = (uint64_t **)malloc(valid_cnt * sizeof(uint64_t *));
|
|
Packit Service |
54dbc3 |
for (i = 0; i < arr_len; i++)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (is_valid_arr[i])
|
|
Packit Service |
54dbc3 |
res_arr[j++] = arr[i];
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
free(is_valid_arr);
|
|
Packit Service |
54dbc3 |
free(arr);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
*p_res_arr = res_arr;
|
|
Packit Service |
54dbc3 |
*p_res_arr_len = valid_cnt;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __pkey_rangelist2rangearr(
|
|
Packit Service |
54dbc3 |
cl_list_t * p_list,
|
|
Packit Service |
54dbc3 |
uint64_t ** * p_arr,
|
|
Packit Service |
54dbc3 |
unsigned * p_arr_len)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
uint64_t tmp_pkey;
|
|
Packit Service |
54dbc3 |
uint64_t * p_pkeys;
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator= cl_list_head(p_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(p_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
p_pkeys = (uint64_t *)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
p_pkeys[0] &= 0x7fff;
|
|
Packit Service |
54dbc3 |
p_pkeys[1] &= 0x7fff;
|
|
Packit Service |
54dbc3 |
if (p_pkeys[0] > p_pkeys[1])
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_pkey = p_pkeys[1];
|
|
Packit Service |
54dbc3 |
p_pkeys[1] = p_pkeys[0];
|
|
Packit Service |
54dbc3 |
p_pkeys[0] = tmp_pkey;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__rangelist2rangearr(p_list, p_arr, p_arr_len);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __rangelist2rangearr(
|
|
Packit Service |
54dbc3 |
cl_list_t * p_list,
|
|
Packit Service |
54dbc3 |
uint64_t ** * p_arr,
|
|
Packit Service |
54dbc3 |
unsigned * p_arr_len)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
unsigned len = cl_list_count(p_list);
|
|
Packit Service |
54dbc3 |
unsigned i = 0;
|
|
Packit Service |
54dbc3 |
uint64_t ** tmp_arr;
|
|
Packit Service |
54dbc3 |
uint64_t ** res_arr = NULL;
|
|
Packit Service |
54dbc3 |
unsigned res_arr_len = 0;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
tmp_arr = (uint64_t **)malloc(len * sizeof(uint64_t *));
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(p_list);
|
|
Packit Service |
54dbc3 |
while( list_iterator != cl_list_end(p_list) )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
tmp_arr[i++] = (uint64_t *)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(p_list);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__sort_reduce_rangearr( tmp_arr,
|
|
Packit Service |
54dbc3 |
len,
|
|
Packit Service |
54dbc3 |
&res_arr,
|
|
Packit Service |
54dbc3 |
&res_arr_len );
|
|
Packit Service |
54dbc3 |
*p_arr = res_arr;
|
|
Packit Service |
54dbc3 |
*p_arr_len = res_arr_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __merge_rangearr(
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr_1,
|
|
Packit Service |
54dbc3 |
unsigned range_len_1,
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr_2,
|
|
Packit Service |
54dbc3 |
unsigned range_len_2,
|
|
Packit Service |
54dbc3 |
uint64_t ** * p_arr,
|
|
Packit Service |
54dbc3 |
unsigned * p_arr_len )
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
unsigned i = 0;
|
|
Packit Service |
54dbc3 |
unsigned j = 0;
|
|
Packit Service |
54dbc3 |
unsigned len = range_len_1 + range_len_2;
|
|
Packit Service |
54dbc3 |
uint64_t ** tmp_arr;
|
|
Packit Service |
54dbc3 |
uint64_t ** res_arr = NULL;
|
|
Packit Service |
54dbc3 |
unsigned res_arr_len = 0;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
*p_arr = NULL;
|
|
Packit Service |
54dbc3 |
*p_arr_len = 0;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
tmp_arr = (uint64_t **)malloc(len * sizeof(uint64_t *));
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
for (i = 0; i < range_len_1; i++)
|
|
Packit Service |
54dbc3 |
tmp_arr[j++] = range_arr_1[i];
|
|
Packit Service |
54dbc3 |
for (i = 0; i < range_len_2; i++)
|
|
Packit Service |
54dbc3 |
tmp_arr[j++] = range_arr_2[i];
|
|
Packit Service |
54dbc3 |
free(range_arr_1);
|
|
Packit Service |
54dbc3 |
free(range_arr_2);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
__sort_reduce_rangearr( tmp_arr,
|
|
Packit Service |
54dbc3 |
len,
|
|
Packit Service |
54dbc3 |
&res_arr,
|
|
Packit Service |
54dbc3 |
&res_arr_len );
|
|
Packit Service |
54dbc3 |
*p_arr = res_arr;
|
|
Packit Service |
54dbc3 |
*p_arr_len = res_arr_len;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_add_port_to_port_map(
|
|
Packit Service |
54dbc3 |
cl_qmap_t * p_map,
|
|
Packit Service |
54dbc3 |
osm_physp_t * p_physp)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
if (cl_qmap_get(p_map, cl_ntoh64(osm_physp_get_port_guid(p_physp))) ==
|
|
Packit Service |
54dbc3 |
cl_qmap_end(p_map))
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
osm_qos_port_t * p_port = osm_qos_policy_port_create(p_physp);
|
|
Packit Service |
54dbc3 |
if (p_port)
|
|
Packit Service |
54dbc3 |
cl_qmap_insert(p_map,
|
|
Packit Service |
54dbc3 |
cl_ntoh64(osm_physp_get_port_guid(p_physp)),
|
|
Packit Service |
54dbc3 |
&p_port->map_item);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_add_guid_range_to_port_map(
|
|
Packit Service |
54dbc3 |
cl_qmap_t * p_map,
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr,
|
|
Packit Service |
54dbc3 |
unsigned range_len)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
unsigned i;
|
|
Packit Service |
54dbc3 |
uint64_t guid_ho;
|
|
Packit Service |
54dbc3 |
osm_port_t * p_osm_port;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!range_arr || !range_len)
|
|
Packit Service |
54dbc3 |
return;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
for (i = 0; i < range_len; i++) {
|
|
Packit Service |
54dbc3 |
for (guid_ho = range_arr[i][0]; guid_ho <= range_arr[i][1]; guid_ho++) {
|
|
Packit Service |
54dbc3 |
p_osm_port =
|
|
Packit Service |
54dbc3 |
osm_get_port_by_guid(p_qos_policy->p_subn, cl_hton64(guid_ho));
|
|
Packit Service |
54dbc3 |
if (p_osm_port)
|
|
Packit Service |
54dbc3 |
__parser_add_port_to_port_map(p_map, p_osm_port->p_physp);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
free(range_arr[i]);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
free(range_arr);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_add_pkey_range_to_port_map(
|
|
Packit Service |
54dbc3 |
cl_qmap_t * p_map,
|
|
Packit Service |
54dbc3 |
uint64_t ** range_arr,
|
|
Packit Service |
54dbc3 |
unsigned range_len)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
unsigned i;
|
|
Packit Service |
54dbc3 |
uint64_t pkey_64;
|
|
Packit Service |
54dbc3 |
ib_net16_t pkey;
|
|
Packit Service |
54dbc3 |
osm_prtn_t * p_prtn;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!range_arr || !range_len)
|
|
Packit Service |
54dbc3 |
return;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
for (i = 0; i < range_len; i++) {
|
|
Packit Service |
54dbc3 |
for (pkey_64 = range_arr[i][0]; pkey_64 <= range_arr[i][1]; pkey_64++) {
|
|
Packit Service |
54dbc3 |
pkey = cl_hton16((uint16_t)(pkey_64 & 0x7fff));
|
|
Packit Service |
54dbc3 |
p_prtn = (osm_prtn_t *)
|
|
Packit Service |
54dbc3 |
cl_qmap_get(&p_qos_policy->p_subn->prtn_pkey_tbl, pkey);
|
|
Packit Service |
54dbc3 |
if (p_prtn != (osm_prtn_t *)cl_qmap_end(
|
|
Packit Service |
54dbc3 |
&p_qos_policy->p_subn->prtn_pkey_tbl)) {
|
|
Packit Service |
54dbc3 |
__parser_add_map_to_port_map(p_map, &p_prtn->part_guid_tbl);
|
|
Packit Service |
54dbc3 |
__parser_add_map_to_port_map(p_map, &p_prtn->full_guid_tbl);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
free(range_arr[i]);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
free(range_arr);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_add_partition_list_to_port_map(
|
|
Packit Service |
54dbc3 |
cl_qmap_t * p_map,
|
|
Packit Service |
54dbc3 |
cl_list_t * p_list)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
cl_list_iterator_t list_iterator;
|
|
Packit Service |
54dbc3 |
char * tmp_str;
|
|
Packit Service |
54dbc3 |
osm_prtn_t * p_prtn;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/* extract all the ports from the partition
|
|
Packit Service |
54dbc3 |
to the port map of this port group */
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_head(p_list);
|
|
Packit Service |
54dbc3 |
while(list_iterator != cl_list_end(p_list)) {
|
|
Packit Service |
54dbc3 |
tmp_str = (char*)cl_list_obj(list_iterator);
|
|
Packit Service |
54dbc3 |
if (tmp_str) {
|
|
Packit Service |
54dbc3 |
p_prtn = osm_prtn_find_by_name(p_qos_policy->p_subn, tmp_str);
|
|
Packit Service |
54dbc3 |
if (p_prtn) {
|
|
Packit Service |
54dbc3 |
__parser_add_map_to_port_map(p_map, &p_prtn->part_guid_tbl);
|
|
Packit Service |
54dbc3 |
__parser_add_map_to_port_map(p_map, &p_prtn->full_guid_tbl);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
free(tmp_str);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
list_iterator = cl_list_next(list_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
cl_list_remove_all(p_list);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static void __parser_add_map_to_port_map(
|
|
Packit Service |
54dbc3 |
cl_qmap_t * p_dmap,
|
|
Packit Service |
54dbc3 |
cl_map_t * p_smap)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
cl_map_iterator_t map_iterator;
|
|
Packit Service |
54dbc3 |
osm_physp_t * p_physp;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!p_dmap || !p_smap)
|
|
Packit Service |
54dbc3 |
return;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
map_iterator = cl_map_head(p_smap);
|
|
Packit Service |
54dbc3 |
while (map_iterator != cl_map_end(p_smap)) {
|
|
Packit Service |
54dbc3 |
p_physp = (osm_physp_t*)cl_map_obj(map_iterator);
|
|
Packit Service |
54dbc3 |
__parser_add_port_to_port_map(p_dmap, p_physp);
|
|
Packit Service |
54dbc3 |
map_iterator = cl_map_next(map_iterator);
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
static int __validate_pkeys( uint64_t ** range_arr,
|
|
Packit Service |
54dbc3 |
unsigned range_len,
|
|
Packit Service |
54dbc3 |
boolean_t is_ipoib)
|
|
Packit Service |
54dbc3 |
{
|
|
Packit Service |
54dbc3 |
unsigned i;
|
|
Packit Service |
54dbc3 |
uint64_t pkey_64;
|
|
Packit Service |
54dbc3 |
ib_net16_t pkey;
|
|
Packit Service |
54dbc3 |
osm_prtn_t * p_prtn;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (!range_arr || !range_len)
|
|
Packit Service |
54dbc3 |
return 0;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
for (i = 0; i < range_len; i++) {
|
|
Packit Service |
54dbc3 |
for (pkey_64 = range_arr[i][0]; pkey_64 <= range_arr[i][1]; pkey_64++) {
|
|
Packit Service |
54dbc3 |
pkey = cl_hton16((uint16_t)(pkey_64 & 0x7fff));
|
|
Packit Service |
54dbc3 |
p_prtn = (osm_prtn_t *)
|
|
Packit Service |
54dbc3 |
cl_qmap_get(&p_qos_policy->p_subn->prtn_pkey_tbl, pkey);
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (p_prtn == (osm_prtn_t *)cl_qmap_end(
|
|
Packit Service |
54dbc3 |
&p_qos_policy->p_subn->prtn_pkey_tbl))
|
|
Packit Service |
54dbc3 |
p_prtn = NULL;
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
if (is_ipoib) {
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* Be very strict for IPoIB partition:
|
|
Packit Service |
54dbc3 |
* - the partition for the pkey have to exist
|
|
Packit Service |
54dbc3 |
* - it has to have at least 2 full members
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
if (!p_prtn) {
|
|
Packit Service |
54dbc3 |
yyerror("IPoIB partition, pkey 0x%04X - "
|
|
Packit Service |
54dbc3 |
"partition doesn't exist",
|
|
Packit Service |
54dbc3 |
cl_ntoh16(pkey));
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else if (cl_map_count(&p_prtn->full_guid_tbl) < 2) {
|
|
Packit Service |
54dbc3 |
yyerror("IPoIB partition, pkey 0x%04X - "
|
|
Packit Service |
54dbc3 |
"partition has less than two full members",
|
|
Packit Service |
54dbc3 |
cl_ntoh16(pkey));
|
|
Packit Service |
54dbc3 |
return 1;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
else if (!p_prtn) {
|
|
Packit Service |
54dbc3 |
/*
|
|
Packit Service |
54dbc3 |
* For non-IPoIB pkey we just want to check that
|
|
Packit Service |
54dbc3 |
* the relevant partition exists.
|
|
Packit Service |
54dbc3 |
* And even if it doesn't, don't exit - just print
|
|
Packit Service |
54dbc3 |
* error message and continue.
|
|
Packit Service |
54dbc3 |
*/
|
|
Packit Service |
54dbc3 |
OSM_LOG(p_qos_parser_osm_log, OSM_LOG_ERROR, "ERR AC02: "
|
|
Packit Service |
54dbc3 |
"pkey 0x%04X - partition doesn't exist",
|
|
Packit Service |
54dbc3 |
cl_ntoh16(pkey));
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
return 0;
|
|
Packit Service |
54dbc3 |
}
|
|
Packit Service |
54dbc3 |
|
|
Packit Service |
54dbc3 |
/***************************************************
|
|
Packit Service |
54dbc3 |
***************************************************/
|