Applied debian/patches/004_mac_address_range_fix.patch from
[rpld.git] / rpld_conf.lex
1 /*************************************************
2 *     rpld - an IBM style RIPL server            *
3 *************************************************/
4
5 /* Copyright (c) 1999,2000,2001 James McKenzie.
6  *                      All rights reserved
7  * Copyright (c) 1998,2000,2001 Christopher Lightfoot.
8  *                      All rights reserved
9  *
10  * By using this file, you agree to the terms and conditions set
11  * forth in the LICENCE file which can be found at the top level of
12  * the rpld distribution.
13  *
14  * IBM is a trademark of IBM corp.
15  *
16  */
17
18 /*
19  *  Lexer for RPLD conf files
20  *
21  *  $Log: rpld_conf.lex,v $
22  *  Revision 1.7  2001/11/01 15:23:59  root
23  *  #
24  *
25  *  Revision 1.6  2000/07/17 10:43:34  root
26  *  #
27  *
28  *  Revision 1.5  2000/07/16 14:05:28  root
29  *  #
30  *
31  *  Revision 1.4  2000/07/16 13:18:10  root
32  *  #
33  *
34  *  Revision 1.1  2000/07/16 13:16:33  root
35  *  #
36  *
37  *  Revision 1.3  1999/09/13 11:17:35  root
38  *  \#
39  *
40  *  Revision 1.2  1999/09/13 11:08:34  root
41  *  \#
42  *
43  *  Revision 1.1  1999/09/13 11:04:13  root
44  *  \#
45  *
46  *  Revision 1.10  1999/09/12 19:08:24  chris
47  *  Another attempt at C comments.
48  *
49  *  Revision 1.9  1999/09/12 17:38:45  chris
50  *  Implemented proper MAC reading.
51  *
52  *  Revision 1.8  1999/09/12 03:27:43  chris
53  *  Changes to enable error reporting in yacc grammar.
54  *
55  *  Revision 1.7  1999/09/11 19:30:26  chris
56  *  Fixed hex number support.
57  *
58  *  Revision 1.6  1999/09/11 19:25:06  chris
59  *  No major changes.
60  *
61  *  Revision 1.5  1999/09/11 19:24:23  chris
62  *  Removed support for C-style comments, inserted support for C++ ones. Comment support actually works now
63  *
64  *  Revision 1.4  1999/09/11 19:02:25  chris
65  *  Fixed bug in comment support.
66  *
67  *  Revision 1.3  1999/09/11 19:00:43  chris
68  *  Added support for comments.
69  *
70  *  Revision 1.2  1999/09/11 18:57:31  chris
71  *  Initial revision.
72  *
73  *  
74  */
75
76 %x      COMMENT
77
78 %{
79 static char rcsid[]="$Id: rpld_conf.lex,v 1.7 2001/11/01 15:23:59 root Exp $";
80
81 #include <stdio.h>
82 #include <string.h>
83 #include <stdlib.h>
84 #include "rpld_conf.tab.h"
85
86
87 // line number
88 int lineno = 1;
89
90 // function to convert hex digits to a MAC address
91 void strtomac(char *s, char *mac);
92
93 void strtomac(char *s, char *mac)
94 {
95         // mac address *must* be in form 00:11:22:33:44:55
96         int i;
97
98         for (i = 0; i < 6; i++) *(mac + i) = (unsigned char)strtol(s + i * 3, NULL, 16);
99 }
100
101
102 %}
103 ws      [ \t]+
104 nl      \n
105 hb      [0-9A-Fa-f][0-9A-Fa-f]
106
107 %%
108
109 {ws}                    ;
110 {nl}                    { lineno++; }
111
112 \/\/.*                  ;
113
114 "/*"                    BEGIN COMMENT;
115 <COMMENT>.      |
116 <COMMENT>\n             ;
117 <COMMENT>"*/"           BEGIN INITIAL;
118
119 [{]                     { return BLOCK_START; }
120
121 [}]                     { return BLOCK_END; }
122
123 {hb}:{hb}:{hb}:{hb}:{hb}:{hb}   {
124                                 strtomac(yytext, (yylval.mac_address));
125                                 return MACADDR;
126                         }
127
128 {hb}:{hb}:{hb}:{hb}:{hb}:{hb}\/[1-6]    {
129                                 strtomac(yytext, (yylval.pm.mac_address));
130                                 yylval.pm.mac_len = 6 - (yytext[18] - '0');
131                                 return MACADDR_PARTIAL;
132                         }
133
134 0x[0-9A-Fa-f]+ {
135                                 yylval.number = strtol(yytext + 2, NULL, 16);
136                                 return NUMBER;
137                         }
138
139 [0-9]+                  {
140                                 int i; i = strtol(yytext, NULL, 10);
141                                 yylval.number = i; return NUMBER;
142                         }
143
144 [A-Za-z\-_]+            { yylval.name = strdup(yytext); return NAME; }
145
146 \"[A-Za-z0-9.:/\-_ ]*\" { yylval.text = strdup(yytext + 1); *(yylval.text + strlen(yylval.text) - 1) = 0; return TEXT;}
147
148 .                       { return yytext[0]; }
149
150 %%
151
152
153 int yywrap()
154 {
155         return 1;
156 }
157