[openib-general] [PATCH 2/10] osm: QoS in OpenSM

Yevgeny Kliteynik kliteyn at dev.mellanox.co.il
Tue Jan 30 07:01:44 PST 2007


QoS policy file parser Lex file

Signed-off-by: Yevgeny Kliteynik <kliteyn at dev.mellanox.co.il>
---
 osm/opensm/osm_qos_parser.l |  253 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 253 insertions(+), 0 deletions(-)

diff --git a/osm/opensm/osm_qos_parser.l b/osm/opensm/osm_qos_parser.l
new file mode 100644
index 0000000..e57eb9f
--- /dev/null
+++ b/osm/opensm/osm_qos_parser.l
@@ -0,0 +1,253 @@
+%{
+/*
+ * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.
+ * Copyright (c) 2002-2005 Mellanox Technologies LTD. All rights reserved.
+ * Copyright (c) 1996-2003 Intel Corporation. All rights reserved.
+ *
+ * This software is available to you under a choice of one of two
+ * licenses.  You may choose to be licensed under the terms of the GNU
+ * General Public License (GPL) Version 2, available from the file
+ * COPYING in the main directory of this source tree, or the
+ * OpenIB.org BSD license below:
+ *
+ *     Redistribution and use in source and binary forms, with or
+ *     without modification, are permitted provided that the following
+ *     conditions are met:
+ *
+ *      - Redistributions of source code must retain the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer.
+ *
+ *      - Redistributions in binary form must reproduce the above
+ *        copyright notice, this list of conditions and the following
+ *        disclaimer in the documentation and/or other materials
+ *        provided with the distribution.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+ * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ */
+
+/*
+ * Abstract:
+ *    Lexer of OSM QoS parser.
+ *
+ * Environment:
+ *    Linux User Mode
+ *
+ * Author:
+ *    Yevgeny Kliteynik, Mellanox
+ */
+
+#include <opensm/osm_qos_parser.h>
+#include <opensm/osm_qos_parser_y.h>
+
+#define SAVE_POS save_pos()
+static void save_pos();
+
+extern int column_num;
+extern int line_num;
+extern FILE * yyin;
+
+%}
+
+XML_VERSION_START         <\?
+XML_VERSION_END           \?>
+QOS_POLICY_START          <qos\-policy>
+QOS_POLICY_END            <\/qos\-policy>
+PORT_GROUPS_START         <port\-groups>
+PORT_GROUPS_END           <\/port\-groups>
+PORT_GROUP_START          <port\-group>
+PORT_GROUP_END            <\/port\-group>
+NAME_START                <name>
+NAME_END                  <\/name>
+USE_START                 <use>
+USE_END                   <\/use>
+PORT_GUID_START           <port\-guid>
+PORT_GUID_END             <\/port\-guid>
+PORT_NAME_START           <port\-name>
+PORT_NAME_END             <\/port\-name>
+PARTITION_START           <partition>
+PARTITION_END             <\/partition>
+NODE_TYPE_START           <node\-type>
+NODE_TYPE_END             <\/node\-type>
+QOS_SETUP_START           <qos\-setup>
+QOS_SETUP_END             <\/qos\-setup>
+SL2VL_TABLES_START        <sl2vl\-tables>
+SL2VL_TABLES_END          <\/sl2vl\-tables>
+SL2VL_SCOPE_START         <sl2vl\-scope>
+SL2VL_SCOPE_END           <\/sl2vl\-scope>
+GROUP_START               <group>
+GROUP_END                 <\/group>
+FROM_START                <from>
+FROM_END                  <\/from>
+TO_START                  <to>
+TO_END                    <\/to>
+SL2VL_TABLE_START         <sl2vl\-table>
+SL2VL_TABLE_END           <\/sl2vl\-table>
+ACROSS_START              <across>
+ACROSS_END                <\/across>
+ACROSS_FROM_START         <across\-from>
+ACROSS_FROM_END           <\/across\-from>
+ACROSS_TO_START           <across\-to>
+ACROSS_TO_END             <\/across\-to>
+VLARB_TABLES_START        <vlarb\-tables>
+VLARB_TABLES_END          <\/vlarb\-tables>
+VLARB_SCOPE_START         <vlarb\-scope>
+VLARB_SCOPE_END           <\/vlarb\-scope>
+VLARB_HIGH_START          <vlarb\-high>
+VLARB_HIGH_END            <\/vlarb\-high>
+VLARB_LOW_START           <vlarb\-low>
+VLARB_LOW_END             <\/vlarb\-low>
+VLARB_HIGH_LIMIT_START    <vl\-high\-limit>
+VLARB_HIGH_LIMIT_END      <\/vl\-high\-limit>
+QOS_LEVELS_START          <qos\-levels>
+QOS_LEVELS_END            <\/qos\-levels>
+QOS_LEVEL_START           <qos\-level>
+QOS_LEVEL_END             <\/qos\-level>
+SN_START                  <sn>
+SN_END                    <\/sn>
+SL_START                  <sl>
+SL_END                    <\/sl>
+CLASS_START               <class>
+CLASS_END                 <\/class>
+MTU_LIMIT_START           <mtu\-limit>
+MTU_LIMIT_END             <\/mtu\-limit>
+RATE_LIMIT_START          <rate\-limit>
+RATE_LIMIT_END            <\/rate\-limit>
+PACKET_LIFE_START         <packet\-life>
+PACKET_LIFE_END           <\/packet\-life>
+PKEY_START                <pkey>
+PKEY_END                  <\/pkey>
+QOS_MATCH_RULES_START     <qos\-match\-rules>
+QOS_MATCH_RULES_END       <\/qos\-match\-rules>
+QOS_MATCH_RULE_START      <qos\-match\-rule>
+QOS_MATCH_RULE_END        <\/qos\-match\-rule>
+QOS_LEVEL_SN_START        <qos\-level\-sn>
+QOS_LEVEL_SN_END          <\/qos\-level\-sn>
+SOURCE_START              <source>
+SOURCE_END                <\/source>
+DESTINATION_START         <destination>
+DESTINATION_END           <\/destination>
+SERVICE_START             <service>
+SERVICE_END               <\/service>
+
+WHITE                     [ \t\n]*
+COMMENT		              <!--([^-]|-[^-]|--[^>])*-->
+
+%%
+
+{WHITE}{XML_VERSION_START}{WHITE}         { SAVE_POS; return TK_XML_VERSION_START; }
+{WHITE}{XML_VERSION_END}{WHITE}           { SAVE_POS; return TK_XML_VERSION_END; }
+{WHITE}{QOS_POLICY_START}{WHITE}          { SAVE_POS; return TK_QOS_POLICY_START; }
+{WHITE}{QOS_POLICY_END}{WHITE}            { SAVE_POS; return TK_QOS_POLICY_END; }
+{WHITE}{PORT_GROUPS_START}{WHITE}         { SAVE_POS; return TK_PORT_GROUPS_START; }
+{WHITE}{PORT_GROUPS_END}{WHITE}           { SAVE_POS; return TK_PORT_GROUPS_END; }
+{WHITE}{PORT_GROUP_START}{WHITE}          { SAVE_POS; return TK_PORT_GROUP_START; }
+{WHITE}{PORT_GROUP_END}{WHITE}            { SAVE_POS; return TK_PORT_GROUP_END; }
+{WHITE}{NAME_START}{WHITE}                { SAVE_POS; return TK_NAME_START; }
+{WHITE}{NAME_END}{WHITE}                  { SAVE_POS; return TK_NAME_END; }
+{WHITE}{USE_START}{WHITE}                 { SAVE_POS; return TK_USE_START; }
+{WHITE}{USE_END}{WHITE}                   { SAVE_POS; return TK_USE_END; }
+{WHITE}{PORT_GUID_START}{WHITE}           { SAVE_POS; return TK_PORT_GUID_START; }
+{WHITE}{PORT_GUID_END}{WHITE}             { SAVE_POS; return TK_PORT_GUID_END; }
+{WHITE}{PORT_NAME_START}{WHITE}           { SAVE_POS; return TK_PORT_NAME_START; }
+{WHITE}{PORT_NAME_END}{WHITE}             { SAVE_POS; return TK_PORT_NAME_END; }
+{WHITE}{PARTITION_START}{WHITE}           { SAVE_POS; return TK_PARTITION_START; }
+{WHITE}{PARTITION_END}{WHITE}             { SAVE_POS; return TK_PARTITION_END; }
+{WHITE}{NODE_TYPE_START}{WHITE}           { SAVE_POS; return TK_NODE_TYPE_START; }
+{WHITE}{NODE_TYPE_END}{WHITE}             { SAVE_POS; return TK_NODE_TYPE_END; }
+{WHITE}{QOS_SETUP_START}{WHITE}           { SAVE_POS; return TK_QOS_SETUP_START; }
+{WHITE}{QOS_SETUP_END}{WHITE}             { SAVE_POS; return TK_QOS_SETUP_END; }
+{WHITE}{SL2VL_TABLES_START}{WHITE}        { SAVE_POS; return TK_SL2VL_TABLES_START; }
+{WHITE}{SL2VL_TABLES_END}{WHITE}          { SAVE_POS; return TK_SL2VL_TABLES_END; }
+{WHITE}{SL2VL_SCOPE_START}{WHITE}         { SAVE_POS; return TK_SL2VL_SCOPE_START; }
+{WHITE}{SL2VL_SCOPE_END}{WHITE}           { SAVE_POS; return TK_SL2VL_SCOPE_END; }
+{WHITE}{GROUP_START}{WHITE}               { SAVE_POS; return TK_GROUP_START; }
+{WHITE}{GROUP_END}{WHITE}                 { SAVE_POS; return TK_GROUP_END; }
+{WHITE}{FROM_START}{WHITE}                { SAVE_POS; return TK_FROM_START; }
+{WHITE}{FROM_END}{WHITE}                  { SAVE_POS; return TK_FROM_END; }
+{WHITE}{TO_START}{WHITE}                  { SAVE_POS; return TK_TO_START; }
+{WHITE}{TO_END}{WHITE}                    { SAVE_POS; return TK_TO_END; }
+{WHITE}{SL2VL_TABLE_START}{WHITE}         { SAVE_POS; return TK_SL2VL_TABLE_START; }
+{WHITE}{SL2VL_TABLE_END}{WHITE}           { SAVE_POS; return TK_SL2VL_TABLE_END; }
+{WHITE}{ACROSS_START}{WHITE}              { SAVE_POS; return TK_ACROSS_START; }
+{WHITE}{ACROSS_END}{WHITE}                { SAVE_POS; return TK_ACROSS_END; }
+{WHITE}{ACROSS_FROM_START}{WHITE}         { SAVE_POS; return TK_ACROSS_FROM_START; }
+{WHITE}{ACROSS_FROM_END}{WHITE}           { SAVE_POS; return TK_ACROSS_FROM_END; }
+{WHITE}{ACROSS_TO_START}{WHITE}           { SAVE_POS; return TK_ACROSS_TO_START; }
+{WHITE}{ACROSS_TO_END}{WHITE}             { SAVE_POS; return TK_ACROSS_TO_END; }
+{WHITE}{VLARB_TABLES_START}{WHITE}        { SAVE_POS; return TK_VLARB_TABLES_START; }
+{WHITE}{VLARB_TABLES_END}{WHITE}          { SAVE_POS; return TK_VLARB_TABLES_END; }
+{WHITE}{VLARB_SCOPE_START}{WHITE}         { SAVE_POS; return TK_VLARB_SCOPE_START; }
+{WHITE}{VLARB_SCOPE_END}{WHITE}           { SAVE_POS; return TK_VLARB_SCOPE_END; }
+{WHITE}{VLARB_HIGH_START}{WHITE}          { SAVE_POS; return TK_VLARB_HIGH_START; }
+{WHITE}{VLARB_HIGH_END}{WHITE}            { SAVE_POS; return TK_VLARB_HIGH_END; }
+{WHITE}{VLARB_LOW_START}{WHITE}           { SAVE_POS; return TK_VLARB_LOW_START; }
+{WHITE}{VLARB_LOW_END}{WHITE}             { SAVE_POS; return TK_VLARB_LOW_END; }
+{WHITE}{VLARB_HIGH_LIMIT_START}{WHITE}    { SAVE_POS; return TK_VLARB_HIGH_LIMIT_START; }
+{WHITE}{VLARB_HIGH_LIMIT_END}{WHITE}      { SAVE_POS; return TK_VLARB_HIGH_LIMIT_END; }
+{WHITE}{QOS_LEVELS_START}{WHITE}          { SAVE_POS; return TK_QOS_LEVELS_START; }
+{WHITE}{QOS_LEVELS_END}{WHITE}            { SAVE_POS; return TK_QOS_LEVELS_END; }
+{WHITE}{QOS_LEVEL_START}{WHITE}           { SAVE_POS; return TK_QOS_LEVEL_START; }
+{WHITE}{QOS_LEVEL_END}{WHITE}             { SAVE_POS; return TK_QOS_LEVEL_END; }
+{WHITE}{SN_START}{WHITE}                  { SAVE_POS; return TK_SN_START; }
+{WHITE}{SN_END}{WHITE}                    { SAVE_POS; return TK_SN_END; }
+{WHITE}{SL_START}{WHITE}                  { SAVE_POS; return TK_SL_START; }
+{WHITE}{SL_END}{WHITE}                    { SAVE_POS; return TK_SL_END; }
+{WHITE}{CLASS_START}{WHITE}               { SAVE_POS; return TK_CLASS_START; }
+{WHITE}{CLASS_END}{WHITE}                 { SAVE_POS; return TK_CLASS_END; }
+{WHITE}{MTU_LIMIT_START}{WHITE}           { SAVE_POS; return TK_MTU_LIMIT_START; }
+{WHITE}{MTU_LIMIT_END}{WHITE}             { SAVE_POS; return TK_MTU_LIMIT_END; }
+{WHITE}{RATE_LIMIT_START}{WHITE}          { SAVE_POS; return TK_RATE_LIMIT_START; }
+{WHITE}{RATE_LIMIT_END}{WHITE}            { SAVE_POS; return TK_RATE_LIMIT_END; }
+{WHITE}{PACKET_LIFE_START}{WHITE}         { SAVE_POS; return TK_PACKET_LIFE_START; }
+{WHITE}{PACKET_LIFE_END}{WHITE}           { SAVE_POS; return TK_PACKET_LIFE_END; }
+{WHITE}{PKEY_START}{WHITE}                { SAVE_POS; return TK_PKEY_START; }
+{WHITE}{PKEY_END}{WHITE}                  { SAVE_POS; return TK_PKEY_END; }
+{WHITE}{QOS_MATCH_RULES_START}{WHITE}     { SAVE_POS; return TK_QOS_MATCH_RULES_START; }
+{WHITE}{QOS_MATCH_RULES_END}{WHITE}       { SAVE_POS; return TK_QOS_MATCH_RULES_END; }
+{WHITE}{QOS_MATCH_RULE_START}{WHITE}      { SAVE_POS; return TK_QOS_MATCH_RULE_START; }
+{WHITE}{QOS_MATCH_RULE_END}{WHITE}        { SAVE_POS; return TK_QOS_MATCH_RULE_END; }
+{WHITE}{QOS_LEVEL_SN_START}{WHITE}        { SAVE_POS; return TK_QOS_LEVEL_SN_START; }
+{WHITE}{QOS_LEVEL_SN_END}{WHITE}          { SAVE_POS; return TK_QOS_LEVEL_SN_END; }
+{WHITE}{SOURCE_START}{WHITE}              { SAVE_POS; return TK_SOURCE_START; }
+{WHITE}{SOURCE_END}{WHITE}                { SAVE_POS; return TK_SOURCE_END; }
+{WHITE}{DESTINATION_START}{WHITE}         { SAVE_POS; return TK_DESTINATION_START; }
+{WHITE}{DESTINATION_END}{WHITE}           { SAVE_POS; return TK_DESTINATION_END; }
+{WHITE}{SERVICE_START}{WHITE}             { SAVE_POS; return TK_SERVICE_START; }
+{WHITE}{SERVICE_END}{WHITE}               { SAVE_POS; return TK_SERVICE_END; }
+
+{WHITE}{COMMENT}{WHITE}                   { SAVE_POS; } /* swallow comment */
+
+0[xX][0-9a-fA-F]+           { SAVE_POS; yylval = strdup(yytext); return TK_HEX_NUMBER; }
+[0-9]+                      { SAVE_POS; yylval = strdup(yytext); return TK_DEC_NUMBER; }
+[ \t\n]+                    { SAVE_POS; yylval = strdup(yytext); return TK_WHITE; }
+-                           { SAVE_POS; yylval = strdup(yytext); return TK_DASH; }
+:                           { SAVE_POS; yylval = strdup(yytext); return TK_DOTDOT; }
+,                           { SAVE_POS; yylval = strdup(yytext); return TK_COMMA; }
+.                           { SAVE_POS; yylval = strdup(yytext); return TK_TEXT;}
+
+%%
+
+static void save_pos()
+{
+    int i;
+    for (i = 0; i < yyleng; i++)
+    {
+        if (yytext[i] == '\n')
+        {
+            line_num ++;
+            column_num = 1;
+        }
+        else
+            column_num ++;
+    }
+}
+
-- 
1.4.4.1.GIT






More information about the general mailing list