1219820Sjeff%{ 2219820Sjeff/* 3219820Sjeff * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved. 4219820Sjeff * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved. 5219820Sjeff * Copyright (c) 1996-2003 Intel Corporation. All rights reserved. 6219820Sjeff * 7219820Sjeff * This software is available to you under a choice of one of two 8219820Sjeff * licenses. You may choose to be licensed under the terms of the GNU 9219820Sjeff * General Public License (GPL) Version 2, available from the file 10219820Sjeff * COPYING in the main directory of this source tree, or the 11219820Sjeff * OpenIB.org BSD license below: 12219820Sjeff * 13219820Sjeff * Redistribution and use in source and binary forms, with or 14219820Sjeff * without modification, are permitted provided that the following 15219820Sjeff * conditions are met: 16219820Sjeff * 17219820Sjeff * - Redistributions of source code must retain the above 18219820Sjeff * copyright notice, this list of conditions and the following 19219820Sjeff * disclaimer. 20219820Sjeff * 21219820Sjeff * - Redistributions in binary form must reproduce the above 22219820Sjeff * copyright notice, this list of conditions and the following 23219820Sjeff * disclaimer in the documentation and/or other materials 24219820Sjeff * provided with the distribution. 25219820Sjeff * 26219820Sjeff * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 27219820Sjeff * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 28219820Sjeff * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 29219820Sjeff * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS 30219820Sjeff * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN 31219820Sjeff * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 32219820Sjeff * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 33219820Sjeff * SOFTWARE. 34219820Sjeff * 35219820Sjeff */ 36219820Sjeff 37219820Sjeff/* 38219820Sjeff * Abstract: 39219820Sjeff * Lexer of OSM QoS parser. 40219820Sjeff * 41219820Sjeff * Environment: 42219820Sjeff * Linux User Mode 43219820Sjeff * 44219820Sjeff * Author: 45219820Sjeff * Yevgeny Kliteynik, Mellanox 46219820Sjeff */ 47219820Sjeff 48219820Sjeff#include <opensm/osm_qos_policy.h> 49219820Sjeff#include "osm_qos_parser_y.h" 50219820Sjeff 51219820Sjeff#define HANDLE_IF_IN_DESCRIPTION if (in_description) { yylval = strdup(yytext); return TK_TEXT; } 52219820Sjeff 53219820Sjeff#define SAVE_POS save_pos() 54219820Sjeffstatic void save_pos(); 55219820Sjeff 56219820Sjeffextern int column_num; 57219820Sjeffextern int line_num; 58219820Sjeffextern FILE * yyin; 59219820Sjeffextern YYSTYPE yylval; 60219820Sjeff 61219820Sjeffboolean_t in_description = FALSE; 62219820Sjeffboolean_t in_list_of_hex_num_ranges = FALSE; 63219820Sjeffboolean_t in_node_type = FALSE; 64219820Sjeffboolean_t in_list_of_numbers = FALSE; 65219820Sjeffboolean_t in_list_of_strings = FALSE; 66219820Sjeffboolean_t in_list_of_num_pairs = FALSE; 67219820Sjeffboolean_t in_asterisk_or_list_of_numbers = FALSE; 68219820Sjeffboolean_t in_list_of_num_ranges = FALSE; 69219820Sjeffboolean_t in_single_string = FALSE; 70219820Sjeffboolean_t in_single_number = FALSE; 71219820Sjeff 72219820Sjeffstatic void reset_new_line_flags(); 73219820Sjeff#define RESET_NEW_LINE_FLAGS reset_new_line_flags() 74219820Sjeff 75219820Sjeff#define START_USE {in_description = TRUE;} /* list of strings including whitespace (description) */ 76219820Sjeff#define START_PORT_GUID {in_list_of_hex_num_ranges = TRUE;} /* comma-separated list of hex num ranges */ 77219820Sjeff#define START_PORT_NAME {in_list_of_strings = TRUE;} /* comma-separated list of following strings: ../../.. */ 78219820Sjeff#define START_PARTITION {in_single_string = TRUE;} /* single string w/o whitespaces (partition name) */ 79219820Sjeff#define START_NAME {in_single_string = TRUE;} /* single string w/o whitespaces (port group name) */ 80219820Sjeff#define START_QOS_LEVEL_NAME {in_single_string = TRUE;} /* single string w/o whitespaces (qos level name in match rule) */ 81219820Sjeff 82219820Sjeff#define START_NODE_TYPE {in_node_type = TRUE;} /* comma-separated list of node types (ROUTER,CA,...) */ 83219820Sjeff#define START_SL2VL_TABLE {in_list_of_numbers = TRUE;} /* comma-separated list of hex or dec numbers */ 84219820Sjeff 85219820Sjeff#define START_GROUP {in_list_of_strings = TRUE;} /* list of strings w/o whitespaces (group names) */ 86219820Sjeff#define START_ACROSS {in_list_of_strings = TRUE;} /* list of strings w/o whitespaces (group names) */ 87219820Sjeff#define START_ACROSS_TO {in_list_of_strings = TRUE;} /* list of strings w/o whitespaces (group names) */ 88219820Sjeff#define START_ACROSS_FROM {in_list_of_strings = TRUE;} /* list of strings w/o whitespaces (group names) */ 89219820Sjeff#define START_SOURCE {in_list_of_strings = TRUE;} /* list of strings w/o whitespaces (group names) */ 90219820Sjeff#define START_DESTINATION {in_list_of_strings = TRUE;} /* list of strings w/o whitespaces (group names) */ 91219820Sjeff 92219820Sjeff#define START_VLARB_HIGH {in_list_of_num_pairs = TRUE;} /* comma-separated list of hex or dec num pairs: "num1:num2" */ 93219820Sjeff#define START_VLARB_LOW {in_list_of_num_pairs = TRUE;} /* comma-separated list of hex or dec num pairs: "num1:num2" */ 94219820Sjeff 95219820Sjeff#define START_TO {in_asterisk_or_list_of_numbers = TRUE;} /* (asterisk) or (comma-separated list of hex or dec numbers) */ 96219820Sjeff#define START_FROM {in_asterisk_or_list_of_numbers = TRUE;} /* (asterisk) or (comma-separated list of hex or dec numbers) */ 97219820Sjeff 98219820Sjeff#define START_PATH_BITS {in_list_of_num_ranges = TRUE;} /* comma-separated list of hex or dec num ranges */ 99219820Sjeff#define START_QOS_CLASS {in_list_of_num_ranges = TRUE;} /* comma-separated list of hex or dec num ranges */ 100219820Sjeff#define START_SERVICE_ID {in_list_of_num_ranges = TRUE;} /* comma-separated list of hex or dec num ranges */ 101219820Sjeff#define START_PKEY {in_list_of_num_ranges = TRUE;} /* comma-separated list of hex or dec num ranges */ 102219820Sjeff 103219820Sjeff#define START_SL {in_single_number = TRUE;} /* single number */ 104219820Sjeff#define START_VLARB_HIGH_LIMIT {in_single_number = TRUE;} /* single number */ 105219820Sjeff#define START_MTU_LIMIT {in_single_number = TRUE;} /* single number */ 106219820Sjeff#define START_RATE_LIMIT {in_single_number = TRUE;} /* single number */ 107219820Sjeff#define START_PACKET_LIFE {in_single_number = TRUE;} /* single number */ 108219820Sjeff 109219820Sjeff#define START_ULP_DEFAULT {in_single_number = TRUE;} /* single number */ 110219820Sjeff#define START_ULP_ANY {in_list_of_num_ranges = TRUE;} /* comma-separated list of hex or dec num ranges */ 111219820Sjeff#define START_ULP_SDP_DEFAULT {in_single_number = TRUE;} /* single number */ 112219820Sjeff#define START_ULP_SDP_PORT {in_list_of_num_ranges = TRUE;} /* comma-separated list of hex or dec num ranges */ 113219820Sjeff#define START_ULP_RDS_DEFAULT {in_single_number = TRUE;} /* single number */ 114219820Sjeff#define START_ULP_RDS_PORT {in_list_of_num_ranges = TRUE;} /* comma-separated list of hex or dec num ranges */ 115219820Sjeff#define START_ULP_ISER_DEFAULT {in_single_number = TRUE;} /* single number */ 116219820Sjeff#define START_ULP_ISER_PORT {in_list_of_num_ranges = TRUE;} /* comma-separated list of hex or dec num ranges */ 117219820Sjeff#define START_ULP_SRP_GUID {in_list_of_num_ranges = TRUE;} /* comma-separated list of hex or dec num ranges */ 118219820Sjeff#define START_ULP_IPOIB_DEFAULT {in_single_number = TRUE;} /* single number */ 119219820Sjeff#define START_ULP_IPOIB_PKEY {in_list_of_num_ranges = TRUE;} /* comma-separated list of hex or dec num ranges */ 120219820Sjeff 121219820Sjeff 122219820Sjeff%} 123219820Sjeff 124219820Sjeff%option nounput noinput 125219820Sjeff 126219820SjeffQOS_ULPS_START qos\-ulps 127219820SjeffQOS_ULPS_END end\-qos\-ulps 128219820SjeffPORT_GROUPS_START port\-groups 129219820SjeffPORT_GROUPS_END end\-port\-groups 130219820SjeffPORT_GROUP_START port\-group 131219820SjeffPORT_GROUP_END end\-port\-group 132219820SjeffPORT_NUM port\-num 133219820SjeffNAME name 134219820SjeffUSE use 135219820SjeffPORT_GUID port\-guid 136219820SjeffTARGET_PORT_GUID target\-port\-guid 137219820SjeffPORT_NAME port\-name 138219820SjeffPARTITION partition 139219820SjeffNODE_TYPE node\-type 140219820SjeffQOS_SETUP_START qos\-setup 141219820SjeffQOS_SETUP_END end\-qos\-setup 142219820SjeffVLARB_TABLES_START vlarb\-tables 143219820SjeffVLARB_TABLES_END end\-vlarb\-tables 144219820SjeffVLARB_SCOPE_START vlarb\-scope 145219820SjeffVLARB_SCOPE_END end\-vlarb\-scope 146219820SjeffGROUP group 147219820SjeffACROSS across 148219820SjeffVLARB_HIGH vlarb\-high 149219820SjeffVLARB_LOW vlarb\-low 150219820SjeffVLARB_HIGH_LIMIT vl\-high\-limit 151219820SjeffSL2VL_TABLES_START sl2vl\-tables 152219820SjeffSL2VL_TABLES_END end\-sl2vl\-tables 153219820SjeffSL2VL_SCOPE_START sl2vl\-scope 154219820SjeffSL2VL_SCOPE_END end\-sl2vl\-scope 155219820SjeffTO to 156219820SjeffFROM from 157219820SjeffACROSS_TO across\-to 158219820SjeffACROSS_FROM across\-from 159219820SjeffSL2VL_TABLE sl2vl\-table 160219820SjeffQOS_LEVELS_START qos\-levels 161219820SjeffQOS_LEVELS_END end\-qos\-levels 162219820SjeffQOS_LEVEL_START qos\-level 163219820SjeffQOS_LEVEL_END end\-qos\-level 164219820SjeffSL sl 165219820SjeffMTU_LIMIT mtu\-limit 166219820SjeffRATE_LIMIT rate\-limit 167219820SjeffPACKET_LIFE packet\-life 168219820SjeffPATH_BITS path\-bits 169219820SjeffQOS_MATCH_RULES_START qos\-match\-rules 170219820SjeffQOS_MATCH_RULES_END end\-qos\-match\-rules 171219820SjeffQOS_MATCH_RULE_START qos\-match\-rule 172219820SjeffQOS_MATCH_RULE_END end\-qos\-match\-rule 173219820SjeffQOS_CLASS qos\-class 174219820SjeffSOURCE source 175219820SjeffDESTINATION destination 176219820SjeffSERVICE_ID service\-id 177219820SjeffPKEY pkey 178219820SjeffQOS_LEVEL_NAME qos\-level\-name 179219820Sjeff 180219820SjeffROUTER [Rr][Oo][Uu][Tt][Ee][Rr] 181219820SjeffCA [Cc][Aa] 182219820SjeffSWITCH [Ss][Ww][Ii][Tt][Cc][Hh] 183219820SjeffSELF [Ss][Ee][Ll][Ff] 184219820SjeffALL [Aa][Ll][Ll] 185219820Sjeff 186219820SjeffULP_SDP [Ss][Dd][Pp] 187219820SjeffULP_SRP [Ss][Rr][Pp] 188219820SjeffULP_RDS [Rr][Dd][Ss] 189219820SjeffULP_IPOIB [Ii][Pp][Oo][Ii][Bb] 190219820SjeffULP_ISER [Ii][Ss][Ee][Rr] 191219820SjeffULP_ANY [Aa][Nn][Yy] 192219820SjeffULP_DEFAULT [Dd][Ee][Ff][Aa][Uu][Ll][Tt] 193219820Sjeff 194219820SjeffWHITE [ \t]+ 195219820SjeffNEW_LINE \n 196219820SjeffCOMMENT \#.*\n 197219820SjeffWHITE_DOTDOT_WHITE [ \t]*:[ \t]* 198219820SjeffWHITE_COMMA_WHITE [ \t]*,[ \t]* 199219820SjeffQUOTED_TEXT \"[^\"]*\" 200219820Sjeff 201219820Sjeff%% 202219820Sjeff 203219820Sjeff 204219820Sjeff{COMMENT} { SAVE_POS; RESET_NEW_LINE_FLAGS; } /* swallow comment */ 205219820Sjeff{WHITE}{NEW_LINE} { SAVE_POS; RESET_NEW_LINE_FLAGS; } /* trailing blanks with new line */ 206219820Sjeff{WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; } 207219820Sjeff{NEW_LINE} { SAVE_POS; RESET_NEW_LINE_FLAGS; } 208219820Sjeff 209219820Sjeff{QOS_ULPS_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_ULPS_START; } 210219820Sjeff{QOS_ULPS_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_ULPS_END; } 211219820Sjeff 212219820Sjeff{PORT_GROUPS_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_PORT_GROUPS_START; } 213219820Sjeff{PORT_GROUPS_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_PORT_GROUPS_END; } 214219820Sjeff{PORT_GROUP_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_PORT_GROUP_START; } 215219820Sjeff{PORT_GROUP_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_PORT_GROUP_END; } 216219820Sjeff 217219820Sjeff{QOS_SETUP_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_SETUP_START; } 218219820Sjeff{QOS_SETUP_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_SETUP_END; } 219219820Sjeff{VLARB_TABLES_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_VLARB_TABLES_START; } 220219820Sjeff{VLARB_TABLES_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_VLARB_TABLES_END; } 221219820Sjeff{VLARB_SCOPE_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_VLARB_SCOPE_START; } 222219820Sjeff{VLARB_SCOPE_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_VLARB_SCOPE_END; } 223219820Sjeff 224219820Sjeff{SL2VL_TABLES_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_SL2VL_TABLES_START; } 225219820Sjeff{SL2VL_TABLES_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_SL2VL_TABLES_END; } 226219820Sjeff{SL2VL_SCOPE_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_SL2VL_SCOPE_START; } 227219820Sjeff{SL2VL_SCOPE_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_SL2VL_SCOPE_END; } 228219820Sjeff 229219820Sjeff{QOS_LEVELS_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_LEVELS_START; } 230219820Sjeff{QOS_LEVELS_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_LEVELS_END; } 231219820Sjeff{QOS_LEVEL_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_LEVEL_START; } 232219820Sjeff{QOS_LEVEL_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_LEVEL_END; } 233219820Sjeff 234219820Sjeff{QOS_MATCH_RULES_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_MATCH_RULES_START; } 235219820Sjeff{QOS_MATCH_RULES_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_MATCH_RULES_END; } 236219820Sjeff{QOS_MATCH_RULE_START} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_MATCH_RULE_START; } 237219820Sjeff{QOS_MATCH_RULE_END} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; return TK_QOS_MATCH_RULE_END; } 238219820Sjeff 239219820Sjeff{PORT_GUID}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_PORT_GUID; return TK_PORT_GUID; } 240219820Sjeff{PORT_NAME}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_PORT_NAME; return TK_PORT_NAME; } 241219820Sjeff{PARTITION}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_PARTITION; return TK_PARTITION; } 242219820Sjeff{NODE_TYPE}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_NODE_TYPE; return TK_NODE_TYPE; } 243219820Sjeff{NAME}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_NAME; return TK_NAME; } 244219820Sjeff{USE}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_USE; return TK_USE; } 245219820Sjeff{GROUP}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_GROUP; return TK_GROUP; } 246219820Sjeff{VLARB_HIGH}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_VLARB_HIGH; return TK_VLARB_HIGH; } 247219820Sjeff{VLARB_LOW}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_VLARB_LOW; return TK_VLARB_LOW; } 248219820Sjeff{VLARB_HIGH_LIMIT}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_VLARB_HIGH_LIMIT; return TK_VLARB_HIGH_LIMIT;} 249219820Sjeff{TO}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_TO; return TK_TO; } 250219820Sjeff{FROM}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_FROM; return TK_FROM; } 251219820Sjeff{ACROSS_TO}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ACROSS_TO; return TK_ACROSS_TO; } 252219820Sjeff{ACROSS_FROM}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ACROSS_FROM; return TK_ACROSS_FROM;} 253219820Sjeff{ACROSS}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ACROSS; return TK_ACROSS; } 254219820Sjeff{SL2VL_TABLE}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_SL2VL_TABLE; return TK_SL2VL_TABLE;} 255219820Sjeff{SL}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_SL; return TK_SL; } 256219820Sjeff{MTU_LIMIT}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_MTU_LIMIT; return TK_MTU_LIMIT; } 257219820Sjeff{RATE_LIMIT}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_RATE_LIMIT; return TK_RATE_LIMIT; } 258219820Sjeff{PACKET_LIFE}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_PACKET_LIFE; return TK_PACKET_LIFE;} 259219820Sjeff{PATH_BITS}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_PATH_BITS; return TK_PATH_BITS; } 260219820Sjeff{QOS_CLASS}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_QOS_CLASS; return TK_QOS_CLASS; } 261219820Sjeff{SOURCE}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_SOURCE; return TK_SOURCE; } 262219820Sjeff{DESTINATION}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_DESTINATION; return TK_DESTINATION;} 263219820Sjeff{SERVICE_ID}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_SERVICE_ID; return TK_SERVICE_ID; } 264219820Sjeff{PKEY}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_PKEY; return TK_PKEY; } 265219820Sjeff{QOS_LEVEL_NAME}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_QOS_LEVEL_NAME; return TK_QOS_LEVEL_NAME;} 266219820Sjeff 267219820Sjeff{ROUTER} { SAVE_POS; if (in_node_type) return TK_NODE_TYPE_ROUTER; yylval = strdup(yytext); return TK_TEXT; } 268219820Sjeff{CA} { SAVE_POS; if (in_node_type) return TK_NODE_TYPE_CA; yylval = strdup(yytext); return TK_TEXT; } 269219820Sjeff{SWITCH} { SAVE_POS; if (in_node_type) return TK_NODE_TYPE_SWITCH; yylval = strdup(yytext); return TK_TEXT; } 270219820Sjeff{SELF} { SAVE_POS; if (in_node_type) return TK_NODE_TYPE_SELF; yylval = strdup(yytext); return TK_TEXT; } 271219820Sjeff{ALL} { SAVE_POS; if (in_node_type) return TK_NODE_TYPE_ALL; yylval = strdup(yytext); return TK_TEXT; } 272219820Sjeff 273219820Sjeff{ULP_DEFAULT}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_DEFAULT; return TK_ULP_DEFAULT; } 274219820Sjeff{ULP_ANY}{WHITE_COMMA_WHITE}{SERVICE_ID} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_ANY; return TK_ULP_ANY_SERVICE_ID; } 275219820Sjeff{ULP_ANY}{WHITE_COMMA_WHITE}{PKEY} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_ANY; return TK_ULP_ANY_PKEY; } 276219820Sjeff{ULP_ANY}{WHITE_COMMA_WHITE}{TARGET_PORT_GUID} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_ANY; return TK_ULP_ANY_TARGET_PORT_GUID; } 277219820Sjeff 278219820Sjeff{ULP_SDP}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_SDP_DEFAULT; return TK_ULP_SDP_DEFAULT; } 279219820Sjeff{ULP_SDP}{WHITE_COMMA_WHITE}{PORT_NUM} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_SDP_PORT; return TK_ULP_SDP_PORT; } 280219820Sjeff 281219820Sjeff{ULP_RDS}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_RDS_DEFAULT; return TK_ULP_RDS_DEFAULT; } 282219820Sjeff{ULP_RDS}{WHITE_COMMA_WHITE}{PORT_NUM} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_RDS_PORT; return TK_ULP_RDS_PORT; } 283219820Sjeff 284219820Sjeff{ULP_ISER}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_SDP_DEFAULT; return TK_ULP_ISER_DEFAULT; } 285219820Sjeff{ULP_ISER}{WHITE_COMMA_WHITE}{PORT_NUM} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_SDP_PORT; return TK_ULP_ISER_PORT; } 286219820Sjeff 287219820Sjeff{ULP_SRP}{WHITE_COMMA_WHITE}{TARGET_PORT_GUID} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_SRP_GUID; return TK_ULP_SRP_GUID; } 288219820Sjeff 289219820Sjeff{ULP_IPOIB}{WHITE_DOTDOT_WHITE} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_IPOIB_DEFAULT; return TK_ULP_IPOIB_DEFAULT; } 290219820Sjeff{ULP_IPOIB}{WHITE_COMMA_WHITE}{PKEY} { SAVE_POS; HANDLE_IF_IN_DESCRIPTION; START_ULP_IPOIB_PKEY; return TK_ULP_IPOIB_PKEY; } 291219820Sjeff 292219820Sjeff0[xX][0-9a-fA-F]+ { 293219820Sjeff SAVE_POS; 294219820Sjeff yylval = strdup(yytext); 295219820Sjeff if (in_description || in_list_of_strings || in_single_string) 296219820Sjeff return TK_TEXT; 297219820Sjeff return TK_NUMBER; 298219820Sjeff } 299219820Sjeff 300219820Sjeff[0-9]+ { 301219820Sjeff SAVE_POS; 302219820Sjeff yylval = strdup(yytext); 303219820Sjeff if (in_description || in_list_of_strings || in_single_string) 304219820Sjeff return TK_TEXT; 305219820Sjeff return TK_NUMBER; 306219820Sjeff } 307219820Sjeff 308219820Sjeff 309219820Sjeff- { 310219820Sjeff SAVE_POS; 311219820Sjeff if (in_description || in_list_of_strings || in_single_string) 312219820Sjeff { 313219820Sjeff yylval = strdup(yytext); 314219820Sjeff return TK_TEXT; 315219820Sjeff } 316219820Sjeff return TK_DASH; 317219820Sjeff } 318219820Sjeff 319219820Sjeff: { 320219820Sjeff SAVE_POS; 321219820Sjeff if (in_description || in_list_of_strings || in_single_string) 322219820Sjeff { 323219820Sjeff yylval = strdup(yytext); 324219820Sjeff return TK_TEXT; 325219820Sjeff } 326219820Sjeff return TK_DOTDOT; 327219820Sjeff } 328219820Sjeff 329219820Sjeff, { 330219820Sjeff SAVE_POS; 331219820Sjeff if (in_description) 332219820Sjeff { 333219820Sjeff yylval = strdup(yytext); 334219820Sjeff return TK_TEXT; 335219820Sjeff } 336219820Sjeff return TK_COMMA; 337219820Sjeff } 338219820Sjeff 339219820Sjeff\* { 340219820Sjeff SAVE_POS; 341219820Sjeff if (in_description || in_list_of_strings || in_single_string) 342219820Sjeff { 343219820Sjeff yylval = strdup(yytext); 344219820Sjeff return TK_TEXT; 345219820Sjeff } 346219820Sjeff return TK_ASTERISK; 347219820Sjeff } 348219820Sjeff 349219820Sjeff{QUOTED_TEXT} { 350219820Sjeff SAVE_POS; 351219820Sjeff yylval = strdup(&yytext[1]); 352219820Sjeff yylval[strlen(yylval)-1] = '\0'; 353219820Sjeff return TK_TEXT; 354219820Sjeff } 355219820Sjeff 356219820Sjeff. { SAVE_POS; yylval = strdup(yytext); return TK_TEXT;} 357219820Sjeff 358219820Sjeff%% 359219820Sjeff 360219820Sjeff 361219820Sjeff/********************************************* 362219820Sjeff *********************************************/ 363219820Sjeff 364219820Sjeffstatic void save_pos() 365219820Sjeff{ 366219820Sjeff int i; 367219820Sjeff for (i = 0; i < yyleng; i++) 368219820Sjeff { 369219820Sjeff if (yytext[i] == '\n') 370219820Sjeff { 371219820Sjeff line_num ++; 372219820Sjeff column_num = 1; 373219820Sjeff } 374219820Sjeff else 375219820Sjeff column_num ++; 376219820Sjeff } 377219820Sjeff} 378219820Sjeff 379219820Sjeff/********************************************* 380219820Sjeff *********************************************/ 381219820Sjeff 382219820Sjeffstatic void reset_new_line_flags() 383219820Sjeff{ 384219820Sjeff in_description = FALSE; 385219820Sjeff in_list_of_hex_num_ranges = FALSE; 386219820Sjeff in_node_type = FALSE; 387219820Sjeff in_list_of_numbers = FALSE; 388219820Sjeff in_list_of_strings = FALSE; 389219820Sjeff in_list_of_num_pairs = FALSE; 390219820Sjeff in_asterisk_or_list_of_numbers = FALSE; 391219820Sjeff in_list_of_num_ranges = FALSE; 392219820Sjeff in_single_string = FALSE; 393219820Sjeff in_single_number = FALSE; 394219820Sjeff} 395