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