Kea 3.3.3
token.h
Go to the documentation of this file.
1// Copyright (C) 2015-2026 Internet Systems Consortium, Inc. ("ISC")
2//
3// This Source Code Form is subject to the terms of the Mozilla Public
4// License, v. 2.0. If a copy of the MPL was not distributed with this
5// file, You can obtain one at http://mozilla.org/MPL/2.0/.
6
7#ifndef TOKEN_H
8#define TOKEN_H
9
10#include <dhcp/pkt.h>
12
13#include <cstdint>
14#include <regex>
15#include <stack>
16
17namespace isc {
18namespace dhcp {
19
20class Token;
21
23typedef boost::shared_ptr<Token> TokenPtr;
24
31typedef std::vector<TokenPtr> Expression;
32
33typedef boost::shared_ptr<Expression> ExpressionPtr;
34
36typedef std::stack<std::string> ValueStack;
37
40class EvalBadStack : public Exception {
41public:
42 EvalBadStack(const char* file, size_t line, const char* what) :
43 isc::Exception(file, line, what) { }
44};
45
48class EvalTypeError : public Exception {
49public:
50 EvalTypeError(const char* file, size_t line, const char* what) :
51 isc::Exception(file, line, what) { }
52};
53
55class EvalBadLabel : public Exception {
56public:
57 EvalBadLabel(const char* file, size_t line, const char* what) :
58 isc::Exception(file, line, what) { }
59};
60
72class Token {
73public:
74
88 virtual unsigned evaluate(Pkt& pkt, ValueStack& values) = 0;
89
91 virtual ~Token() {}
92
96 virtual unsigned getLabel() const {
97 return (0U);
98 }
99
107 static inline bool toBool(std::string value) {
108 if (value == "true") {
109 return (true);
110 } else if (value == "false") {
111 return (false);
112 } else {
113 isc_throw(EvalTypeError, "Incorrect boolean. Expected exactly "
114 "\"false\" or \"true\", got \"" << value << "\"");
115 }
116 }
117};
118
126
131class TokenString : public Token {
132public:
136 TokenString(const std::string& str) : value_(str) {}
137
143 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
144
145protected:
146 std::string value_;
147};
148
153class TokenHexString : public Token {
154public:
160 TokenHexString(const std::string& str);
161
169 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
170
171protected:
172 std::string value_;
173};
174
179class TokenLowerCase : public Token {
180public:
183
190 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
191};
192
197class TokenUpperCase : public Token {
198public:
201
208 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
209};
210
217class TokenInteger : public TokenString {
218public:
225 TokenInteger(const uint32_t value);
226
232 uint32_t getInteger() const {
233 return (int_value_);
234 }
235
236protected:
237 uint32_t int_value_;
238};
239
244class TokenIpAddress : public Token {
245public:
249 TokenIpAddress(const std::string& addr);
250
257 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
258
259protected:
261 std::string value_;
262};
263
269public:
272
279 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
280};
281
286class TokenInt8ToText : public Token {
287public:
290
298 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
299};
300
305class TokenInt16ToText : public Token {
306public:
309
317 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
318};
319
324class TokenInt32ToText : public Token {
325public:
328
336 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
337};
338
343class TokenUInt8ToText : public Token {
344public:
347
355 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
356};
357
362class TokenUInt16ToText : public Token {
363public:
366
374 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
375};
376
381class TokenUInt32ToText : public Token {
382public:
385
393 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
394};
395
409class TokenOption : public Token {
410public:
411
424
432 TokenOption(const std::vector<uint16_t>& option_codes, const RepresentationType& rep_type)
433 : option_path_(option_codes), representation_type_(rep_type) {}
434
444 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
445
452 std::vector<uint16_t> getOptions() const {
453 return (option_path_);
454 }
455
465
466protected:
475 virtual OptionPtr getOption(Pkt& pkt);
476
483 virtual std::string pushFailure(ValueStack& values);
484
486 std::vector<uint16_t> option_path_;
487
490};
491
504public:
505
510 TokenRelay4Option(const std::vector<uint16_t>& option_codes,
511 const RepresentationType& rep_type)
512 : TokenOption(option_codes, rep_type) {}
513
514protected:
518 virtual OptionPtr getOption(Pkt& pkt);
519};
520
541public:
548 TokenRelay6Option(const int8_t nest_level,
549 const std::vector<uint16_t>& option_codes,
550 const RepresentationType& rep_type)
551 : TokenOption(option_codes, rep_type), nest_level_(nest_level) {}
552
560 int8_t getNest() const {
561 return (nest_level_);
562 }
563
564protected:
568 virtual OptionPtr getOption(Pkt& pkt);
569
572};
573
584class TokenPkt : public Token {
585public:
586
588 enum MetadataType : uint16_t {
593 };
594
596 TokenPkt(const MetadataType type) : type_(type) {}
597
606 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
607
613 return (type_);
614 }
615
616private:
618 MetadataType type_;
619};
620
634class TokenPkt4 : public Token {
635public:
636
649
652 : type_(type) {}
653
664 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
665
671 return (type_);
672 }
673
674private:
676 FieldType type_;
677};
678
689class TokenPkt6 : public Token {
690public:
692 enum FieldType : uint16_t {
695 };
696
699 : type_(type) {}
700
711 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
712
718 return (type_);
719 }
720
721private:
723 FieldType type_;
724};
725
741class TokenRelay6Field : public Token {
742public:
743
745 enum FieldType : uint16_t {
748 };
749
755 TokenRelay6Field(const int8_t nest_level, const FieldType type)
756 : nest_level_(nest_level), type_(type) {}
757
766 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
767
775 int8_t getNest() const {
776 return (nest_level_);
777 }
778
786 return (type_);
787 }
788
789protected:
791 int8_t nest_level_;
793};
794
799class TokenEqual : public Token {
800public:
803
817 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
818};
819
825class TokenSubstring : public Token {
826public:
829
875 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
876};
877
878class TokenSplit : public Token {
879public:
882
920 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
921};
922
928class TokenConcat : public Token {
929public:
932
945 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
946};
947
957class TokenIfElse : public Token {
958public:
961
977 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
978};
979
988class TokenToHexString : public Token {
989public:
992
1017 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1018};
1019
1024class TokenNot : public Token {
1025public:
1028
1043 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1044};
1045
1051class TokenAnd : public Token {
1052public:
1055
1071 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1072};
1073
1079class TokenOr : public Token {
1080public:
1083
1099 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1100};
1101
1105class TokenMember : public Token {
1106public:
1110 TokenMember(const std::string& client_class)
1111 : client_class_(client_class) {
1112 }
1113
1120 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1121
1129 return (client_class_);
1130 }
1131
1132protected:
1135};
1136
1151class TokenVendor : public TokenOption {
1152public:
1153
1161
1167 TokenVendor(Option::Universe u, uint32_t vendor_id, FieldType field);
1168
1180 TokenVendor(Option::Universe u, uint32_t vendor_id, RepresentationType repr,
1181 const std::vector<uint16_t>& option_codes = {});
1182
1188 uint32_t getVendorId() const;
1189
1195 FieldType getField() const;
1196
1220 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1221
1222protected:
1231 virtual OptionPtr getOption(Pkt& pkt);
1232
1238
1243 uint32_t vendor_id_;
1244
1247};
1248
1267public:
1268
1274 TokenVendorClass(Option::Universe u, uint32_t vendor_id, RepresentationType repr);
1275
1282 TokenVendorClass(Option::Universe u, uint32_t vendor_id, FieldType field,
1283 uint16_t index = 0);
1284
1289 uint16_t getDataIndex() const;
1290
1291protected:
1292
1317 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1318
1320 uint16_t index_;
1321};
1322
1326class TokenMatch : public Token {
1327public:
1332 TokenMatch(const std::string& reg_exp);
1333
1344 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1345
1352 const std::string& getRegExp() const {
1353 return (reg_exp_str_);
1354 }
1355
1356private:
1358 std::string reg_exp_str_;
1359
1361 std::regex reg_exp_;
1362};
1363
1368class TokenLabel : public Token {
1369public:
1374 TokenLabel(const unsigned label);
1375
1379 virtual unsigned getLabel() const {
1380 return (label_);
1381 }
1382
1388 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1389
1390protected:
1391 unsigned label_;
1392};
1393
1398class TokenBranch : public Token {
1399public:
1404 TokenBranch(const unsigned target);
1405
1409 unsigned getTarget() const {
1410 return (target_);
1411 }
1412
1418 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1419
1420protected:
1421 unsigned target_;
1422};
1423
1429public:
1434 TokenPopOrBranchTrue(const unsigned target);
1435
1445 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1446};
1447
1453public:
1458 TokenPopOrBranchFalse(const unsigned target);
1459
1469 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1470};
1471
1479public:
1484 TokenPopAndBranchFalse(const unsigned target);
1485
1495 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1496};
1497
1498} // end of isc::dhcp namespace
1499} // end of isc namespace
1500#endif
boost::shared_ptr< Option > OptionPtr
Definition option.h:38
Exception(const char *file, size_t line, const char *what)
Constructor for a given type for exceptions with file name and file line number.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
EvalBadLabel(const char *file, size_t line, const char *what)
Definition token.h:57
EvalBadStack(const char *file, size_t line, const char *what)
Definition token.h:42
EvalTypeError is thrown when a value on the stack has a content with an unexpected type.
Definition token.h:48
EvalTypeError(const char *file, size_t line, const char *what)
Definition token.h:50
Universe
defines option universe DHCPv4 or DHCPv6
Definition option.h:91
Base class for classes representing DHCP messages.
Definition pkt.h:162
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Logical and.
Definition token.cc:1126
TokenAnd()
Constructor (does nothing).
Definition token.h:1054
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Only return the target.
Definition token.cc:1505
TokenBranch(const unsigned target)
Constructor.
Definition token.cc:1498
unsigned getTarget() const
Returns branchtarget.
Definition token.h:1409
TokenConcat()
Constructor (does nothing).
Definition token.h:931
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Concatenate two values.
Definition token.cc:1002
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Compare two values.
Definition token.cc:787
TokenEqual()
Constructor (does nothing).
Definition token.h:802
std::string value_
Constant value.
Definition token.h:172
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the constant string on the stack after decoding or an empty string if...
Definition token.cc:83
TokenHexString(const std::string &str)
Value is set during token construction.
Definition token.cc:54
TokenIfElse()
Constructor (does nothing).
Definition token.h:960
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Alternative.
Definition token.cc:1027
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the string on the stack after decoding).
Definition token.cc:235
TokenInt16ToText()
Constructor (does nothing).
Definition token.h:308
TokenInt32ToText()
Constructor (does nothing).
Definition token.h:327
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the string on the stack after decoding).
Definition token.cc:268
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the string on the stack after decoding).
Definition token.cc:203
TokenInt8ToText()
Constructor (does nothing).
Definition token.h:289
TokenInteger(const uint32_t value)
Integer value set during construction.
Definition token.cc:1446
uint32_t getInteger() const
Returns integer value.
Definition token.h:232
uint32_t int_value_
value as integer (stored for testing only)
Definition token.h:237
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the string on the stack after decoding).
Definition token.cc:166
TokenIpAddressToText()
Constructor (does nothing).
Definition token.h:271
std::string value_
< Constant value (empty string if the IP address cannot be converted)
Definition token.h:261
TokenIpAddress(const std::string &addr)
Value is set during token construction.
Definition token.cc:137
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the constant string on the stack after decoding).
Definition token.cc:153
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Does nothing.
Definition token.cc:1494
virtual unsigned getLabel() const
Returns label.
Definition token.h:1379
TokenLabel(const unsigned label)
Constructor.
Definition token.cc:1487
TokenLowerCase()
Constructor (does nothing).
Definition token.h:182
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the evaluated string expression converted to lower case on the stack)...
Definition token.cc:96
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Match regular expression.
Definition token.cc:1460
const std::string & getRegExp() const
Returns regular expression.
Definition token.h:1352
TokenMatch(const std::string &reg_exp)
Constructor.
Definition token.cc:1450
const ClientClass & getClientClass() const
Returns client class name.
Definition token.h:1128
ClientClass client_class_
The client class name.
Definition token.h:1134
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (check if client_class_ was added to packet client classes).
Definition token.cc:1186
TokenMember(const std::string &client_class)
Constructor.
Definition token.h:1110
TokenNot()
Constructor (does nothing).
Definition token.h:1027
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Logical negation.
Definition token.cc:1101
RepresentationType getRepresentation() const
Returns representation-type.
Definition token.h:462
virtual OptionPtr getOption(Pkt &pkt)
Attempts to retrieve an option.
Definition token.cc:399
RepresentationType representation_type_
The representation type.
Definition token.h:489
std::vector< uint16_t > getOptions() const
Returns option-code.
Definition token.h:452
std::vector< uint16_t > option_path_
The options hierarchy.
Definition token.h:486
TokenOption(const std::vector< uint16_t > &option_codes, const RepresentationType &rep_type)
Constructor that takes an option code as a parameter.
Definition token.h:432
RepresentationType
Token representation type.
Definition token.h:419
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Evaluates the values of the option.
Definition token.cc:418
virtual std::string pushFailure(ValueStack &values)
Auxiliary method that puts string representing a failure.
Definition token.cc:472
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Logical or.
Definition token.cc:1156
TokenOr()
Constructor (does nothing).
Definition token.h:1082
FieldType getType()
Returns field type.
Definition token.h:670
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Gets a value from the specified packet.
Definition token.cc:598
FieldType
enum value that determines the field.
Definition token.h:638
@ CIADDR
ciaddr (IPv4 address)
Definition token.h:641
@ HLEN
hlen (hardware address length)
Definition token.h:644
@ HTYPE
htype (hardware address type)
Definition token.h:645
@ GIADDR
giaddr (IPv4 address)
Definition token.h:640
@ CHADDR
chaddr field (up to 16 bytes link-layer address)
Definition token.h:639
@ YIADDR
yiaddr (IPv4 address)
Definition token.h:642
@ SIADDR
siaddr (IPv4 address)
Definition token.h:643
@ TRANSID
transaction-id (xid)
Definition token.h:647
@ MSGTYPE
message type (not really a field, content of option 53)
Definition token.h:646
TokenPkt4(const FieldType type)
Constructor (does nothing).
Definition token.h:651
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Gets a value of the specified packet.
Definition token.cc:679
TokenPkt6(const FieldType type)
Constructor (does nothing).
Definition token.h:698
FieldType
enum value that determines the field.
Definition token.h:692
@ TRANSID
transaction id (integer but manipulated as a string)
Definition token.h:694
@ MSGTYPE
msg type
Definition token.h:693
FieldType getType()
Returns field type.
Definition token.h:717
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Gets a value from the specified packet.
Definition token.cc:545
MetadataType getType()
Returns metadata type.
Definition token.h:612
MetadataType
enum value that determines the field.
Definition token.h:588
@ LEN
length (4 octets)
Definition token.h:592
@ DST
destination (IP address)
Definition token.h:591
@ IFACE
interface name (string)
Definition token.h:589
@ SRC
source (IP address)
Definition token.h:590
TokenPkt(const MetadataType type)
Constructor (does nothing).
Definition token.h:596
TokenPopAndBranchFalse(const unsigned target)
Constructor.
Definition token.cc:1557
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Pops the top of stack which must be "false" or "true".
Definition token.cc:1562
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Looks at the top of stack which must be "false" or "true".
Definition token.cc:1539
TokenPopOrBranchFalse(const unsigned target)
Constructor.
Definition token.cc:1534
TokenPopOrBranchTrue(const unsigned target)
Constructor.
Definition token.cc:1511
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Looks at the top of stack which must be "false" or "true".
Definition token.cc:1516
virtual OptionPtr getOption(Pkt &pkt)
Attempts to obtain specified sub-option of option 82 from the packet.
Definition token.cc:482
TokenRelay4Option(const std::vector< uint16_t > &option_codes, const RepresentationType &rep_type)
Constructor for extracting sub-option from RAI (option 82).
Definition token.h:510
FieldType type_
field to get
Definition token.h:792
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Extracts the specified field from the requested relay.
Definition token.cc:721
int8_t nest_level_
Specifies field of the DHCPv6 relay option to get.
Definition token.h:791
FieldType getType()
Returns field type.
Definition token.h:785
TokenRelay6Field(const int8_t nest_level, const FieldType type)
Constructor that takes a nesting level and field type as parameters.
Definition token.h:755
int8_t getNest() const
Returns nest-level.
Definition token.h:775
FieldType
enum value that determines the field.
Definition token.h:745
@ LINKADDR
Link address field (IPv6 address).
Definition token.h:747
@ PEERADDR
Peer address field (IPv6 address).
Definition token.h:746
TokenRelay6Option(const int8_t nest_level, const std::vector< uint16_t > &option_codes, const RepresentationType &rep_type)
Constructor that takes a nesting level and an option code as parameters.
Definition token.h:548
int8_t nest_level_
The nesting level of the relay block to use.
Definition token.h:571
int8_t getNest() const
Returns nest-level.
Definition token.h:560
virtual OptionPtr getOption(Pkt &pkt)
Attempts to obtain specified option from the specified relay block.
Definition token.cc:500
TokenSplit()
Constructor (does nothing).
Definition token.h:881
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Extract a field from a delimited string.
Definition token.cc:914
std::string value_
Constant value.
Definition token.h:146
TokenString(const std::string &str)
Value is set during token construction.
Definition token.h:136
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the constant string on the stack).
Definition token.cc:42
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Extract a substring from a string.
Definition token.cc:814
TokenSubstring()
Constructor (does nothing).
Definition token.h:828
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Convert a binary value to its hexadecimal string representation.
Definition token.cc:1066
TokenToHexString()
Constructor (does nothing).
Definition token.h:991
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the string on the stack after decoding).
Definition token.cc:333
TokenUInt16ToText()
Constructor (does nothing).
Definition token.h:365
TokenUInt32ToText()
Constructor (does nothing).
Definition token.h:384
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the string on the stack after decoding).
Definition token.cc:366
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the string on the stack after decoding).
Definition token.cc:301
TokenUInt8ToText()
Constructor (does nothing).
Definition token.h:346
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Token evaluation (puts value of the evaluated string expression converted to upper case on the stack)...
Definition token.cc:117
TokenUpperCase()
Constructor (does nothing).
Definition token.h:200
TokenVendorClass(Option::Universe u, uint32_t vendor_id, RepresentationType repr)
This constructor is used to access fields.
Definition token.cc:1329
uint16_t getDataIndex() const
Returns data index.
Definition token.cc:1341
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
This is a method for evaluating a packet.
Definition token.cc:1346
uint16_t index_
Data chunk index.
Definition token.h:1320
Option::Universe universe_
Universe (V4 or V6).
Definition token.h:1237
uint32_t vendor_id_
Enterprise-id value.
Definition token.h:1243
FieldType field_
Specifies which field should be accessed.
Definition token.h:1246
uint32_t getVendorId() const
Returns enterprise-id.
Definition token.cc:1217
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
This is a method for evaluating a packet.
Definition token.cc:1227
TokenVendor(Option::Universe u, uint32_t vendor_id, FieldType field)
Constructor used for accessing a field.
Definition token.cc:1208
virtual OptionPtr getOption(Pkt &pkt)
Attempts to get a suboption.
Definition token.cc:1301
FieldType
Specifies a field of the vendor option.
Definition token.h:1155
@ DATA
data chunk, used in derived vendor-class only
Definition token.h:1159
@ EXISTS
vendor[123].exists
Definition token.h:1158
@ ENTERPRISE_ID
enterprise-id field (vendor-info, vendor-class)
Definition token.h:1157
@ SUBOPTION
If this token fetches a suboption, not a field.
Definition token.h:1156
FieldType getField() const
Returns field.
Definition token.cc:1222
Base class for all tokens.
Definition token.h:72
virtual unsigned getLabel() const
Return the label of this token.
Definition token.h:96
virtual ~Token()
Virtual destructor.
Definition token.h:91
static bool toBool(std::string value)
Coverts a (string) value to a boolean.
Definition token.h:107
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)=0
This is a generic method for evaluating a packet.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
std::string ClientClass
Defines a single class name.
Definition classify.h:45
boost::shared_ptr< Token > TokenPtr
Pointer to a single Token.
Definition token.h:23
boost::shared_ptr< Expression > ExpressionPtr
Definition token.h:33
std::vector< TokenPtr > Expression
This is a structure that holds an expression converted to RPN.
Definition token.h:31
boost::shared_ptr< Option > OptionPtr
Definition option.h:38
std::stack< std::string > ValueStack
Evaluated values are stored as a stack of strings.
Definition token.h:36
Defines the logger used by the top-level component of kea-lfc.