Kea 3.3.1
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
11#include <dhcp/pkt.h>
12#include <regex>
13#include <stack>
14
15namespace isc {
16namespace dhcp {
17
18class Token;
19
21typedef boost::shared_ptr<Token> TokenPtr;
22
29typedef std::vector<TokenPtr> Expression;
30
31typedef boost::shared_ptr<Expression> ExpressionPtr;
32
34typedef std::stack<std::string> ValueStack;
35
38class EvalBadStack : public Exception {
39public:
40 EvalBadStack(const char* file, size_t line, const char* what) :
41 isc::Exception(file, line, what) { }
42};
43
46class EvalTypeError : public Exception {
47public:
48 EvalTypeError(const char* file, size_t line, const char* what) :
49 isc::Exception(file, line, what) { }
50};
51
53class EvalBadLabel : public Exception {
54public:
55 EvalBadLabel(const char* file, size_t line, const char* what) :
56 isc::Exception(file, line, what) { }
57};
58
70class Token {
71public:
72
86 virtual unsigned evaluate(Pkt& pkt, ValueStack& values) = 0;
87
89 virtual ~Token() {}
90
94 virtual unsigned getLabel() const {
95 return (0U);
96 }
97
105 static inline bool toBool(std::string value) {
106 if (value == "true") {
107 return (true);
108 } else if (value == "false") {
109 return (false);
110 } else {
111 isc_throw(EvalTypeError, "Incorrect boolean. Expected exactly "
112 "\"false\" or \"true\", got \"" << value << "\"");
113 }
114 }
115};
116
124
129class TokenString : public Token {
130public:
134 TokenString(const std::string& str) : value_(str) {}
135
141 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
142
143protected:
144 std::string value_;
145};
146
151class TokenHexString : public Token {
152public:
158 TokenHexString(const std::string& str);
159
167 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
168
169protected:
170 std::string value_;
171};
172
177class TokenLowerCase : public Token {
178public:
181
188 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
189};
190
195class TokenUpperCase : public Token {
196public:
199
206 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
207};
208
215class TokenInteger : public TokenString {
216public:
223 TokenInteger(const uint32_t value);
224
230 uint32_t getInteger() const {
231 return (int_value_);
232 }
233
234protected:
235 uint32_t int_value_;
236};
237
242class TokenIpAddress : public Token {
243public:
247 TokenIpAddress(const std::string& addr);
248
255 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
256
257protected:
259 std::string value_;
260};
261
267public:
270
277 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
278};
279
284class TokenInt8ToText : public Token {
285public:
288
296 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
297};
298
303class TokenInt16ToText : public Token {
304public:
307
315 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
316};
317
322class TokenInt32ToText : public Token {
323public:
326
334 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
335};
336
341class TokenUInt8ToText : public Token {
342public:
345
353 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
354};
355
360class TokenUInt16ToText : public Token {
361public:
364
372 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
373};
374
379class TokenUInt32ToText : public Token {
380public:
383
391 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
392};
393
407class TokenOption : public Token {
408public:
409
422
430 TokenOption(const std::vector<uint16_t>& option_codes, const RepresentationType& rep_type)
431 : option_path_(option_codes), representation_type_(rep_type) {}
432
442 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
443
450 std::vector<uint16_t> getOptions() const {
451 return (option_path_);
452 }
453
463
464protected:
473 virtual OptionPtr getOption(Pkt& pkt);
474
481 virtual std::string pushFailure(ValueStack& values);
482
484 std::vector<uint16_t> option_path_;
485
488};
489
502public:
503
508 TokenRelay4Option(const std::vector<uint16_t>& option_codes,
509 const RepresentationType& rep_type)
510 : TokenOption(option_codes, rep_type) {}
511
512protected:
516 virtual OptionPtr getOption(Pkt& pkt);
517};
518
539public:
546 TokenRelay6Option(const int8_t nest_level,
547 const std::vector<uint16_t>& option_codes,
548 const RepresentationType& rep_type)
549 : TokenOption(option_codes, rep_type), nest_level_(nest_level) {}
550
558 int8_t getNest() const {
559 return (nest_level_);
560 }
561
562protected:
566 virtual OptionPtr getOption(Pkt& pkt);
567
570};
571
582class TokenPkt : public Token {
583public:
584
586 enum MetadataType : uint16_t {
591 };
592
594 TokenPkt(const MetadataType type) : type_(type) {}
595
604 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
605
611 return (type_);
612 }
613
614private:
616 MetadataType type_;
617};
618
632class TokenPkt4 : public Token {
633public:
634
647
650 : type_(type) {}
651
662 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
663
669 return (type_);
670 }
671
672private:
674 FieldType type_;
675};
676
687class TokenPkt6 : public Token {
688public:
690 enum FieldType : uint16_t {
693 };
694
697 : type_(type) {}
698
709 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
710
716 return (type_);
717 }
718
719private:
721 FieldType type_;
722};
723
739class TokenRelay6Field : public Token {
740public:
741
743 enum FieldType : uint16_t {
746 };
747
753 TokenRelay6Field(const int8_t nest_level, const FieldType type)
754 : nest_level_(nest_level), type_(type) {}
755
764 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
765
773 int8_t getNest() const {
774 return (nest_level_);
775 }
776
784 return (type_);
785 }
786
787protected:
789 int8_t nest_level_;
791};
792
797class TokenEqual : public Token {
798public:
801
815 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
816};
817
823class TokenSubstring : public Token {
824public:
827
873 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
874};
875
876class TokenSplit : public Token {
877public:
880
918 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
919};
920
926class TokenConcat : public Token {
927public:
930
943 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
944};
945
955class TokenIfElse : public Token {
956public:
959
975 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
976};
977
986class TokenToHexString : public Token {
987public:
990
1015 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1016};
1017
1022class TokenNot : public Token {
1023public:
1026
1041 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1042};
1043
1049class TokenAnd : public Token {
1050public:
1053
1069 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1070};
1071
1077class TokenOr : public Token {
1078public:
1081
1097 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1098};
1099
1103class TokenMember : public Token {
1104public:
1108 TokenMember(const std::string& client_class)
1109 : client_class_(client_class) {
1110 }
1111
1118 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1119
1127 return (client_class_);
1128 }
1129
1130protected:
1133};
1134
1149class TokenVendor : public TokenOption {
1150public:
1151
1159
1165 TokenVendor(Option::Universe u, uint32_t vendor_id, FieldType field);
1166
1178 TokenVendor(Option::Universe u, uint32_t vendor_id, RepresentationType repr,
1179 const std::vector<uint16_t>& option_codes = {});
1180
1186 uint32_t getVendorId() const;
1187
1193 FieldType getField() const;
1194
1218 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1219
1220protected:
1229 virtual OptionPtr getOption(Pkt& pkt);
1230
1236
1241 uint32_t vendor_id_;
1242
1245};
1246
1265public:
1266
1272 TokenVendorClass(Option::Universe u, uint32_t vendor_id, RepresentationType repr);
1273
1280 TokenVendorClass(Option::Universe u, uint32_t vendor_id, FieldType field,
1281 uint16_t index = 0);
1282
1287 uint16_t getDataIndex() const;
1288
1289protected:
1290
1315 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1316
1318 uint16_t index_;
1319};
1320
1324class TokenMatch : public Token {
1325public:
1330 TokenMatch(const std::string& reg_exp);
1331
1342 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1343
1350 const std::string& getRegExp() const {
1351 return (reg_exp_str_);
1352 }
1353
1354private:
1356 std::string reg_exp_str_;
1357
1359 std::regex reg_exp_;
1360};
1361
1366class TokenLabel : public Token {
1367public:
1372 TokenLabel(const unsigned label);
1373
1377 virtual unsigned getLabel() const {
1378 return (label_);
1379 }
1380
1386 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1387
1388protected:
1389 unsigned label_;
1390};
1391
1396class TokenBranch : public Token {
1397public:
1402 TokenBranch(const unsigned target);
1403
1407 unsigned getTarget() const {
1408 return (target_);
1409 }
1410
1416 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1417
1418protected:
1419 unsigned target_;
1420};
1421
1427public:
1432 TokenPopOrBranchTrue(const unsigned target);
1433
1443 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1444};
1445
1451public:
1456 TokenPopOrBranchFalse(const unsigned target);
1457
1467 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1468};
1469
1477public:
1482 TokenPopAndBranchFalse(const unsigned target);
1483
1493 virtual unsigned evaluate(Pkt& pkt, ValueStack& values);
1494};
1495
1496} // end of isc::dhcp namespace
1497} // end of isc namespace
1498#endif
boost::shared_ptr< Option > OptionPtr
Definition option.h:37
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:55
EvalBadStack(const char *file, size_t line, const char *what)
Definition token.h:40
EvalTypeError is thrown when a value on the stack has a content with an unexpected type.
Definition token.h:46
EvalTypeError(const char *file, size_t line, const char *what)
Definition token.h:48
Universe
defines option universe DHCPv4 or DHCPv6
Definition option.h:90
Base class for classes representing DHCP messages.
Definition pkt.h:161
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Logical and.
Definition token.cc:1126
TokenAnd()
Constructor (does nothing).
Definition token.h:1052
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:1407
TokenConcat()
Constructor (does nothing).
Definition token.h:929
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:800
std::string value_
Constant value.
Definition token.h:170
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:958
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:306
TokenInt32ToText()
Constructor (does nothing).
Definition token.h:325
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:287
TokenInteger(const uint32_t value)
Integer value set during construction.
Definition token.cc:1446
uint32_t getInteger() const
Returns integer value.
Definition token.h:230
uint32_t int_value_
value as integer (stored for testing only)
Definition token.h:235
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:269
std::string value_
< Constant value (empty string if the IP address cannot be converted)
Definition token.h:259
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:1377
TokenLabel(const unsigned label)
Constructor.
Definition token.cc:1487
TokenLowerCase()
Constructor (does nothing).
Definition token.h:180
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:1350
TokenMatch(const std::string &reg_exp)
Constructor.
Definition token.cc:1450
const ClientClass & getClientClass() const
Returns client class name.
Definition token.h:1126
ClientClass client_class_
The client class name.
Definition token.h:1132
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:1108
TokenNot()
Constructor (does nothing).
Definition token.h:1025
virtual unsigned evaluate(Pkt &pkt, ValueStack &values)
Logical negation.
Definition token.cc:1101
RepresentationType getRepresentation() const
Returns representation-type.
Definition token.h:460
virtual OptionPtr getOption(Pkt &pkt)
Attempts to retrieve an option.
Definition token.cc:399
RepresentationType representation_type_
The representation type.
Definition token.h:487
std::vector< uint16_t > getOptions() const
Returns option-code.
Definition token.h:450
std::vector< uint16_t > option_path_
The options hierarchy.
Definition token.h:484
RepresentationType
Token representation type.
Definition token.h:417
TokenOption(const std::vector< uint16_t > &option_codes, const RepresentationType &rep_type)
Constructor that takes an option code as a parameter.
Definition token.h:430
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:1080
FieldType getType()
Returns field type.
Definition token.h:668
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:636
@ CIADDR
ciaddr (IPv4 address)
Definition token.h:639
@ HLEN
hlen (hardware address length)
Definition token.h:642
@ HTYPE
htype (hardware address type)
Definition token.h:643
@ GIADDR
giaddr (IPv4 address)
Definition token.h:638
@ CHADDR
chaddr field (up to 16 bytes link-layer address)
Definition token.h:637
@ YIADDR
yiaddr (IPv4 address)
Definition token.h:640
@ SIADDR
siaddr (IPv4 address)
Definition token.h:641
@ TRANSID
transaction-id (xid)
Definition token.h:645
@ MSGTYPE
message type (not really a field, content of option 53)
Definition token.h:644
TokenPkt4(const FieldType type)
Constructor (does nothing).
Definition token.h:649
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:696
FieldType
enum value that determines the field.
Definition token.h:690
@ TRANSID
transaction id (integer but manipulated as a string)
Definition token.h:692
@ MSGTYPE
msg type
Definition token.h:691
FieldType getType()
Returns field type.
Definition token.h:715
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:610
MetadataType
enum value that determines the field.
Definition token.h:586
@ LEN
length (4 octets)
Definition token.h:590
@ DST
destination (IP address)
Definition token.h:589
@ IFACE
interface name (string)
Definition token.h:587
@ SRC
source (IP address)
Definition token.h:588
TokenPkt(const MetadataType type)
Constructor (does nothing).
Definition token.h:594
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:508
FieldType type_
field to get
Definition token.h:790
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:789
FieldType getType()
Returns field type.
Definition token.h:783
TokenRelay6Field(const int8_t nest_level, const FieldType type)
Constructor that takes a nesting level and field type as parameters.
Definition token.h:753
int8_t getNest() const
Returns nest-level.
Definition token.h:773
FieldType
enum value that determines the field.
Definition token.h:743
@ LINKADDR
Link address field (IPv6 address).
Definition token.h:745
@ PEERADDR
Peer address field (IPv6 address).
Definition token.h:744
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:546
int8_t nest_level_
The nesting level of the relay block to use.
Definition token.h:569
int8_t getNest() const
Returns nest-level.
Definition token.h:558
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:879
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:144
TokenString(const std::string &str)
Value is set during token construction.
Definition token.h:134
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:826
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:989
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:363
TokenUInt32ToText()
Constructor (does nothing).
Definition token.h:382
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:344
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:198
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:1318
Option::Universe universe_
Universe (V4 or V6).
Definition token.h:1235
uint32_t vendor_id_
Enterprise-id value.
Definition token.h:1241
FieldType field_
Specifies which field should be accessed.
Definition token.h:1244
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:1153
@ DATA
data chunk, used in derived vendor-class only
Definition token.h:1157
@ EXISTS
vendor[123].exists
Definition token.h:1156
@ ENTERPRISE_ID
enterprise-id field (vendor-info, vendor-class)
Definition token.h:1155
@ SUBOPTION
If this token fetches a suboption, not a field.
Definition token.h:1154
FieldType getField() const
Returns field.
Definition token.cc:1222
Base class for all tokens.
Definition token.h:70
virtual unsigned getLabel() const
Return the label of this token.
Definition token.h:94
virtual ~Token()
Virtual destructor.
Definition token.h:89
static bool toBool(std::string value)
Coverts a (string) value to a boolean.
Definition token.h:105
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:21
boost::shared_ptr< Expression > ExpressionPtr
Definition token.h:31
std::vector< TokenPtr > Expression
This is a structure that holds an expression converted to RPN.
Definition token.h:29
boost::shared_ptr< Option > OptionPtr
Definition option.h:37
std::stack< std::string > ValueStack
Evaluated values are stored as a stack of strings.
Definition token.h:34
Defines the logger used by the top-level component of kea-lfc.