43    string hwaddr_txt = 
getString(lease_info, 
"hw-address");
 
   50    if (lease_info->contains(
"subnet-id")) {
 
   51        subnet_id = 
getUint32(lease_info, 
"subnet-id");
 
   55    if (lease_info->contains(
"pool-id")) {
 
   56        pool_id = 
getUint32(lease_info, 
"pool-id");
 
   63        subnet = cfg->getCfgSubnets4()->getBySubnetId(subnet_id);
 
   66                      << subnet_id << 
" currently configured.");
 
   70        if (!subnet->inRange(addr)) {
 
   72                      "to subnet " << subnet->toText() << 
", subnet-id=" << subnet_id);
 
   77        subnet = cfg->getCfgSubnets4()->selectSubnet(addr);
 
   80                      << 
" subnet for address " << addr);
 
   82        subnet_id = subnet->getID();
 
   87    if (lease_info->contains(
"client-id")) {
 
   88        string txt = 
getString(lease_info, 
"client-id");
 
   94    uint32_t valid_lft = 0;
 
   95    if (lease_info->contains(
"valid-lft")) {
 
   96        valid_lft = 
getUint32(lease_info, 
"valid-lft");
 
   98        valid_lft = subnet->getValid();
 
  108    if (lease_info->contains(
"expire")) {
 
  109        int64_t expire_time = 
getInteger(lease_info, 
"expire");
 
  110        if (expire_time <= 0) {
 
  114        } 
else if (expire_time < valid_lft) {
 
  116                      " for address " << addr);
 
  118        cltt = 
static_cast<time_t
>(expire_time - valid_lft);
 
  123    bool fqdn_fwd = 
false;
 
  124    if (lease_info->contains(
"fqdn-fwd")) {
 
  125        fqdn_fwd = 
getBoolean(lease_info, 
"fqdn-fwd");
 
  127    bool fqdn_rev = 
false;
 
  128    if (lease_info->contains(
"fqdn-rev")) {
 
  129        fqdn_rev = 
getBoolean(lease_info, 
"fqdn-rev");
 
  132    if (lease_info->contains(
"hostname")) {
 
  133        hostname = 
getString(lease_info, 
"hostname");
 
  135    if (hostname.empty() && (fqdn_fwd || fqdn_rev)) {
 
  137                  " fqdn was set to true.");
 
  141    if (lease_info->contains(
"state")) {
 
  142        state = 
getUint8(lease_info, 
"state");
 
  148                  "values are: 0 (default), 1 (declined), 2 (expired-reclaimed)," 
  149                  " 3 (released) and 4 (registered)");
 
  156                  << 
"' is not a JSON map.");
 
  162        if (ctx && ctx->contains(
"comment")) {
 
  164                      << 
"' in user context '" << ctx->str() << 
"'");
 
  168            copied = 
copy(ctx, 0);
 
  172        copied->set(
"comment", comment);
 
  179                           fqdn_fwd, fqdn_rev, hostname));
 
  182    l->pool_id_ = pool_id;
 
  186        auto check = cfg->getConsistency()->getExtendedInfoSanityCheck();
 
  193    force_create = 
false;
 
  194    if (lease_info->contains(
"force-create")) {
 
  195        force_create = 
getBoolean(lease_info, 
"force-create");
 
 
  204                    bool& force_create) {
 
  216    string duid_txt = 
getString(lease_info, 
"duid");
 
  221    uint8_t prefix_len = 128;
 
  222    if (lease_info->contains(
"type")) {
 
  223        string txt = 
getString(lease_info, 
"type");
 
  224        if (txt == 
"IA_NA") {
 
  226        } 
else if (txt == 
"IA_TA") {
 
  228        } 
else if (txt == 
"IA_PD") {
 
  231            prefix_len = 
getUint8(lease_info, 
"prefix-len");
 
  234                      "supported values are: IA_NA and IA_PD");
 
  241    if (lease_info->contains(
"subnet-id")) {
 
  242        subnet_id = 
getUint32(lease_info, 
"subnet-id");
 
  245    uint32_t pool_id = 0;
 
  246    if (lease_info->contains(
"pool-id")) {
 
  247        pool_id = 
getUint32(lease_info, 
"pool-id");
 
  254        subnet = cfg->getCfgSubnets6()->getBySubnetId(subnet_id);
 
  257                      << subnet_id << 
" currently configured.");
 
  263                      "to subnet " << subnet->toText() << 
", subnet-id=" << subnet_id);
 
  269                      " address leases only, not prefix leases.");
 
  272        subnet = cfg->getCfgSubnets6()->selectSubnet(addr);
 
  275                      "subnet for address " << addr);
 
  277        subnet_id = subnet->getID();
 
  280    uint32_t iaid = 
getUint32(lease_info, 
"iaid");
 
  284    if (lease_info->contains(
"hw-address")) {
 
  285        string hwaddr_txt = 
getString(lease_info, 
"hw-address");
 
  292    uint32_t valid_lft = 0;
 
  293    if (lease_info->contains(
"valid-lft")) {
 
  294        valid_lft = 
getUint32(lease_info, 
"valid-lft");
 
  296        valid_lft = subnet->getValid();
 
  301    uint32_t pref_lft = 0;
 
  302    if (lease_info->contains(
"preferred-lft")) {
 
  303        pref_lft = 
getUint32(lease_info, 
"preferred-lft");
 
  305        pref_lft = subnet->getValid();
 
  315    if (lease_info->contains(
"expire")) {
 
  316        int64_t expire_time = 
getInteger(lease_info, 
"expire");
 
  317        if (expire_time <= 0) {
 
  321        } 
else if (expire_time < valid_lft) {
 
  323                      " for address " << addr);
 
  326        cltt = 
static_cast<time_t
>(expire_time - valid_lft);
 
  331    bool fqdn_fwd = 
false;
 
  332    if (lease_info->contains(
"fqdn-fwd")) {
 
  333        fqdn_fwd = 
getBoolean(lease_info, 
"fqdn-fwd");
 
  335    bool fqdn_rev = 
false;
 
  336    if (lease_info->contains(
"fqdn-rev")) {
 
  337        fqdn_rev = 
getBoolean(lease_info, 
"fqdn-rev");
 
  340    if (lease_info->contains(
"hostname")) {
 
  341        hostname = 
getString(lease_info, 
"hostname");
 
  343    if (hostname.empty() && (fqdn_fwd || fqdn_rev)) {
 
  345                  " fqdn was set to true.");
 
  349    if (lease_info->contains(
"state")) {
 
  350        state = 
getUint8(lease_info, 
"state");
 
  356                  "values are: 0 (default), 1 (declined), 2 (expired-reclaimed)," 
  357                  " 3 (released) and 4 (registered)");
 
  362                  "Invalid declined state for PD prefix.");
 
  369                  << 
"' is not a JSON map.");
 
  375        if (ctx && ctx->contains(
"comment")) {
 
  377                      << 
"' in user context '" << ctx->str() << 
"'");
 
  381            copied = 
copy(ctx, 0);
 
  385        copied->set(
"comment", comment);
 
  390    if (prefix_len == 0 || prefix_len > 128) {
 
  392                  << 
static_cast<unsigned>(prefix_len));
 
  395    if (prefix_len != 128) {
 
  397        if (first_address != addr) {
 
  399                      << 
" exceeds prefix/prefix-len pair: " << first_address
 
  400                      << 
"/" << 
static_cast<uint32_t
>(prefix_len));
 
  405    Lease6Ptr l(
new Lease6(type, addr, duid_ptr, iaid, pref_lft, valid_lft,
 
  406                           subnet_id, fqdn_fwd, fqdn_rev, hostname,
 
  407                           hwaddr_ptr, prefix_len));
 
  411    l->pool_id_ = pool_id;
 
  415        auto check = cfg->getConsistency()->getExtendedInfoSanityCheck();
 
  421    force_create = 
false;
 
  422    if (lease_info->contains(
"force-create")) {
 
  423        force_create = 
getBoolean(lease_info, 
"force-create");
 
 
static DUID fromText(const std::string &text)
Create DUID from the textual format.
static ElementPtr createMap(const Position &pos=ZERO_POSITION())
Creates an empty MapElement type ElementPtr.
Exception thrown when a command failed due to a conflict.
A generic exception that is thrown if a parameter given to a method is considered invalid in that con...
A generic exception that is thrown if a function is called in a prohibited way.
The IOAddress class represents an IP addresses (version agnostic)
std::string toText() const
Convert the address to a string.
bool isV4() const
Convenience function to check for an IPv4 address.
uint8_t getUint8(ConstElementPtr scope, const std::string &name)
Get an uint8_t value.
static isc::asiolink::IOAddress getAddress(const ConstElementPtr &scope, const std::string &name)
Returns a IOAddress parameter from a scope.
static std::string getString(isc::data::ConstElementPtr scope, const std::string &name)
Returns a string parameter from a scope.
uint32_t getUint32(isc::data::ConstElementPtr scope, const std::string &name)
Returns a value converted to uint32_t.
static bool getBoolean(isc::data::ConstElementPtr scope, const std::string &name)
Returns a boolean parameter from a scope.
static int64_t getInteger(isc::data::ConstElementPtr scope, const std::string &name)
Returns an integer parameter from a scope.
static ClientIdPtr fromText(const std::string &text)
Create client identifier from the textual format.
Holds DUID (DHCPv6 Unique Identifier)
static bool upgradeLease6ExtendedInfo(const Lease6Ptr &lease, CfgConsistency::ExtendedInfoSanity check=CfgConsistency::EXTENDED_INFO_CHECK_FIX)
Upgrade a V6 lease user context to the new extended info entry.
static void extractLease4ExtendedInfo(const Lease4Ptr &lease, bool ignore_errors=true)
Extract relay and remote identifiers from the extended info.
static bool upgradeLease4ExtendedInfo(const Lease4Ptr &lease, CfgConsistency::ExtendedInfoSanity check=CfgConsistency::EXTENDED_INFO_CHECK_FIX)
The following queries are used to fulfill Bulk Lease Query queries.
virtual isc::dhcp::Lease4Ptr parse(isc::dhcp::ConstSrvConfigPtr &cfg, const isc::data::ConstElementPtr &lease_info, bool &force_create)
Parses Element tree and tries to convert to Lease4.
virtual isc::dhcp::Lease6Ptr parse(isc::dhcp::ConstSrvConfigPtr &cfg, const isc::data::ConstElementPtr &lease_info, bool &force_create)
Parses Element tree and tries to convert to Lease4.
#define isc_throw(type, stream)
A shortcut macro to insert known values into exception arguments.
An abstract API for lease database.
IOAddress firstAddrInPrefix(const IOAddress &prefix, uint8_t len)
This code is based on similar code from the Dibbler project.
ElementPtr copy(ConstElementPtr from, int level)
Copy the data up to a nesting level.
boost::shared_ptr< const Element > ConstElementPtr
boost::shared_ptr< Element > ElementPtr
boost::shared_ptr< const SrvConfig > ConstSrvConfigPtr
Const pointer to the SrvConfig.
boost::shared_ptr< const Subnet6 > ConstSubnet6Ptr
A const pointer to a Subnet6 object.
boost::shared_ptr< const Subnet4 > ConstSubnet4Ptr
A const pointer to a Subnet4 object.
boost::shared_ptr< DUID > DuidPtr
boost::shared_ptr< Lease6 > Lease6Ptr
Pointer to a Lease6 structure.
boost::shared_ptr< HWAddr > HWAddrPtr
Shared pointer to a hardware address structure.
uint32_t SubnetID
Defines unique IPv4 or IPv6 subnet identifier.
boost::shared_ptr< ClientId > ClientIdPtr
Shared pointer to a Client ID.
boost::shared_ptr< Lease4 > Lease4Ptr
Pointer to a Lease4 structure.
Defines the logger used by the top-level component of kea-lfc.
Hardware type that represents information from DHCPv4 packet.
static HWAddr fromText(const std::string &text, const uint16_t htype=HTYPE_ETHER)
Creates instance of the hardware address from textual format.
Structure that holds a lease for IPv4 address.
Structure that holds a lease for IPv6 address and/or prefix.
static const uint32_t STATE_DECLINED
Declined lease.
Type
Type of lease or pool.
@ TYPE_TA
the lease contains temporary IPv6 address
@ TYPE_PD
the lease contains IPv6 prefix (for prefix delegation)
@ TYPE_NA
the lease contains non-temporary IPv6 address
static const uint32_t STATE_REGISTERED
Registered self-generated lease.