netconfcentral logo

ietf-twamp@2015-06-30



  module ietf-twamp {

    yang-version 1;

    namespace
      "urn:ietf:params:xml:ns:yang:ietf-twamp";

    prefix ietf-twamp;

    import ietf-inet-types {
      prefix inet;
    }

    organization
      "IETF IPPM (IP Performance Metrics) Working Group";

    contact
      "draft-cmzrjp-ippm-twamp-yang@tools.ietf.org";

    description "TWAMP Data Model";

    revision "2015-06-30" {
      description
        "01 version. RFC5357, RFC5618, RFC5938 and RFC6038
    is covered. draft-ietf-ippm-metric-registry is also considered";
      reference
        "draft-cmzrjp-ippm-twamp-yang";

    }


    feature control-client {
      description
        "This feature relates to the device functions as
    the TWAMP Control-Client.";
    }

    feature server {
      description
        "This feature relates to the device functions as
    the TWAMP Server.";
    }

    feature session-sender {
      description
        "This feature relates to the device functions as
    the TWAMP Session-Sender.";
    }

    feature session-reflector {
      description
        "This feature relates to the device functions as
    the TWAMP Session-Reflector.";
    }

    typedef ctrl-connection-state {
      type enumeration {
        enum "active" {
          value 0;
          description
            "Control session is active.";
        }
        enum "idle" {
          value 1;
          description
            "Control session is idle.";
        }
      }
      description "Control connection state";
    }

    typedef mode {
      type bits {
        bit unauthenticated {
          position 0;
          description "Unauthenticated";
        }
        bit authenticated {
          position 1;
          description "Authenticated";
        }
        bit encrypted {
          position 2;
          description "Encrypted";
        }
        bit unauth-test-encrpyt-control {
          position 3;
          description
            "Mixed Security Mode per RFC 5618. Test
        protocol security mode in Unauthenticated mode,
        Control protocol in Encrypted mode.";
        }
        bit individual-session-control {
          position 4;
          description
            "Individual session control per RFC5938.";
        }
        bit reflect-octets {
          position 5;
          description
            "Reflect octets capability per RFC6038.";
        }
        bit symmetrical-size {
          position 6;
          description
            "Symmetrical size per RFC6038.";
        }
      }
      description
        "Authentication mode bit mask";
    }

    typedef test-session-state {
      type enumeration {
        enum "ok" {
          value 0;
          description
            "Test session is accepted.";
        }
        enum "failed" {
          value 1;
          description
            "Failure, reason unspecified (catch-all).";
        }
        enum "internal-error" {
          value 2;
          description "Internal error.";
        }
        enum "not-supported" {
          value 3;
          description
            "Some aspect of request is not supported.";
        }
        enum "permanent-resource-limit" {
          value 4;
          description
            "Cannot perform request due to
        permanent resource limitations.";
        }
        enum "temp-resource-limit" {
          value 5;
          description
            "Cannot perform request due to
        temporary resource limitations.";
        }
      }
      description "Test session state";
    }

    typedef server-ctrl-connection-state {
      type enumeration {
        enum "active" {
          value 0;
          description "Active";
        }
        enum "servwait" {
          value 1;
          description "Servwait";
        }
      }
      description
        "Server control connection state";
    }

    typedef fill-mode {
      type enumeration {
        enum "zero" {
          value 0;
          description "Zero";
        }
        enum "random" {
          value 1;
          description "Random";
        }
      }
      description
        "Indicates whether the padding added to the
    UDP test packets will contain pseudo-random numbers, or
    whether it should consist of all zeroes.";
    }

    typedef units {
      type enumeration {
        enum "seconds" {
          value 0;
          description "Seconds";
        }
        enum "milliseconds" {
          value 1;
          description "Milliseconds";
        }
        enum "microseconds" {
          value 2;
          description "Microseconds";
        }
        enum "nanoseconds" {
          value 3;
          description "Nanoseconds";
        }
      }
      description "Time units";
    }

    typedef sender-session-state {
      type enumeration {
        enum "setup" {
          value 0;
          description
            "Test session is active.";
        }
        enum "failure" {
          value 1;
          description
            "Test session is idle.";
        }
      }
      description "Sender session state.";
    }

    grouping maintenance-statistics {
      description
        "Maintenance statistics grouping";
      leaf sent-packets {
        type uint32;
        config false;
        description "Packets sent";
      }

      leaf rcv-packets {
        type uint32;
        config false;
        description "Packets received";
      }

      leaf last-sent-seq {
        type uint32;
        config false;
        description
          "Last sent sequence number";
      }

      leaf last-rcv-seq {
        type uint32;
        config false;
        description
          "Last received sequence number";
      }
    }  // grouping maintenance-statistics

    container twamp {
      description "Top level container";
      container twamp-client {
        if-feature control-client;
        presence "twamp-client";
        description "Twamp client container";
        leaf client-admin-state {
          type boolean;
          mandatory true;
          description
            "Indicates whether this device is allowed to run
        TWAMP to initiate control/test sessions";
        }

        list mode-preference-chain {
          key "priority";
          unique "mode";
          description
            "Authentication mode preference";
          leaf priority {
            type uint16;
            description "priority";
          }

          leaf mode {
            type mode;
            description
              "Authentication mode bit mask";
          }
        }  // list mode-preference-chain

        list key-chain {
          key "key-id";
          description "Key chain";
          leaf key-id {
            type string {
              length "1..80";
            }
            description "Key ID";
          }

          leaf secret-key {
            type string;
            description "Secret key";
          }
        }  // list key-chain

        list twamp-client-ctrl-connection {
          key "ctrl-connection-name";
          description
            "Twamp client control connections";
          leaf ctrl-connection-name {
            type string;
            description
              "A unique name used as a key to identify this
            individual TWAMP control connection on the
            Control-Client device.";
          }

          leaf client-ip {
            type inet:ip-address;
            description "Client IP address";
          }

          leaf server-ip {
            type inet:ip-address;
            mandatory true;
            description "Server IP address";
          }

          leaf server-tcp-port {
            type inet:port-number;
            default "862";
            description "Server tcp port";
          }

          leaf dscp {
            type inet:dscp;
            default "0";
            description
              "The DSCP value to be placed in the IP header
            of the TWAMP TCP Control packets generated
            by the Control-Client";
          }

          leaf key-id {
            type string {
              length "1..80";
            }
            description "Key ID";
          }

          leaf max-count {
            type uint32 {
              range "1024..4294967295";
            }
            default '32768';
            description "Max count value.";
          }

          leaf client-tcp-port {
            type inet:port-number;
            config false;
            description "Client TCP port";
          }

          leaf server-start-time {
            type uint64;
            config false;
            description
              "The Start-Time advertized by the Server in
          the Server-Start message";
          }

          leaf ctrl-connection-state {
            type ctrl-connection-state;
            config false;
            description
              "Control connection state";
          }

          leaf selected-mode {
            type mode;
            config false;
            description
              "The TWAMP mode that the Control-Client has
          chosen for this control connection as set in the Mode
          field of the Set-Up-Response message";
          }

          leaf token {
            type binary {
              length "64";
            }
            config false;
            description
              "64 octets, containing the concatenation of a
            16-octet challenge, a 16-octet AES Session-key used
            for encryption, and a 32-octet HMAC-SHA1 Session-key
            used for authentication";
          }

          leaf client-iv {
            type binary {
              length "16";
            }
            config false;
            description
              "16 octets, Client-IV is generated randomly
            by the Control-Client.";
          }

          list twamp-session-request {
            key "test-session-name";
            description
              "Twamp session requests";
            leaf test-session-name {
              type string;
              description
                "A unique name for this test session to be
            used as a key for this test session on the
            Control-Client.";
            }

            leaf sender-ip {
              type inet:ip-address;
              description
                "Sender IP address";
            }

            leaf sender-udp-port {
              type inet:port-number;
              description "Sender UDP port";
            }

            leaf reflector-ip {
              type inet:ip-address;
              mandatory true;
              description
                "Reflector IP address.";
            }

            leaf reflector-udp-port {
              type inet:port-number;
              description
                "Reflector UDP port. If this value is not
            set, the device shall use the same port number as
            defined in the server-tcp-port parameter of this
            twamp-session-request's
            parent client-control-connection.";
            }

            leaf timeout {
              type uint64;
              default "2";
              description
                "The time (in seconds)Session-Reflector MUST
            wait after receiving a Stop-Session message.";
            }

            leaf padding-length {
              type uint32 {
                range "64..4096";
              }
              description
                "The number of bytes of padding that should
                be added to the UDP test packets generated by the
                sender. Jumbo sized packets supported.";
            }

            leaf dscp {
              type inet:dscp;
              description
                "The DSCP value to be placed in the UDP
            header of TWAMP-Test packets generated by the
            Session-Sender, and in the UDP header of the TWAMP-Test
            response packets generated by the Session-Reflector
            for this test session.";
            }

            leaf start-time {
              type uint64;
              default "0";
              description
                "Time when the session is to be started
            (but not before the Start-Sessions command is issued).
            This value is placed in the Start Time field of the
            Request-TW-Session message. The default value of 0
            indicates that the session will be started as soon
            as the Start-Sessions message is received.";
            }

            leaf repeat {
              type boolean;
              default "false";
              description
                "If the test session is to be run repeatedly.
            The default value of repeat is False, indicating that
            once the session has completed, it will not be
            renegotiated and restarted";
            }

            leaf repeat-interval {
              when "../repeat='true'" {
                description
                  "When repeat is true";
              }
              type uint32;
              description
                "Repeat interval (in minutes)";
            }

            list pm-reg-list {
              key "pm-index";
              description
                "A list of one or more pm-index values,
            which communicate packet stream characteristics and one
            or more metrics to be measured.";
              leaf pm-index {
                type uint16;
                description
                  "One or more Numerical index values of a
              Registered Metric in the Performance Metric Registry";
              }
            }  // list pm-reg-list

            leaf test-session-state {
              type test-session-state;
              config false;
              description
                "Test session state";
            }

            leaf sid {
              type string;
              config false;
              description
                "The SID allocated by the Server for
            this test session";
            }
          }  // list twamp-session-request
        }  // list twamp-client-ctrl-connection
      }  // container twamp-client

      container twamp-server {
        if-feature server;
        presence "twamp-server";
        description "Twamp sever container";
        leaf server-admin-state {
          type boolean;
          mandatory true;
          description
            "Indicates whether this device is allowed to run
          TWAMP to respond to control/test sessions";
        }

        leaf server-tcp-port {
          type inet:port-number;
          default "862";
          description
            "This parameter defines the well known TCP port
        number that is used by TWAMP.";
        }

        leaf servwait {
          type uint32 {
            range "1..604800";
          }
          default '900';
          description
            "SERVWAIT (TWAMP Control (TCP) session timeout),
          default value is 900";
        }

        leaf dscp {
          type inet:dscp;
          description
            "The DSCP value to be placed in the IP header of
        TCP TWAMP-Control packets generated by the Server";
        }

        leaf count {
          type uint32 {
            range "1024..4294967295";
          }
          description
            "Parameter used in deriving a key from a
        shared secret ";
        }

        leaf max-count {
          type uint32 {
            range "1024..4294967295";
          }
          default '32768';
          description "Max count value.";
        }

        leaf modes {
          type mode;
          description
            "The bit mask of TWAMP Modes this Server
        instance is willing to support.";
        }

        list key-chain {
          key "key-id";
          description
            "KeyIDs with the respective secret keys.";
          leaf key-id {
            type string {
              length "1..80";
            }
            description "Key IDs.";
          }

          leaf secret-key {
            type string;
            description "Secret keys.";
          }
        }  // list key-chain

        list twamp-server-ctrl-connection {
          key "client-ip client-tcp-port server-ip server-tcp-port";
          config false;
          description
            "Twamp server control connections";
          leaf client-ip {
            type inet:ip-address;
            description "Client IP address";
          }

          leaf client-tcp-port {
            type inet:port-number;
            description "Client TCP port";
          }

          leaf server-ip {
            type inet:ip-address;
            description "Server IP address";
          }

          leaf server-tcp-port {
            type inet:port-number;
            description "Server TCP port";
          }

          leaf server-ctrl-connection-state {
            type server-ctrl-connection-state;
            description
              "Server control connection state";
          }

          leaf dscp {
            type inet:dscp;
            description
              "The DSCP value used in the IP header of the
          TCP control packets sent by the Server for this control
          connection. This will usually be the same value as is
          configured for twamp-server:dscp under the twamp-server.
          However, in the event that the user re-configures
          twamp-server:dscp after this control connection is already
          in progress, this read-only value will show the actual
          dscp value in use by this control connection.";
          }

          leaf selected-mode {
            type mode;
            description
              "The mode that was chosen for this control
          connection as set in the Mode field of the
          Set-Up-Response message.";
          }

          leaf key-id {
            type string {
              length "1..80";
            }
            description
              "The key-id value that is in use by this
                  control connection.";
          }

          leaf count {
            type uint32 {
              range "1024..4294967295";
            }
            description
              "The count value that is in use by this control
            connection. This will usually be the same value as is
            configured under twamp-server. However, in the event that
            the user re-configured twamp-server:count after this
            control connection is already in progress, this read-only
            value will show the different count that is in use for
            this control connection.";
          }

          leaf max-count {
            type uint32 {
              range "1024..4294967295";
            }
            description
              "The max-count value that is in use by this
            control connection. This will usually be the same value
            as is configured under twamp-server. However, in the
            event that the user re-configured twamp-server:max-count
            after this control connection is already in progress,
            this read-only value will show the different max-count
            that is in use for this control connection.";
          }

          leaf salt {
            type binary {
              length "16";
            }
            description
              "Salt MUST be generated pseudo-randomly";
          }

          leaf server-iv {
            type binary {
              length "16";
            }
            description
              "16 octets, Server-IV is generated randomly
          by the Control-Client.";
          }

          leaf challenge {
            type binary {
              length "16";
            }
            description
              "Challenge is a random sequence of octets
          generated by the Server";
          }
        }  // list twamp-server-ctrl-connection
      }  // container twamp-server

      container twamp-session-sender {
        if-feature session-sender;
        description
          "Twamp session sender container";
        list twamp-sender-test-session {
          key "test-session-name";
          description
            "Twamp sender test sessions";
          leaf test-session-name {
            type string;
            description
              "A unique name for this test session to be
          used as a key for this test session by the Session-Sender
          logical entity.";
          }

          leaf ctrl-connection-name {
            type string;
            config false;
            description
              "The name of the parent control connection
          that is responsible for negotiating this test session.";
          }

          leaf fill-mode {
            type fill-mode;
            default 'zero';
            description
              "Indicates whether the padding added to the
          UDP test packets will contain pseudo-random numbers, or
          whether it should consist of all zeroes.";
          }

          leaf number-of-packets {
            type uint32;
            description
              "The overall number of UDP test packets to be
            transmitted by the sender for this test session.";
          }

          choice packet-distribution {
            description
              "Packet distributions, poisson or periodic";
            case periodic {
              leaf periodic-interval {
                type uint32;
                description
                  "Periodic interval";
              }

              leaf periodic-interval-units {
                type units;
                description
                  "Periodic interval units";
              }
            }  // case periodic

            case poisson {
              leaf lambda {
                type uint32;
                description
                  "The average rate of
                          packet transmission.";
              }

              leaf lambda-units {
                type uint32;
                description "Lambda units.";
              }

              leaf max-interval {
                type uint32;
                description
                  "maximum time between packet
              transmissions.";
              }

              leaf truncation-point-units {
                type units;
                description
                  "Truncation point units";
              }
            }  // case poisson
          }  // choice packet-distribution

          leaf sender-session-state {
            type sender-session-state;
            config false;
            description
              "Sender session state.";
          }

          uses maintenance-statistics;
        }  // list twamp-sender-test-session
      }  // container twamp-session-sender

      container twamp-session-reflector {
        if-feature session-reflector;
        description
          "Twamp session reflector container";
        leaf refwait {
          type uint32 {
            range "1..604800";
          }
          default '900';
          description
            "REFWAIT (TWAMP test session timeout),
          the default value is 900";
        }

        list twamp-reflector-test-session {
          key "sender-ip sender-udp-port reflector-ip reflector-udp-port";
          config false;
          description
            "Twamp reflector test sessions";
          leaf sid {
            type string;
            description
              "An auto-allocated identifier for this test
          session, that is unique within the context of this
          Server/Session-Reflector device only. ";
          }

          leaf sender-ip {
            type inet:ip-address;
            description "Sender IP address.";
          }

          leaf sender-udp-port {
            type inet:port-number;
            description "Sender UDP port.";
          }

          leaf reflector-ip {
            type inet:ip-address;
            description
              "Reflector IP address.";
          }

          leaf reflector-udp-port {
            type inet:port-number;
            description
              "Reflector UDP port.";
          }

          leaf parent-connection-client-ip {
            type inet:ip-address;
            description
              "Parent connction client IP address.";
          }

          leaf parent-connection-client-tcp-port {
            type inet:port-number;
            description
              "Parent connection client TCP port.";
          }

          leaf parent-connection-server-ip {
            type inet:ip-address;
            description
              "Parent connection server IP address.";
          }

          leaf parent-connection-server-tcp-port {
            type inet:port-number;
            description
              "Parent connection server TCP port";
          }

          leaf dscp {
            type inet:dscp;
            description
              "The DSCP value present in the IP header of
          TWAMP UDP test packets belonging to this test session.";
          }

          uses maintenance-statistics;
        }  // list twamp-reflector-test-session
      }  // container twamp-session-reflector
    }  // container twamp
  }  // module ietf-twamp