parsers was a tree of @ref isc::data::Element objects using shared pointers. This part of the
processing we can refer to as phase 1.
-The Element tree was then processed by set of dedicated parsers. Each parser was able to handle its
-own context, e.g. global, subnet list, subnet, pool etc. This step took the tree generated in phase
-1, parsed it and generated an output configuration (e.g. @ref isc::dhcp::SrvConfig) or dynamic
-structures (e.g. isc::data::Host). During this stage, a large number of parser objects derived from
-@ref isc::dhcp::DhcpConfigParser could be instantiated for each scope and instance of data (e.g. to
-parse 1000 host reservation entries a thousand dedicated parsers were created). For convenience,
+The Element tree was then processed by set of dedicated parsers. Each
+parser was able to handle its own context, e.g. global, subnet list,
+subnet, pool etc. This step took the tree generated in phase 1, parsed
+it and generated an output configuration (e.g. @ref
+isc::dhcp::SrvConfig) or dynamic structures
+(e.g. isc::data::Host). During this stage, a large number of parser
+objects derived from DhcpConfigParser could be instantiated for each
+scope and instance of data (e.g. to parse 1000 host reservation
+entries a thousand dedicated parsers were created). For convenience,
this step is called phase 2.
Other issues with the old parsers are discussed here: @ref dhcpv6ConfigParserBison (this section is
here: http://kea.isc.org/wiki/SimpleParser It discusses the original issues
and the proposed architecture.
-There are several aspects of this new approach. The base class for all parsers
-is @ref isc::data::SimpleParser. It simplifies the parsers based on
-@ref isc::dhcp::DhcpConfigParser by rejecting the
-concept of build/commit phases. Instead, there should be a single method
-called parse that takes ConstElementPtr as a single parameter (that's the
-JSON structures to be parsed) and returns the config structure to be used
+There are several aspects of this new approach. The base class for all
+parsers is @ref isc::data::SimpleParser. It simplifies the parsers
+based on DhcpConfigParser by rejecting the concept of build/commit
+phases. Instead, there should be a single method called parse that
+takes ConstElementPtr as a single parameter (that's the JSON
+structures to be parsed) and returns the config structure to be used
in CfgMgr. An example of such a method can be the following:
@code
/// << " (" << getPosition(what) << ")");
/// }
-/// @todo: move this header into simple_parser.h as soon as
-/// there is no dependency through DhcpConfigParser
+/// @todo: move this header into simple_parser.h
/// @todo: create an isc_throw like macro to add the
/// position more easily.
/// @todo: replace all references to DhcpConfigError with ConfigError,
/// @brief A simple parser
///
-/// This class is intended to be a simpler replacement for @ref
-/// isc::dhcp::DhcpConfigParser. This class has been initially created to
-/// facilitate DHCPv4 and DHCPv6 servers' configuration parsing. Thus examples
-/// provided herein are related to DHCP configuration. Nevertheless, this is a
+/// This class is intended to be a simpler replacement for DhcpConfigParser.
+/// This class has been initially created to facilitate DHCPv4 and
+/// DHCPv6 servers' configuration parsing. Thus examples provided
+/// herein are related to DHCP configuration. Nevertheless, this is a
/// generic class to be used in other modules too.
///
/// The simplification comes from several factors:
/// @brief Sets new mandatory flag.
///
- /// @param status_code New numeric status code.
+ /// @param mandatory_flag New numeric status code.
void setMandatoryFlag(const bool mandatory_flag) {
mandatory_flag_ = mandatory_flag;
}
/// it into LeaseMgr (if this allocation is not fake, i.e. this is not a
/// response to SOLICIT).
///
- /// This method uses host reservation if ctx.host_ is set. The easy way to
+ /// This method uses host reservation if ctx.hosts_ is set. The easy way to
/// set it is to call @ref findReservationDecl.
/// The host reservation is convenient, but incurs performance penalty,
/// so it can be tweaked on a per subnet basis. There are three possible modes:
/// collection as old leases.<br/>
/// @ref ClientContext6::hwaddr_ Hardware address (optional, may be null if
/// not available)<br/>
- /// @ref ClientContext6::host_ Host reservation. allocateLeases6 will set
- /// this field, if appropriate reservation is found.
+ /// @ref ClientContext6::hosts_ Host reservations. allocateLeases6 will set
+ /// this field, if appropriate reservations are found.
///
/// @return Allocated IPv6 leases (may be empty if allocation failed)
Lease6Collection
/// - @ref ClientContext4::fake_allocation_ Is this real i.e. REQUEST (false)
/// or just picking an address for DISCOVER that is not really
/// allocated (true)
- /// - @ref ClientContext4::host_ Pointer to the object representing the
- // static reservations (host reservations) for the client.
/// - @ref ClientContext4::callout_handle_ A callout handle (used in hooks).
/// A lease callouts will be executed if this parameter is passed.
/// - @ref ClientContext4::old_lease_ [out] Holds the pointer to a previous
/// This method supports v4 hosts only.
///
/// @param subnet_id subnet identifier.
- /// @param addr specified address.
+ /// @param identifier_type Identifier type.
+ /// @param identifier_begin Pointer to a beginning of a buffer containing
+ /// an identifier.
+ /// @param identifier_len Identifier length.
+ ///
/// @return true if deletion was successful, false if the host was not there.
/// @throw various exceptions in case of errors
virtual bool del4(const SubnetID& subnet_id,
/// This method supports v6 hosts only.
///
/// @param subnet_id subnet identifier.
- /// @param addr specified address.
+ /// @param identifier_type Identifier type.
+ /// @param identifier_begin Pointer to a beginning of a buffer containing
+ /// an identifier.
+ /// @param identifier_len Identifier length.
+ ///
/// @return true if deletion was successful, false if the host was not there.
/// @throw various exceptions in case of errors
virtual bool del6(const SubnetID& subnet_id,
///
/// The most common type of network, in Kea's terminology, is a subnet. The
/// @ref Subnet implements this interface. Another types of objects implementing
-/// this interface are @ref SharedNetwork objects. They group multiple subnets
-/// together to provide means for extending available address pools (a single
-/// client may obtain IP address from any of the pools belonging to subnets in
-/// the shared network), or for selecting a subnet on a given link, depending
-/// on the class of the client (e.g. cable network case: different subnet is
+/// this interface are @ref SharedNetwork4 and @ref SharedNetwork6 objects.
+/// They group multiple subnets together to provide means for
+/// extending available address pools (a single client may obtain IP
+/// address from any of the pools belonging to subnets in the shared
+/// network), or for selecting a subnet on a given link, depending on the
+/// class of the client (e.g. cable network case: different subnet is
/// selected for cable modems, different one for routers).
///
/// The subnets and shared networks share many data structures, e.g. DHCP
/// This method supports v4 hosts only.
///
/// @param subnet_id subnet identifier.
- /// @param addr specified address.
+ /// @param identifier_type Identifier type.
+ /// @param identifier_begin Pointer to a beginning of a buffer containing
+ /// an identifier.
+ /// @param identifier_len Identifier length.
+ ///
/// @return true if deletion was successful, false if the host was not there.
/// @throw various exceptions in case of errors
virtual bool del4(const SubnetID& subnet_id,
/// This method supports v6 hosts only.
///
/// @param subnet_id subnet identifier.
- /// @param addr specified address.
+ /// @param identifier_type Identifier type.
+ /// @param identifier_begin Pointer to a beginning of a buffer containing
+ /// an identifier.
+ /// @param identifier_len Identifier length.
+ ///
/// @return true if deletion was successful, false if the host was not there.
/// @throw various exceptions in case of errors
virtual bool del6(const SubnetID& subnet_id,
/// @brief Retrieves next available IPv4 subnet within shared network.
///
- /// See documentation for @ref SharedNetwork::getNextSubnet.
+ /// See documentation for @ref SharedNetwork4::getNextSubnet.
///
/// @param first_subnet Pointer to a subnet from which the caller is
/// iterating over subnets within shared network. This is typically a
/// @brief Retrieves next available IPv6 subnet within shared network.
///
- /// See documentation for @ref SharedNetwork::getNextSubnet.
+ /// See documentation for @ref SharedNetwork6::getNextSubnet.
///
/// @param first_subnet Pointer to a subnet from which the caller is
/// iterating over subnets within shared network. This is typically a