Kea: isc::dhcp::Parser6Context Class Reference

| Kea 3.0.3-git

isc::dhcp::Parser6Context Class Reference

Evaluation context, an interface to the expression evaluation. More...

`#include <parser_context.h>`

## Public Types
enum | ParserContext { NO_KEYWORD , CONFIG , DHCP6 , INTERFACES_CONFIG , SANITY_CHECKS , LEASE_DATABASE , HOSTS_DATABASE , DATABASE_ON_FAIL , MAC_SOURCES , HOST_RESERVATION_IDENTIFIERS , HOOKS_LIBRARIES , SUBNET6 , SHARED_NETWORK , OPTION_DEF , OPTION_DATA , CLIENT_CLASSES , EXPIRED_LEASES_PROCESSING , SERVER_ID , DUID_TYPE , CONTROL_SOCKET , CONTROL_SOCKET_TYPE , AUTHENTICATION , AUTH_TYPE , CLIENTS , HTTP_HEADERS , DHCP_QUEUE_CONTROL , DHCP_MULTI_THREADING , POOLS , PD_POOLS , RESERVATIONS , RELAY , LOGGERS , OUTPUT_OPTIONS , DHCP_DDNS , NCR_PROTOCOL , NCR_FORMAT , REPLACE_CLIENT_NAME , CONFIG_CONTROL , CONFIG_DATABASE , COMPATIBILITY , DDNS_CONFLICT_RESOLUTION_MODE }
| Defines syntactic contexts for lexical tie-ins. More...
enum | ParserType { PARSER_JSON , PARSER_DHCP6 , SUBPARSER_DHCP6 , PARSER_INTERFACES , PARSER_SUBNET6 , PARSER_POOL6 , PARSER_PD_POOL , PARSER_HOST_RESERVATION , PARSER_OPTION_DEFS , PARSER_OPTION_DEF , PARSER_OPTION_DATA , PARSER_HOOKS_LIBRARY , PARSER_DHCP_DDNS , PARSER_CONFIG_CONTROL }
| Defines currently supported scopes. More...

## Public Member Functions
| Parser6Context ()
| Default constructor.
virtual | ~Parser6Context ()
| destructor
const std::string | contextName ()
| Get the syntactic context name.
void | enter (const ParserContext &ctx)
| Enter a new syntactic context.
void | error (const isc::dhcp::location &loc, const std::string &what, size_t pos=0)
| Error handler.
void | error (const std::string &what)
| Error handler.
void | includeFile (const std::string &filename)
| Divert input to an include file.
void | leave ()
| Leave a syntactic context.
isc::data::Element::Position | loc2pos (isc::dhcp::location &loc)
| Converts bison's position to one understandable by isc::data::Element.
isc::data::ElementPtr | parseFile (const std::string &filename, ParserType parser_type)
| Run the parser on the file specified.
isc::data::ElementPtr | parseString (const std::string &str, ParserType parser_type)
| Run the parser on the string specified.
void | require (const std::string &name, isc::data::Element::Position open_loc, isc::data::Element::Position close_loc)
| Check if a required parameter is present.
void | scanEnd ()
| Method called after the last tokens are scanned.
void | scanFileBegin (FILE *f, const std::string &filename, ParserType type)
| Method called before scanning starts on a file.
void | scanStringBegin (const std::string &str, ParserType type)
| Method called before scanning starts on a string.
void | unique (const std::string &name, isc::data::Element::Position loc)
| Check if a parameter is already present.
void | warnAboutExtraCommas (const isc::dhcp::location &loc)
| Warning for extra commas.
void | warning (const isc::dhcp::location &loc, const std::string &what)
| Warning handler.

## Static Public Member Functions
static void | fatal (const std::string &what)
| Fatal error handler.

## Public Attributes
ParserContext | ctx_
| Current syntactic context.
std::string | file_
| File name.
std::vector< std::string > | files_
| File name stack.
isc::dhcp::location | loc_
| Location of the current token.
std::vector< isc::dhcp::location > | locs_
| Location stack.
FILE * | sfile_
| sFile (aka FILE)
std::vector< FILE * > | sfiles_
| sFile (aka FILE) stack
std::vector< isc::data::ElementPtr > | stack_
| JSON elements being parsed.
std::vector< struct yy_buffer_state * > | states_
| Lexer state stack.

## Detailed Description

Evaluation context, an interface to the expression evaluation.

Definition at line 35 of file dhcp6/parser_context.h.

## Member Enumeration Documentation

## ◆ ParserContext

enum isc::dhcp::Parser6Context::ParserContext

Defines syntactic contexts for lexical tie-ins.

Enumerator
NO_KEYWORD | This one is used in pure JSON mode. Used while parsing top level (that contains Dhcp6)
CONFIG | Used while parsing content of Dhcp6.
DHCP6 |
INTERFACES_CONFIG | Used while parsing Dhcp6/interfaces structures.
SANITY_CHECKS | Sanity checks.
LEASE_DATABASE | Used while parsing Dhcp6/lease-database structures.
HOSTS_DATABASE | Used while parsing Dhcp6/hosts-database[s] structures.
DATABASE_ON_FAIL | Used while parsing Dhcp6/*-database/on-fail.
MAC_SOURCES | Used while parsing Dhcp6/mac-sources structures.
HOST_RESERVATION_IDENTIFIERS | Used while parsing Dhcp6/host-reservation-identifiers.
HOOKS_LIBRARIES | Used while parsing Dhcp6/hooks-libraries.
SUBNET6 | Used while parsing Dhcp6/Subnet6 structures.
SHARED_NETWORK | Used while parsing shared-networks structures.
OPTION_DEF | Used while parsing Dhcp6/option-def structures.
OPTION_DATA | Used while parsing Dhcp6/option-data, Dhcp6/subnet6/option-data or anywhere option-data is present (client classes, host reservations and possibly others).
CLIENT_CLASSES | Used while parsing Dhcp6/client-classes structures.
EXPIRED_LEASES_PROCESSING | Used while parsing Dhcp6/expired-leases-processing.
SERVER_ID | Used while parsing Dhcp6/server-id structures.
DUID_TYPE | Used while parsing Dhcp6/server-id/type structures.
CONTROL_SOCKET | Used while parsing Dhcp6/control-socket structures.
CONTROL_SOCKET_TYPE | Used while parsing Dhcp6/control-socket/socket-type structures.
AUTHENTICATION | Used while parsing Dhcp6/control-socket/authentication structures.
AUTH_TYPE | Used while parsing Dhcp6/control-socket/authentication/type structures.
CLIENTS | Used while parsing Dhcp6/control-socket/authentication/clients structures. Used while parsing Dhcp6/control-socket/http-headers structures.
HTTP_HEADERS |
DHCP_QUEUE_CONTROL | Used while parsing Dhcp6/dhcp-queue-control structures.
DHCP_MULTI_THREADING | Used while parsing Dhcp6/multi-threading structures.
POOLS | Used while parsing Dhcp6/subnet6/pools structures.
PD_POOLS | Used while parsing Dhcp6/subnet6/pd-pools structures.
RESERVATIONS | Used while parsing Dhcp6/reservations structures.
RELAY | Used while parsing Dhcp6/subnet6/relay structures.
LOGGERS | Used while parsing Dhcp6/loggers structures.
OUTPUT_OPTIONS | Used while parsing Dhcp6/loggers/output-options structures.
DHCP_DDNS | Used while parsing Dhcp6/dhcp-ddns.
NCR_PROTOCOL | Used while parsing Dhcp6/dhcp-ddns/ncr-protocol.
NCR_FORMAT | Used while parsing Dhcp6/dhcp-ddns/ncr-format.
REPLACE_CLIENT_NAME | Used while parsing Dhcp6/dhcp-ddns/replace-client-name.
CONFIG_CONTROL | Used while parsing Dhcp6/config-control.
CONFIG_DATABASE | Used while parsing config-control/config-databases.
COMPATIBILITY | Used while parsing compatibility parameters.
DDNS_CONFLICT_RESOLUTION_MODE | Used while parsing Dhcp6/ddns-conflict-resolution-mode.

Definition at line 233 of file dhcp6/parser_context.h.

## ◆ ParserType

enum isc::dhcp::Parser6Context::ParserType

Defines currently supported scopes.

Dhcp6Parser is able to parse several types of scope. Usually, when it parses a config file, it expects the data to have a map with Dhcp6 in it and all the parameters within that Dhcp6 map. However, sometimes the parser is expected to parse only a subset of that information. For example, it may be asked to parse a structure that is host-reservation only, without the global 'Dhcp6' or 'reservations' around it. In such case the parser is being told to start parsing as PARSER_HOST_RESERVATION6.

Enumerator
PARSER_JSON | This parser will parse the content as generic JSON.
PARSER_DHCP6 | This parser will parse the content as Dhcp6 config wrapped in a map (that's the regular config file).
SUBPARSER_DHCP6 | This parser will parse the content of Dhcp6 (without outer { } and without "Dhcp6"). It is mostly used in unit-tests as most of the unit-tests do not define the outer map and Dhcp6 entity, just the contents of it.
PARSER_INTERFACES | This will parse the input as interfaces content.
PARSER_SUBNET6 | This will parse the input as Subnet6 content.
PARSER_POOL6 | This will parse the input as pool6 content.
PARSER_PD_POOL | This will parse the input as pd-pool content.
PARSER_HOST_RESERVATION | This will parse the input as host-reservation.
PARSER_OPTION_DEFS | This will parse the input option definitions (for tests).
PARSER_OPTION_DEF | This will parse the input as option definition.
PARSER_OPTION_DATA | This will parse the input as option data.
PARSER_HOOKS_LIBRARY | This will parse the input as hooks-library.
PARSER_DHCP_DDNS | This will parse the input as dhcp-ddns. (D2 client config).
PARSER_CONFIG_CONTROL | This will parse the input as config-control.

Definition at line 49 of file dhcp6/parser_context.h.

## Constructor & Destructor Documentation

## ◆ Parser6Context()

isc::dhcp::Parser6Context::Parser6Context | ( |  | ) |

Default constructor.

Definition at line 22 of file dhcp6/parser_context.cc.

References ctx_, NO_KEYWORD, and sfile_.

## ◆ ~Parser6Context()

isc::dhcp::Parser6Context::~Parser6Context | ( |  | ) |
| virtual

destructor

Definition at line 27 of file dhcp6/parser_context.cc.

## Member Function Documentation

## ◆ contextName()

const std::string isc::dhcp::Parser6Context::contextName | ( |  | ) |

Get the syntactic context name.

Returns
  printable name of the context.

Definition at line 148 of file dhcp6/parser_context.cc.

References AUTH_TYPE, AUTHENTICATION, CLIENT_CLASSES, CLIENTS, COMPATIBILITY, CONFIG, CONFIG_CONTROL, CONFIG_DATABASE, CONTROL_SOCKET, CONTROL_SOCKET_TYPE, ctx_, DATABASE_ON_FAIL, DDNS_CONFLICT_RESOLUTION_MODE, DHCP6, DHCP_DDNS, DHCP_MULTI_THREADING, DHCP_QUEUE_CONTROL, DUID_TYPE, EXPIRED_LEASES_PROCESSING, HOOKS_LIBRARIES, HOST_RESERVATION_IDENTIFIERS, HOSTS_DATABASE, HTTP_HEADERS, INTERFACES_CONFIG, LEASE_DATABASE, LOGGERS, MAC_SOURCES, NCR_FORMAT, NCR_PROTOCOL, NO_KEYWORD, OPTION_DATA, OPTION_DEF, OUTPUT_OPTIONS, PD_POOLS, POOLS, RELAY, REPLACE_CLIENT_NAME, RESERVATIONS, SANITY_CHECKS, SERVER_ID, SHARED_NETWORK, and SUBNET6.

Referenced by require(), and unique().

## ◆ enter()

void isc::dhcp::Parser6Context::enter | ( | const ParserContext & | ctx | ) |

Enter a new syntactic context.

Entering a new syntactic context is useful in several ways. First, it allows the parser to avoid conflicts. Second, it allows the lexer to return different tokens depending on context (e.g. if "renew-timer" string is detected, the lexer will return STRING token if in JSON mode or RENEW_TIMER if in DHCP6 mode. Finally, the syntactic context allows the error message to be more descriptive if the input string does not parse properly.

Parameters

  ctx | the syntactic context to enter into

Definition at line 131 of file dhcp6/parser_context.cc.

References ctx_.

## ◆ error() [1/2]

void isc::dhcp::Parser6Context::error | ( | const isc::dhcp::location & | loc,
|  | const std::string & | what,
|  | size_t | pos = 0 )

Error handler.

Note
  The optional position for an error in a string begins by 1 so the caller should add 1 to the position of the C++ string.

Parameters

  loc | location within the parsed file where the problem was experienced.
  what | string explaining the nature of the error.
  pos | optional position for in string errors.

Exceptions

  Dhcp6ParseError |

Definition at line 71 of file dhcp6/parser_context.cc.

References isc_throw.

## ◆ error() [2/2]

void isc::dhcp::Parser6Context::error | ( | const std::string & | what | ) |

Error handler.

This is a simplified error reporting tool for possible future cases when the Dhcp6Parser is not able to handle the packet.

Parameters

  what | string explaining the nature of the error.

Exceptions

  Dhcp6ParseError |

Definition at line 82 of file dhcp6/parser_context.cc.

References isc_throw.

## ◆ fatal()

void isc::dhcp::Parser6Context::fatal | ( | const std::string & | what | ) |
| static

Fatal error handler.

This is for should not happen but fatal errors. Used by YY_FATAL_ERROR macro so required to be static.

Parameters

  what | string explaining the nature of the error.

Exceptions

  Dhcp6ParseError |

Definition at line 87 of file dhcp6/parser_context.cc.

References isc_throw.

## ◆ includeFile()

void Parser6Context::includeFile | ( | const std::string & | filename | ) |

Divert input to an include file.

Parameters

  filename | file to be included

Definition at line 7077 of file dhcp6_lexer.cc.

References BEGIN, isc::db::fatal, file_, files_, INITIAL, loc_, locs_, sfile_, sfiles_, states_, and YY_CURRENT_BUFFER.

## ◆ leave()

void isc::dhcp::Parser6Context::leave | ( |  | ) |

Leave a syntactic context.

Exceptions

  isc::Unexpected | if unbalanced

Definition at line 137 of file dhcp6/parser_context.cc.

References ctx_, and isc::db::fatal.

## ◆ loc2pos()

isc::data::Element::Position isc::dhcp::Parser6Context::loc2pos | ( | isc::dhcp::location & | loc | ) |

Converts bison's position to one understandable by isc::data::Element.

Convert a bison location into an element position (take the begin, the end is lost)

Parameters

  loc | location in bison format

Returns
  Position in format accepted by Element

Definition at line 92 of file dhcp6/parser_context.cc.

## ◆ parseFile()

isc::data::ElementPtr isc::dhcp::Parser6Context::parseFile | ( | const std::string & | filename,
|  | ParserType | parser_type )

Run the parser on the file specified.

This method parses specified file. Depending on the value of parser_type, parser may either check only that the input is valid JSON, or may do more specific syntax checking. See ParserType for supported syntax checkers.

Parameters

  filename | file to be parsed
  parser_type | specifies expected content (usually DHCP6 or generic JSON)

Returns
  Element structure representing parsed text.

Definition at line 37 of file dhcp6/parser_context.cc.

References isc_throw, and scanFileBegin().

Referenced by isc::dhcp::ControlledDhcpv6Srv::loadConfigFile(), and main().

Here is the call graph for this function:

## ◆ parseString()

isc::data::ElementPtr isc::dhcp::Parser6Context::parseString | ( | const std::string & | str,
|  | ParserType | parser_type )

Run the parser on the string specified.

This method parses specified string. Depending on the value of parser_type, parser may either check only that the input is valid JSON, or may do more specific syntax checking. See ParserType for supported syntax checkers.

Parameters

  str | string to be parsed
  parser_type | specifies expected content (usually DHCP6 or generic JSON)

Returns
  Element structure representing parsed text.

Definition at line 31 of file dhcp6/parser_context.cc.

References scanStringBegin().

Here is the call graph for this function:

## ◆ require()

void isc::dhcp::Parser6Context::require | ( | const std::string & | name,
|  | isc::data::Element::Position | open_loc,
|  | isc::data::Element::Position | close_loc )

Check if a required parameter is present.

Check if a required parameter is present in the map at the top of the stack and raise an error when it is not.

Parameters

  name | name of the parameter expected to be present
  open_loc | location of the opening curly bracket
  close_loc | location of the closing curly bracket

Exceptions

  Dhcp6ParseError |

Definition at line 100 of file dhcp6/parser_context.cc.

References contextName(), isc_throw, and stack_.

Here is the call graph for this function:

## ◆ scanEnd()

void Parser6Context::scanEnd | ( |  | ) |

Method called after the last tokens are scanned.

Definition at line 7056 of file dhcp6_lexer.cc.

References sfile_, sfiles_, and states_.

## ◆ scanFileBegin()

void Parser6Context::scanFileBegin | ( | FILE * | f,
|  | const std::string & | filename,
|  | ParserType | type )

Method called before scanning starts on a file.

Parameters

  f | stdio FILE pointer
  filename | file to be parsed
  type | specifies expected content

Definition at line 7034 of file dhcp6_lexer.cc.

References isc::db::fatal, file_, loc_, sfile_, and yy_flex_debug.

Referenced by parseFile().

## ◆ scanStringBegin()

void Parser6Context::scanStringBegin | ( | const std::string & | str,
|  | ParserType | type )

Method called before scanning starts on a string.

Parameters

  str | string to be parsed
  type | specifies expected content

Definition at line 7016 of file dhcp6_lexer.cc.

References isc::db::fatal, file_, loc_, sfile_, and yy_flex_debug.

Referenced by parseString().

## ◆ unique()

void isc::dhcp::Parser6Context::unique | ( | const std::string & | name,
|  | isc::data::Element::Position | loc )

Check if a parameter is already present.

Check if a parameter is already present in the map at the top of the stack and raise an error when it is.

Parameters

  name | name of the parameter to check
  loc | location of the current parameter

Exceptions

  Dhcp6ParseError |

Definition at line 114 of file dhcp6/parser_context.cc.

References contextName(), ctx_, isc_throw, NO_KEYWORD, and stack_.

Here is the call graph for this function:

## ◆ warnAboutExtraCommas()

void isc::dhcp::Parser6Context::warnAboutExtraCommas | ( | const isc::dhcp::location & | loc | ) |

Warning for extra commas.

Parameters

  loc | location within the parsed file of the extra comma

Exceptions

  ParseError |

Definition at line 247 of file dhcp6/parser_context.cc.

References warning().

Here is the call graph for this function:

## ◆ warning()

void isc::dhcp::Parser6Context::warning | ( | const isc::dhcp::location & | loc,
|  | const std::string & | what )

Warning handler.

Parameters

  loc | location within the parsed file where the problem was experienced
  what | string explaining the nature of the error

Exceptions

  ParseError |

Definition at line 238 of file dhcp6/parser_context.cc.

References isc::dhcp::DHCP6_CONFIG_SYNTAX_WARNING, isc::dhcp::dhcp6_logger, and LOG_WARN.

Referenced by warnAboutExtraCommas().

## Member Data Documentation

## ◆ ctx_

ParserContext isc::dhcp::Parser6Context::ctx_

Current syntactic context.

Definition at line 391 of file dhcp6/parser_context.h.

Referenced by Parser6Context(), contextName(), enter(), leave(), and unique().

## ◆ file_

std::string isc::dhcp::Parser6Context::file_

File name.

Definition at line 363 of file dhcp6/parser_context.h.

Referenced by includeFile(), scanFileBegin(), and scanStringBegin().

## ◆ files_

std::vector<std::string> isc::dhcp::Parser6Context::files_

File name stack.

Definition at line 366 of file dhcp6/parser_context.h.

Referenced by includeFile().

## ◆ loc_

isc::dhcp::location isc::dhcp::Parser6Context::loc_

Location of the current token.

The lexer will keep updating it. This variable will be useful for logging errors.

Definition at line 372 of file dhcp6/parser_context.h.

Referenced by includeFile(), scanFileBegin(), and scanStringBegin().

## ◆ locs_

std::vector<isc::dhcp::location> isc::dhcp::Parser6Context::locs_

Location stack.

Definition at line 375 of file dhcp6/parser_context.h.

Referenced by includeFile().

## ◆ sfile_

FILE* isc::dhcp::Parser6Context::sfile_

sFile (aka FILE)

Definition at line 381 of file dhcp6/parser_context.h.

Referenced by Parser6Context(), includeFile(), scanEnd(), scanFileBegin(), and scanStringBegin().

## ◆ sfiles_

std::vector<FILE*> isc::dhcp::Parser6Context::sfiles_

sFile (aka FILE) stack

This is a stack of files. Typically there's only one file (the one being currently parsed), but there may be more if one file includes another.

Definition at line 388 of file dhcp6/parser_context.h.

Referenced by includeFile(), and scanEnd().

## ◆ stack_

std::vector<isc::data::ElementPtr> isc::dhcp::Parser6Context::stack_

JSON elements being parsed.

Definition at line 104 of file dhcp6/parser_context.h.

Referenced by require(), and unique().

## ◆ states_

std::vector<struct yy_buffer_state*> isc::dhcp::Parser6Context::states_

Lexer state stack.

Definition at line 378 of file dhcp6/parser_context.h.

Referenced by includeFile(), and scanEnd().

The documentation for this class was generated from the following files:

- dhcp6/parser_context.h
- dhcp6_lexer.cc
- dhcp6/parser_context.cc