]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[5374] Updated flex/bison
authorFrancis Dupont <fdupont@isc.org>
Fri, 24 Nov 2017 08:32:35 +0000 (09:32 +0100)
committerFrancis Dupont <fdupont@isc.org>
Fri, 24 Nov 2017 08:32:35 +0000 (09:32 +0100)
src/lib/eval/lexer.ll
src/lib/eval/parser.yy

index b7447ea2bc9d86ded443b281d5ea2ffdb06ca251..d990b013ebeee470e860624f367599b22f180d32 100644 (file)
@@ -204,6 +204,7 @@ addr6 [0-9a-fA-F]*\:[0-9a-fA-F]*\:[0-9a-fA-F:.]*
 "not"          return isc::eval::EvalParser::make_NOT(loc);
 "and"          return isc::eval::EvalParser::make_AND(loc);
 "or"           return isc::eval::EvalParser::make_OR(loc);
+"member"       return isc::eval::EvalParser::make_MEMBER(loc);
 "."            return isc::eval::EvalParser::make_DOT(loc);
 "("            return isc::eval::EvalParser::make_LPAREN(loc);
 ")"            return isc::eval::EvalParser::make_RPAREN(loc);
index 96f8c52668a47c5ab716e60860a3371a9badc327..a201d5aaadba76c940a1ba6f218a715c346be13e 100644 (file)
@@ -47,6 +47,7 @@ using namespace isc::eval;
   OPTION "option"
   RELAY4 "relay4"
   RELAY6 "relay6"
+  MEMBER "member"
   PEERADDR "peeraddr"
   LINKADDR "linkaddr"
   LBRACKET "["
@@ -212,6 +213,21 @@ bool_expr : "(" bool_expr ")"
                   TokenPtr exist(new TokenVendor(ctx.getUniverse(), $3, TokenOption::EXISTS, $8));
                   ctx.expression.push_back(exist);
                }
+          | MEMBER "(" STRING ")"
+              {
+                  // Expression member('foo')
+                  //
+                  // This token will check if the packet is a member of
+                  // the specified client class.
+                  // To avoid loops at evaluation only already known and
+                  // built-in classes are allowed.
+                  std::string cc = $3;
+                  if (!ctx.isClientClassKnown(cc)) {
+                      error(@3, "Unknown client class '" + cc + "'");
+                  }
+                  TokenPtr member(new TokenMember(cc));
+                  ctx.expression.push_back(member)
+              }
           ;
 
 string_expr : STRING