mirror of
https://gitlab.isc.org/isc-projects/kea
synced 2025-09-01 14:35:29 +00:00
@@ -1,578 +0,0 @@
|
|||||||
module kea-dhcpv4-server {
|
|
||||||
yang-version 1.1;
|
|
||||||
namespace "urn:ietf:params:xml:ns:yang:kea-dhcpv4-server";
|
|
||||||
prefix "dhcpv4-server";
|
|
||||||
|
|
||||||
import ietf-inet-types {
|
|
||||||
prefix inet;
|
|
||||||
}
|
|
||||||
import ietf-yang-types {
|
|
||||||
prefix yang;
|
|
||||||
}
|
|
||||||
import ietf-dhcpv4-options {
|
|
||||||
prefix dhcpv4-options;
|
|
||||||
}
|
|
||||||
import ietf-dhcpv4-types {
|
|
||||||
prefix dhcpv4-types;
|
|
||||||
}
|
|
||||||
import ietf-interfaces {
|
|
||||||
prefix if;
|
|
||||||
}
|
|
||||||
|
|
||||||
organization "DHC WG";
|
|
||||||
contact
|
|
||||||
"piotr.strzyzewski@polsl.pl";
|
|
||||||
description "This model defines a YANG data model that can be
|
|
||||||
used to configure and manage Kea-dhcp4, a DHCPv4 server from ISC.";
|
|
||||||
|
|
||||||
revision 2018-07-14 {
|
|
||||||
description "Initial revision; mostly based on DHCPv6 version";
|
|
||||||
reference "";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Typedef
|
|
||||||
*/
|
|
||||||
typedef threshold {
|
|
||||||
type union {
|
|
||||||
type uint16 {
|
|
||||||
range 0..100;
|
|
||||||
}
|
|
||||||
type enumeration {
|
|
||||||
enum "disabled" {
|
|
||||||
description "No threshold";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
description "Threshold value in percent";
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Data Nodes
|
|
||||||
*/
|
|
||||||
container server {
|
|
||||||
presence "Enables the server";
|
|
||||||
description "DHCPv4 server portion";
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Configuration data
|
|
||||||
*/
|
|
||||||
container server-config {
|
|
||||||
description "This container contains the configuration data
|
|
||||||
of a server.";
|
|
||||||
container serv-attributes {
|
|
||||||
description
|
|
||||||
"This container contains basic attributes of a DHCPv4 server
|
|
||||||
such as IPv4 address, server name and so on. Some optional
|
|
||||||
functions that can be provided by the server is also included.";
|
|
||||||
leaf name {
|
|
||||||
type string;
|
|
||||||
description "server's name";
|
|
||||||
}
|
|
||||||
leaf description {
|
|
||||||
type string;
|
|
||||||
description "description of the server.";
|
|
||||||
}
|
|
||||||
leaf-list ipv4-address {
|
|
||||||
type inet:ipv4-address;
|
|
||||||
description "server's IPv4 address.";
|
|
||||||
}
|
|
||||||
leaf-list interfaces-config {
|
|
||||||
// Note - this should probably be references to
|
|
||||||
// entries in the ietf-interfaces model
|
|
||||||
type if:interface-ref;
|
|
||||||
description "A leaf list to denote which one or more interfaces
|
|
||||||
the server should listen on. The default value is to listen
|
|
||||||
on all the interfaces. This node is also used to set a unicast
|
|
||||||
address for the server to listen with a specific interface.
|
|
||||||
For example, if someone want the server to listen on a unicast
|
|
||||||
address with a specific interface, she/he can use the format
|
|
||||||
like 'eth0/192.0.2.1'.";
|
|
||||||
}
|
|
||||||
uses dhcpv4-types:vendor-infor;
|
|
||||||
}
|
|
||||||
|
|
||||||
container option-sets {
|
|
||||||
description "DHCPv4 employs various options to carry additional
|
|
||||||
information and parameters in DHCP messages. This container defines
|
|
||||||
all the possible options that need to be configured at the server
|
|
||||||
side.";
|
|
||||||
list option-set {
|
|
||||||
key option-set-id;
|
|
||||||
description "A server may allow different option sets to be
|
|
||||||
configured for different conditions (i.e. different networks,
|
|
||||||
clients and etc). This 'option-set' list enables various sets of
|
|
||||||
options being defined and configured in a single server. Different
|
|
||||||
sets are distinguished by the key called 'option-set-id'. All the
|
|
||||||
possible options discussed above are defined in the list and each
|
|
||||||
option is corresponding to a container. Since all the options in
|
|
||||||
the list are optional, each container in this list has a 'presence'
|
|
||||||
statement to indicate whether this option (container) will be
|
|
||||||
included in the current option set or not. In addition, each container
|
|
||||||
also has a 'if-feature' statement to indicate whether the server
|
|
||||||
supports this option (container).";
|
|
||||||
leaf option-set-id {
|
|
||||||
type uint32;
|
|
||||||
description "option set id";
|
|
||||||
}
|
|
||||||
uses dhcpv4-options:server-option-definitions;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
container network-ranges {
|
|
||||||
description "This model supports a hierarchy
|
|
||||||
to achieve dynamic configuration. That is to say we could configure the
|
|
||||||
server at different levels through this model. The top level is a global
|
|
||||||
level which is defined as the container 'network-ranges'. The following
|
|
||||||
levels are defined as sub-containers under it. The 'network-ranges'
|
|
||||||
contains the parameters (e.g. option-sets) that would be allocated to
|
|
||||||
all the clients served by this server.";
|
|
||||||
|
|
||||||
leaf option-set-id {
|
|
||||||
type leafref {
|
|
||||||
path "/server/server-config/option-sets/option-set/option-set-id";
|
|
||||||
}
|
|
||||||
description
|
|
||||||
"The ID field of relevant global option-set to be provisioned to
|
|
||||||
clients.";
|
|
||||||
}
|
|
||||||
list network-range {
|
|
||||||
key network-range-id;
|
|
||||||
description
|
|
||||||
"Under the 'network-ranges' container, a 'network-range' list
|
|
||||||
is defined to configure the server at a network level which is also
|
|
||||||
considered as the second level. Different network are identified by the
|
|
||||||
key 'network-range-id'. This is because a server may have different
|
|
||||||
configuration parameters (e.g. option sets) for different networks.";
|
|
||||||
leaf network-range-id {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "equivalent to subnet id";
|
|
||||||
}
|
|
||||||
leaf network-description {
|
|
||||||
type string;
|
|
||||||
description "description of the subnet";
|
|
||||||
}
|
|
||||||
leaf network-prefix {
|
|
||||||
type inet:ipv4-prefix;
|
|
||||||
mandatory true;
|
|
||||||
description "subnet prefix";
|
|
||||||
}
|
|
||||||
leaf option-set-id {
|
|
||||||
type leafref {
|
|
||||||
path "/server/server-config/option-sets/option-set/option-set-id";
|
|
||||||
}
|
|
||||||
description "The ID field of relevant option-set to be provisioned to
|
|
||||||
clients of this network-range.";
|
|
||||||
}
|
|
||||||
|
|
||||||
container address-pools {
|
|
||||||
description
|
|
||||||
"A container that describes the DHCPv4 server's
|
|
||||||
address pools.";
|
|
||||||
list address-pool {
|
|
||||||
key pool-id;
|
|
||||||
description "A DHCPv4 server can be configured with
|
|
||||||
several address pools. This list defines such address pools
|
|
||||||
which are distinguished by the key called 'pool-id'.";
|
|
||||||
leaf pool-id {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "pool id";
|
|
||||||
}
|
|
||||||
leaf pool-prefix {
|
|
||||||
type inet:ipv4-prefix;
|
|
||||||
mandatory true;
|
|
||||||
description "pool prefix";
|
|
||||||
}
|
|
||||||
leaf start-address {
|
|
||||||
type inet:ipv4-address-no-zone;
|
|
||||||
mandatory true;
|
|
||||||
description "start address";
|
|
||||||
}
|
|
||||||
leaf end-address {
|
|
||||||
type inet:ipv4-address-no-zone;
|
|
||||||
mandatory true;
|
|
||||||
description "end address";
|
|
||||||
}
|
|
||||||
leaf renew-time {
|
|
||||||
type uint32;
|
|
||||||
units "seconds";
|
|
||||||
description "renew time";
|
|
||||||
}
|
|
||||||
leaf rebind-time {
|
|
||||||
type uint32;
|
|
||||||
units "seconds";
|
|
||||||
description "rebind time";
|
|
||||||
}
|
|
||||||
// leaf rapid-commit {
|
|
||||||
// type boolean;
|
|
||||||
// mandatory false;
|
|
||||||
// description "A boolean value specifies whether the pool
|
|
||||||
// supports client-server exchanges involving two messages.";
|
|
||||||
// }
|
|
||||||
leaf client-class {
|
|
||||||
type string;
|
|
||||||
description
|
|
||||||
"If this leaf is specified, this pool will only serve
|
|
||||||
the clients belonging to this class.";
|
|
||||||
}
|
|
||||||
leaf max-address-count {
|
|
||||||
type threshold;
|
|
||||||
description "maximum count of addresses that can
|
|
||||||
be allocated in this pool. This value may be
|
|
||||||
less than count of total addresses.";
|
|
||||||
}
|
|
||||||
leaf option-set-id {
|
|
||||||
type leafref {
|
|
||||||
path "/server/server-config/option-sets/option-set/option-set-id";
|
|
||||||
}
|
|
||||||
description "The ID field of relevant option-set to be
|
|
||||||
provisioned to clients of this address-pool.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
container host-reservations {
|
|
||||||
description
|
|
||||||
"This container allows the server to make reservations at host level.";
|
|
||||||
list host-reservation {
|
|
||||||
key cli-id;
|
|
||||||
description "This list allows the server to reserve addresses,
|
|
||||||
prefixes, hostname and options for different clients.";
|
|
||||||
leaf cli-id {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "client id";
|
|
||||||
}
|
|
||||||
|
|
||||||
choice client-identifier {
|
|
||||||
description "When making reservations, the server needs to choose a
|
|
||||||
identifier to identify the client. Currently 'Client ID' and
|
|
||||||
'hardware address' are supported.";
|
|
||||||
case client-id {
|
|
||||||
description "Client ID";
|
|
||||||
leaf client-ident {
|
|
||||||
type string;
|
|
||||||
description "Client ID";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case hw-address {
|
|
||||||
description "hardware address";
|
|
||||||
leaf hardware-address {
|
|
||||||
type yang:mac-address;
|
|
||||||
description "MAC address of client";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
leaf-list reserv-addr {
|
|
||||||
type inet:ipv4-address-no-zone;
|
|
||||||
description "reserved addr";
|
|
||||||
}
|
|
||||||
|
|
||||||
leaf hostname {
|
|
||||||
type string;
|
|
||||||
description "reserved hostname";
|
|
||||||
}
|
|
||||||
|
|
||||||
leaf option-set-id {
|
|
||||||
type leafref {
|
|
||||||
path "/server/server-config/option-sets/option-set/option-set-id";
|
|
||||||
}
|
|
||||||
description "The ID field of relevant option-set to be provisioned
|
|
||||||
in the host reservation.";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
container relay-opaque-paras {
|
|
||||||
description "This container contains some opaque values in Relay Agent
|
|
||||||
options that need to be configured on the server side only for value
|
|
||||||
match. Such Relay Agent options include Interface-Id option,
|
|
||||||
Remote-Id option and Subscriber-Id option.";
|
|
||||||
list relays {
|
|
||||||
key relay-name;
|
|
||||||
description "relay agents";
|
|
||||||
leaf relay-name {
|
|
||||||
type string;
|
|
||||||
mandatory true;
|
|
||||||
description "relay agent name";
|
|
||||||
}
|
|
||||||
list interface-info {
|
|
||||||
key if-name;
|
|
||||||
description "interface info";
|
|
||||||
leaf if-name {
|
|
||||||
type string;
|
|
||||||
mandatory true;
|
|
||||||
description "interface name";
|
|
||||||
}
|
|
||||||
leaf interface-id {
|
|
||||||
type string;
|
|
||||||
mandatory true;
|
|
||||||
description "interface id";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
list subscribers {
|
|
||||||
key subscriber;
|
|
||||||
description "subscribers";
|
|
||||||
leaf subscriber {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "subscriber";
|
|
||||||
}
|
|
||||||
leaf subscriber-id {
|
|
||||||
type string;
|
|
||||||
mandatory true;
|
|
||||||
description "subscriber id";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
list remote-host {
|
|
||||||
key ent-num;
|
|
||||||
description "remote host";
|
|
||||||
leaf ent-num {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "enterprise number";
|
|
||||||
}
|
|
||||||
leaf remote-id {
|
|
||||||
type string;
|
|
||||||
mandatory true;
|
|
||||||
description "remote id";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* State data
|
|
||||||
*/
|
|
||||||
container server-state {
|
|
||||||
config "false";
|
|
||||||
description "states of server";
|
|
||||||
container network-ranges {
|
|
||||||
description "This model supports a hierarchy to achieve dynamic configuration.
|
|
||||||
That is to say we could configure the server at different levels through
|
|
||||||
this model. The top level is a global level which is defined as the container
|
|
||||||
'network-ranges'. The following levels are defined as sub-containers under it.
|
|
||||||
The 'network-ranges' contains the parameters (e.g. option-sets) that would be
|
|
||||||
allocated to all the clients served by this server.";
|
|
||||||
list network-range {
|
|
||||||
key network-range-id;
|
|
||||||
description "The ID field of relevant option-set to be provisioned
|
|
||||||
to clients of this network-range.";
|
|
||||||
leaf network-range-id {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "equivalent to subnet id";
|
|
||||||
}
|
|
||||||
container address-pools {
|
|
||||||
description "A container that describes the DHCPv4 server's address pools";
|
|
||||||
list address-pool {
|
|
||||||
key pool-id;
|
|
||||||
description "A DHCPv4 server can be configured with
|
|
||||||
several address pools. This list defines such address pools
|
|
||||||
which are distinguished by the key called 'pool-id'.";
|
|
||||||
leaf pool-id {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "pool id";
|
|
||||||
}
|
|
||||||
leaf total-address-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "count of total addresses in the pool";
|
|
||||||
}
|
|
||||||
leaf allocated-address-conut {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "count of allocated addresses in the pool";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
list binding-info {
|
|
||||||
key cli-id;
|
|
||||||
description "A list that records a binding information for each DHCPv4
|
|
||||||
client that has already been allocated IPv4 addresses.";
|
|
||||||
leaf cli-id {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "client id";
|
|
||||||
}
|
|
||||||
list cli-hw {
|
|
||||||
key hw-address;
|
|
||||||
description "client host id";
|
|
||||||
leaf hw-address {
|
|
||||||
type yang:mac-address;
|
|
||||||
mandatory true;
|
|
||||||
description "HW address";
|
|
||||||
}
|
|
||||||
leaf-list cli-addr {
|
|
||||||
type inet:ipv4-address;
|
|
||||||
description "client addr";
|
|
||||||
}
|
|
||||||
leaf pool-id {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "pool id";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
container host-reservations {
|
|
||||||
description "This container provides host reservations in the host level.";
|
|
||||||
list binding-info {
|
|
||||||
key cli-id;
|
|
||||||
description
|
|
||||||
"A list records a binding information for each DHCPv4
|
|
||||||
client that has already been alloated IPv4 addresses or prefixes
|
|
||||||
by host reservations.";
|
|
||||||
leaf cli-id {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "client id";
|
|
||||||
}
|
|
||||||
list cli-hw {
|
|
||||||
key hw-address;
|
|
||||||
description "client host id";
|
|
||||||
leaf hw-address {
|
|
||||||
type yang:mac-address;
|
|
||||||
mandatory true;
|
|
||||||
description "HW address";
|
|
||||||
}
|
|
||||||
leaf-list cli-addr {
|
|
||||||
type inet:ipv4-address;
|
|
||||||
description "client addr";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
container packet-stats {
|
|
||||||
description "A container presents the packet statistics related to
|
|
||||||
the DHCPv4 server.";
|
|
||||||
leaf request-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "request counter";
|
|
||||||
}
|
|
||||||
leaf renew-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "renew counter";
|
|
||||||
}
|
|
||||||
leaf rebind-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "rebind counter";
|
|
||||||
}
|
|
||||||
leaf decline-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "decline count";
|
|
||||||
}
|
|
||||||
leaf release-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "release counter";
|
|
||||||
}
|
|
||||||
leaf info-req-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "information request counter";
|
|
||||||
}
|
|
||||||
leaf advertise-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "advertise counter";
|
|
||||||
}
|
|
||||||
leaf confirm-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "confirm counter";
|
|
||||||
}
|
|
||||||
leaf reconfigure-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "reconfigure counter";
|
|
||||||
}
|
|
||||||
leaf relay-forward-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "relay forward counter";
|
|
||||||
}
|
|
||||||
leaf relay-reply-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "relay reply counter";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Notifications
|
|
||||||
*/
|
|
||||||
|
|
||||||
notification notifications {
|
|
||||||
description "dhcpv4 server notification module";
|
|
||||||
container dhcpv4-server-event {
|
|
||||||
description "dhcpv4 server event";
|
|
||||||
container address-pool-running-out {
|
|
||||||
description "Raised when the address pool is going to
|
|
||||||
run out. A threshold for utilization ratio of the pool has
|
|
||||||
been defined in the server feature so that it will notify the
|
|
||||||
administrator when the utilization ratio reaches the
|
|
||||||
threshold, and such threshold is a settable parameter.";
|
|
||||||
leaf total-address-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "Count of total addresses in the pool.";
|
|
||||||
}
|
|
||||||
leaf max-address-count {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "Maximum count of addresses that can be allocated
|
|
||||||
in the pool. This value may be less than count of total
|
|
||||||
addresses.";
|
|
||||||
}
|
|
||||||
leaf allocated-address-conut {
|
|
||||||
type uint32;
|
|
||||||
mandatory true;
|
|
||||||
description "Count of allocated addresses in the pool.";
|
|
||||||
}
|
|
||||||
leaf serv-name {
|
|
||||||
type string;
|
|
||||||
description "server name";
|
|
||||||
}
|
|
||||||
leaf pool-name {
|
|
||||||
type string;
|
|
||||||
mandatory true;
|
|
||||||
description "pool name";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
container invalid-client-detected {
|
|
||||||
description "Raised when the server has found a client which
|
|
||||||
can be regarded as a potential attacker. Some description
|
|
||||||
could also be included.";
|
|
||||||
leaf hw {
|
|
||||||
type yang:mac-address;
|
|
||||||
description "HW address";
|
|
||||||
}
|
|
||||||
leaf description {
|
|
||||||
type string;
|
|
||||||
description "description of the event";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user