netconfcentral logo

ietf-dhcpv6-relay@2018-09-04



  module ietf-dhcpv6-relay {

    yang-version 1.1;

    namespace
      "urn:ietf:params:xml:ns:yang:ietf-dhcpv6-relay";

    prefix dhcpv6-relay;

    import ietf-inet-types {
      prefix inet;
    }
    import ietf-dhcpv6-options {
      prefix dhcpv6-options;
    }
    import ietf-dhcpv6-types {
      prefix dhcpv6-types;
    }
    import ietf-interfaces {
      prefix if;
    }

    organization
      "IETF DHC (Dynamic Host Configuration) Working group";

    contact
      "cuiyong@tsinghua.edu.cn
     lh.sunlinh@gmail.com
     ian.farrer@telekom.de
     sladjana.zechlin@telekom.de
     hezihao9512@gmail.com";

    description
      "This model defines a YANG data model that can be
     used to configure and manage a DHCPv6 relay.";

    revision "2018-09-04" {
      description "";
      reference
        "I-D: draft-ietf-dhc-dhcpv6-yang";

    }

    revision "2018-03-04" {
      description
        "Resolved most issues on the DHC official
    github";
      reference
        "I-D: draft-ietf-dhc-dhcpv6-yang";

    }

    revision "2017-12-22" {
      description
        "Resolve most issues on Ian's github.";
      reference
        "I-D: draft-ietf-dhc-dhcpv6-yang";

    }

    revision "2017-11-24" {
      description
        "First version of the separated relay specific
       YANG model.";
      reference
        "I-D: draft-ietf-dhc-dhcpv6-yang";

    }


    container relay {
      presence "Enables the relay";
      description "DHCPv6 relay portion";
      container relay-config {
        description
          "This container contains the configuration data
        of the relay.";
        container relay-attributes {
          description
            "A container describes some basic attributes of the relay
           agent including some relay agent specific options data that
           need to be configured previously.
           Such options include Remote-Id option and Subscriber-Id
           option.";
          leaf name {
            type string;
            description "Relay agent name";
          }

          leaf description {
            type string;
            description
              "Textual description of the relay agent";
          }

          leaf-list dest-addrs {
            type inet:ipv6-address;
            description
              "Each DHCPv6 relay agent may be configured with a list
             of destination addresses.
             This node defines such a list of IPv6 addresses that
             may include unicast addresses, multicast addresses or
             other addresses.";
          }

          list subscribers {
            key "subscriber";
            description "Subscribers";
            leaf subscriber {
              type uint8;
              mandatory true;
              description "Subscriber";
            }

            leaf subscriber-id {
              type string;
              mandatory true;
              description "Subscriber id";
            }
          }  // list subscribers

          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";
            }
          }  // list remote-host

          uses dhcpv6-types:vendor-infor;
        }  // container relay-attributes

        container rsoo-option-sets {
          description
            "DHCPv6 relay agent could provide some information that would
          be useful to DHCPv6 client.
          Since relay agent cannot provide options directly to the
          client, RSOO-enabled options are defined to propose options
          for the server to send to the client.
          This container models such RSOO-enabled options.";
          reference
            "RFC6422";

          list option-set {
            key "option-set-id";
            description
              "This list under the 'rsoo-option-sets' container is similar
             to the that defined in server module.
             It allows the relay to implement several sets of RSOO-enabled
             options for different interfaces.
             The list only includes the EAP Re-authentication Protocol
             (ERP) Local Domain Name DHCPv6 Option defined in RFC6440,
             since it is the only one RSOO-enabled options accepted by
             IANA so far.";
            leaf option-set-id {
              type uint32;
              description "Option sed id";
            }

            uses dhcpv6-options:relay-supplied-option-definitions;
          }  // list option-set
        }  // container rsoo-option-sets

        list relay-if {
          key "if-name";
          description
            "A relay agent may have several interfaces, we should provide
         a way to configure and manage parameters on the interface-level.
         A list that describes specific interfaces and their corresponding
         parameters is employed to fulfill the configuration. Here we use
         a string called 'if-name' as the key of list.";
          leaf if-name {
            type if:interface-ref;
            mandatory true;
            description "Interface name";
          }

          leaf interface-id {
            type string;
            description "Interface id";
          }

          leaf ipv6-address {
            type inet:ipv6-address;
            description
              "IPv6 address for this interface";
          }

          leaf rsoo-option-set-id {
            type leafref {
              path "/relay/relay-config/rsoo-option-sets/option-set/option-set-id";
            }
            description
              "Configured Relay Supplied Option set";
          }

          list next-entity {
            key "dest-addr";
            description
              "This node defines a list that is used to describe the
             next hop entity of this relay distinguished by their
             addresses.";
            leaf dest-addr {
              type inet:ipv6-address;
              mandatory true;
              description "Destination addr";
            }

            leaf available {
              type boolean;
              mandatory true;
              description
                "Whether the next entity is available or not";
            }

            leaf multicast {
              type boolean;
              mandatory true;
              description
                "Whether the address is multicast or not";
            }

            leaf server {
              type boolean;
              mandatory true;
              description
                "Whether the next entity is a server";
            }
          }  // list next-entity
        }  // list relay-if
      }  // container relay-config

      container relay-state {
        config false;
        description "State data of relay";
        list relay-if {
          key "if-name";
          description
            "A relay agent may have several interfaces, we should provide
         a way to configure and manage parameters on the interface-level.
         A list that describes specific interfaces and their corresponding
         parameters is employed to fulfill the configuration. Here we use
         a string called 'if-name' as the key of list.";
          leaf if-name {
            type string;
            mandatory true;
            description "Interface name";
          }

          list pd-route {
            key "pd-route-id";
            description "pd route";
            leaf pd-route-id {
              type uint8;
              mandatory true;
              description "PD route id";
            }

            leaf requesting-router-id {
              type uint32;
              mandatory true;
              description
                "Requesting router id";
            }

            leaf delegating-router-id {
              type uint32;
              mandatory true;
              description
                "Delegating router id";
            }

            leaf next-router {
              type inet:ipv6-address;
              mandatory true;
              description "Next router";
            }

            leaf last-router {
              type inet:ipv6-address;
              mandatory true;
              description "Previous router";
            }
          }  // list pd-route

          list next-entity {
            key "dest-addr";
            description
              "This node defines a list that is used to
            describe the next hop entity of this relay agent.
            Different entities are distinguished by their
            addresses.";
            leaf dest-addr {
              type inet:ipv6-address;
              mandatory true;
              description "destination addr";
            }

            container packet-stats {
              description
                "packet statistics";
              leaf solicit-rvd-count {
                type uint32;
                mandatory true;
                description
                  "solicit received counter";
              }

              leaf request-rvd-count {
                type uint32;
                mandatory true;
                description
                  "request received counter";
              }

              leaf renew-rvd-count {
                type uint32;
                mandatory true;
                description
                  "renew received counter";
              }

              leaf rebind-rvd-count {
                type uint32;
                mandatory true;
                description
                  "rebind received counter";
              }

              leaf decline-rvd-count {
                type uint32;
                mandatory true;
                description
                  "decline received counter";
              }

              leaf release-rvd-count {
                type uint32;
                mandatory true;
                description
                  "release received counter";
              }

              leaf info-req-rvd-count {
                type uint32;
                mandatory true;
                description
                  "information request counter";
              }

              leaf relay-for-rvd-count {
                type uint32;
                mandatory true;
                description
                  "relay forward received counter";
              }

              leaf relay-rep-rvd-count {
                type uint32;
                mandatory true;
                description
                  "relay reply received counter";
              }

              leaf packet-to-cli-count {
                type uint32;
                mandatory true;
                description
                  "packet to client counter";
              }

              leaf adver-sent-count {
                type uint32;
                mandatory true;
                description
                  "advertisement sent counter";
              }

              leaf confirm-sent-count {
                type uint32;
                mandatory true;
                description
                  "confirm sent counter";
              }

              leaf reply-sent-count {
                type uint32;
                mandatory true;
                description
                  "reply sent counter";
              }

              leaf reconfig-sent-count {
                type uint32;
                mandatory true;
                description
                  "reconfigure sent counter";
              }

              leaf relay-for-sent-count {
                type uint32;
                mandatory true;
                description
                  "relay forward sent counter";
              }

              leaf relay-rep-sent-count {
                type uint32;
                mandatory true;
                description
                  "relay reply sent counter";
              }
            }  // container packet-stats
          }  // list next-entity
        }  // list relay-if

        container relay-stats {
          config false;
          description "Relay statistics";
          leaf cli-packet-rvd-count {
            type uint32;
            mandatory true;
            description
              "Client packet received counter";
          }

          leaf relay-for-rvd-count {
            type uint32;
            mandatory true;
            description
              "Relay forward received counter";
          }

          leaf relay-rep-rvd-count {
            type uint32;
            mandatory true;
            description
              "Relay reply received counter";
          }

          leaf packet-to-cli-count {
            type uint32;
            mandatory true;
            description
              "Packet to client counter";
          }

          leaf relay-for-sent-count {
            type uint32;
            mandatory true;
            description
              "Relay forward sent counter";
          }

          leaf relay-rep-sent-count {
            type uint32;
            mandatory true;
            description
              "Relay reply sent counter";
          }

          leaf discarded-packet-count {
            type uint32;
            mandatory true;
            description
              "Discarded packet counter";
          }
        }  // container relay-stats
      }  // container relay-state
    }  // container relay

    notification notifications {
      description
        "DHCPv6 relay notification module";
      container dhcpv6-relay-event {
        description "DHCPv6 relay event";
        container topo-changed {
          description
            "Raised when the topology of the relay agent is changed.";
          leaf relay-if-name {
            type string;
            mandatory true;
            description
              "Relay interface name";
          }

          leaf first-hop {
            type boolean;
            mandatory true;
            description "First hop";
          }

          leaf last-entity-addr {
            type inet:ipv6-address;
            mandatory true;
            description
              "Last entity address";
          }
        }  // container topo-changed
      }  // container dhcpv6-relay-event
    }  // notification notifications
  }  // module ietf-dhcpv6-relay