Commit 4f224420 authored by Piotr Strzy¿ewski's avatar Piotr Strzy¿ewski Committed by Tomek Mrugalski
Browse files

Initial version of YANG DHCPv4 server model

parent 6e5b5fdc
module ietf-dhcpv4-server {
yang-version 1.1;
namespace "urn:ietf:params:xml:ns:yang:ietf-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 a DHCPv4 server.";
revision 2018-07-14 {
description "Initial revision; mostly based on DHCPv6 version";
}
/*
* 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;
mandatory true;
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 yang:timeticks;
mandatory true;
description "renew time";
}
leaf rebind-time {
type yang:timeticks;
mandatory true;
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;
mandatory true;
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";
}
mandatory true;
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";
type string;
}
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.";
container hw {
description "HW address";
uses yang:mac-address;
}
leaf description {
type string;
description "description of the event";
}
}
}
}
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment