wiki:OldKeaRequirements

NOTE: The following page contains archival information about Kea requirements and our early attempts to track requirements. In May 2016 we decided to retire this page, so it's kept only for historical reasons and will not be updated anymore.

This page was used for tracking two things: requirements and test status. For a list of requirements, see requirements links on KeaDesigns page. For test status, see our Jenkins installation: https://jenkins.isc.org.

Kea (BIND10 DHCP) Features (obsolete page)

Introduction

This page lists features implemented in the Kea project to date.

Note that:

  • There are 3 separate tools for protocol conformance: IxANVL, TAHI (http://tahi.org) and ISC Forge. They may be used to cover some of those requirements.
  • The document does not describe the tests in detail - that will be covered elsewhere.
  • Each item is considered a separate requirement (denoted in bold). Each requirement is color coded:
    • red: Tests not ready to run (tests not designed, implementation in progress, environment setup in progress etc);
    • yellow: Tests are being executed, but some of them failing (due to code bugs, test bugs), the health of the feature is not confirmed yet;
    • green: Tests are mostly passing, the only outstanding issues are minor and are not affecting feature readiness. The feature is ready for release.

Kea Functionality as of June 2014

In Preparation

By the middle of June 2014, the Kea DHCP server had the following functionality.

  • Management
    • Shell script to start/stop the Kea processes (v4.start-stop, v6.start-stop, ddns.start-stop)
    • Configuration using a configuration file (v4.config, v6.config, ddns.config)
    • Dynamic reconfiguration without restarting the processes (v4.reconfig, v6.reconfig, ddns.reconfig)
  • DHCPv4 Features
    • Handle directly connected DHCPv4 clients (v4.direct)
    • Handle remotely (via relay) connected DHCPv4 clients (v4.relay)
    • Allocation of DHCPv4 leases for clients (v4.allocate)
    • Ability to specify multiple subnets for the server to service (v4.many-subnets)
    • Ability to specify multiple pools of available addresses in each subnet (v4.many-pools)
    • Ability to service a client lease request with an address from one of the pools (v4.inpool)
    • Ability to service a client renew request (v4.renew)
    • Ability to handle lease release (v4.release)
    • Ability to reuse expired lease (v4.expire)
    • Client identifier option in DHCP server replies (as defined in RFC 6842) (v4.cid-reply)
  • DHCPv6 Features
    • Handle directly connected DHCPv6 clients (v6.direct)
    • Handle remotely (via relay) connected DHCPv6 clients (v6.relay)
    • Ability to specify multiple subnets for the server to service (v6.many-subnets)
    • Ability to specify multiple pools of available addresses in each subnet (v6.many-pools)
    • Ability to service a client lease request with an address from one of the pools (v6.inpool)
    • Ability to service a client renew request (v6.renew)
    • Ability to handle lease release (v6.release)
    • Ability to reuse expired lease (v6.expire)
    • Support for up to 32 relays (v6.relay-support)
  • Options (both V4 and V6)
    • Selection of standard options available (v4.options, v6.options).
    • Ability to define user-defined options (v4.user-options, v6.user-options)
    • Ability to define custom options (v4.custom-options, v6.custom-options)
    • Ability to specify values for standard and user-defined options globally and on a per-subnet basis (v4.subnet-options, v6.subnet-options)
    • Responding with appropriate options (and values) in response to a client requests. ("Appropriate" means responding with options that have been requested by the client.) (v4.prl, v6.oro)
    • Vendor options (v4.vendor-options, v6.vendor-options)
    • Selected DOCSIS 3.0 options (v4.docsis-options, v6.docsis-options)
  • Client classification
    • Ability to use vendor class to segregate clients (v4.vclass-classify, v6.vclass-classify)
  • Performance tool
    • Able to test DHCPv4 servers (perfdhcp.v4)
    • Able to test DHCPv6 servers (perfdhcp.v6)
    • Able to measure performance for initial v4 handshake (DISCOVER/OFFER) (perfdhcp.do)
    • Able to measure performance for initial v6 handshake (SOLICIT/ADVERTISE) (perfdhcp.sa)
    • Able to measure full v4 four-way (DISCOVER/OFFER/REQUEST/ACK) handshakes. (perfdhcp.dora)
    • Able to measure full v6 four-way (SOLICIT/ADVERTISE/REQUEST/RESPONSE) handshakes. (perfdhcp.sarr)
    • Able to request V6 prefixes as well as addresses (perfdhcp.v6prefix)
    • Able to release V6 addresses and prefixes (perfdhcp.v6release)
    • Able to simulate at least 100 clients (perfdhcp.clientcount)
    • Able to send packets at a defined rate and measure both average latency, throughput and drop rate (perfdhcp.ratecontrol)

  • Lease storage
    • Leases stored in a MySQL database (db.mysql)
    • Leases stored in a Postgres database (db.postgres)
    • Leases stored in memory and persisted to disk as a text file (db.memfile)
  • Performance
    • "Adequate" performance. (This is loosely defined as the full-server will be multi-process: the ideal is for a multi-process server using a backend database to handle up to 3k leases per second.) (performance)
  • DDNS (Detailed list of requirements is maintained in dedicated document.)
    • update forward DNS entries (A record) for allocated v4 leases (v4.ddns.fwd)
    • update forward DNS entries (AAAA record) for allocated v6 leases (v6.ddns.fwd)
    • update reverse DNS entries (PTR record) for allocated v4 leases (v4.ddns.rev)
    • update reverse DNS entries (PTR record) for allocated v6 leases (v6.ddns.rev)
    • remove DNS entries (A and PTR records) when v4 client releases (v4.ddns.release)
    • remove DNS entries (AAAA and PTR records) when v6 client releases (v6.ddns.release)
    • remove DNS entries (A and PTR records) when v4 lease expires (v4.ddns.expire)
    • remove DNS entries (AAAA and PTR records) when v6 lease expires (v6.ddns.expire)
    • process S,O,N,E bits properly in DHCPv4 requests (v4.ddns.flags)
    • process S,O,N bits properly in DHCPv6 requests (v6.ddns.flags)
    • support more than one DNS server for DHCPv4 and fall back through the list in case of problems (v4.ddns.many-servers)
    • support more than one DNS server for DHCPv6 and fall back through the list in case of problems (v6.ddns.many-servers)
    • be able to ignore DHCPv4 client's name (v4.ddns.policy-ignore)
    • be able to use DHCPv4 client's name as is (v4.ddns.policy-ignore)
    • be able to add domain name to DHCPv4 client's hostname (v4.ddns.concatenate)
    • be able to generate procedurally hostname for DHCPv4 client (v4.ddns.concatenate)
    • be able to ignore DHCPv6 client's name (v6.ddns.policy-ignore)
    • be able to use DHCPv6 client's name as is (v6.ddns.policy-ignore)
    • be able to add domain name to DHCPv6 client's hostname (v6.ddns.concatenate)
    • be able to generate procedurally hostname for DHCPv6 client (v6.ddns.concatenate)
    • Must be able to support conflict resolution (as defined in RFC 4703, section 5.3) for A records (v4.ddns.conflict-resolution)
    • Must be able to support conflict resolution (as defined in RFC 4703, section 5.3) for AAAA records (v6.ddns.conflict-resolution)
    • Secret key transaction authentication of DDNS updates (TSIG - as defined in RFC 2845). (v6.ddns.tsig)
  • Hooks (Useful documents: 1. General Hooks API for BIND10, 2. The list of DHCP-specific hooks)
    • The ability to use general BIND10 hooks framework (defined here) (hooks.framework)
    • Configure and load external user library that will register callouts for DHCPv4 engine (v4.hooks.load)
    • Configure and load external user library that will register callouts for DHCPv6 engine (v6.hooks.load)
    • Execute callouts from user library during specific DHCPv4 engine events (v4.hooks.execute)
    • Execute callouts from user library during specific DHCPv6 engine events (v6.hooks.execute)
    • Cancel certain actions based of callouts' skip flag status (when allowed for specific v4 hook point) (v4.hooks.skip)
    • Cancel certain actions based of callouts' skip flag status (when allowed for specific v6 hook point) (v6.hooks.skip)
    • Callouts are able to modify data and that modification is used by the DHCPv4 server (v4.hooks.modify)
    • Callouts are able to modify data and that modification is used by the DHCPv6 server (v6.hooks.modify)
  • Prefix Delegation
    • Parse and generate IA_PD and IAPREFIX options (v6.pd.options)
    • Assign a prefix for requesting router (v6.pd.assign)
    • Renew a prefix for requesting router (v6.pd.renew)
    • Release a prefix for requesting router (v6.pd.release)
    • Configure server to handle prefixes (v6.pd.config)
    • Ability to store PD leases (v6.pd.leases)
    • Ability to handle NA (non-temporary addresses) and PD (prefix delegation) at the same time (v6.pd.na-pd)
    • Ability to have prefix only configuration (v6.pd.no-ia)
    • Ability to respond properly to IA_NA in prefix only configuration (v6.pd.no-ia-response)
    • Ability to have address only configuration (v6.pd.no-pd)
    • Ability to respond properly to IA_PD in addr only configuration (v6.pd.no-ia-response)
    • Store PD leases in database (v6.pd.store)
  • Miscellaneous
    • Ability to handle IPv4 and IPv6 traffic at the same time (misc.dual-stack1)
    • Ability to handle 60,000 dual-stack devices (misc.dual-stack2)
    • Stability: run stable for a minimum of 2 hours (misc.stability)
    • Switchable cryptography library (OpenSSL or Botan) (misc.crypto)
    • Support for RHEL (os.rhel)
    • Support for Ubuntu (os.ubuntu)
    • Support for FreeBSD (os.freebsd)
Last modified 19 months ago Last modified on May 5, 2016, 4:24:36 PM