所选语种没有对应资源,请选择:

本站点使用Cookies,继续浏览表示您同意我们使用Cookies。Cookies和隐私政策>

提示

尊敬的用户,您的IE浏览器版本过低,为获取更好的浏览体验,请升级您的IE浏览器。

升级
CloudEngine 8800, 7800, 6800, 5800 V200R003C00 配置指南-网络管理与监控

本文档介绍了网络管理与监控的配置,具体包括SNMP配置、RMON配置、NETCONF配置、OpenFlow Agent配置、LLDP配置、NQA配置、镜像配置、报文捕获配置、路径/连通性探测配置、NetStream配置、sFlow配置和iPCA配置。

评分并提供意见反馈 :
华为采用机器翻译与人工审校相结合的方式将此文档翻译成不同语言,希望能帮助您更容易理解此文档的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 华为对于翻译的准确性不承担任何责任,并建议您参考英文文档(已提供链接)。
YANG原理描述

YANG原理描述

功能总览

YANG使用模块和子模块对数据进行建模,可以从其他模块中导入数据,也可以从子模块中引用数据。YANG定义的垂直结构可以扩展,使得模块能够为另一个模块增加节点,这种扩展是有条件的,只有满足特定的条件才能扩展成功。

YANG建模得到的数据是树形结构,其中每一个节点都有名字、值和子节点。YANG为这些节点以及节点之间的交互,提供明确清晰的描述。

YANG模型还能描述数据的约束,通过是否存在特定节点或节点数值等条件来约束节点的呈现与操作。

YANG模块可以被转换为等价的XML格式,称为YIN(YANG Independent Notation),这使得相关的应用可以通过XML解析器或者XSLT脚本进行操作。

YANG定义了一系列的内部数据类型,也支持扩展新的数据类型。YANG是一种可扩展语言,允许标准制定者、设备供应商或个人定义新的声明(statement),这些声明能够和标准的YANG声明共存。

语言总览

  • 模块/子模块(Module/Submodule)

    包含三种类型声明

    • 模块头声明:模块的描述信息。
    • 版本声明:模块的发布日期信息。
    • 定义声明:数据模型定义的具体内容。

    YANG示例

    Contents of "acme-system.yang"
    module acme-system {
     namespace "http://acme.example.com/system";
     prefix "acme";
     organization "ACME Inc.";
     contact "joe@acme.example.com";
     description
     "The module for entities implementing the ACME system.";
     revision 2007-06-09 {
      description "Initial revision.";
     }
     container system {
      leaf host-name {
       type string;
       description "Hostname for this system";
      }
      leaf-list domain-search {
       type string;
       description "List of domain names to search";
      }
      container login {
       leaf message {
        type string;
        description
        "Message given at start of login session";
       }
       list user {
        key "name";
        leaf name {
         type string;
        }
       }
      }
     }
    }
  • 数据建模基础(Data Modeling Basics)

    YANG定义了四种用于数据建模的节点类型。

    • 叶子节点(leaf)

      Leaf用于描述整数或者字符串等简单数据。它有且仅有一个特定类型的值,且没有子节点。

      YANG示例

      leaf host-name {
       type string;
       description "Hostname for this system";
      }

      NETCONF XML示例

      <host-name>my.example.com</host-name>
    • 节点列表(leaf-list)

      Leaf-list是一系列具备特定类型的叶子节点的集合。

      YANG示例

      leaf-list domain-search {
       type string;
       description "List of domain names to search";
      }

      NETCONF XML示例

      <domain-search>high.example.com</domain-search>
      <domain-search>low.example.com</domain-search>
      <domain-search>everywhere.example.com</domain-search>
    • 容器节点(container)

      Container用来描述若干相关节点的集合。Container节点只有子节点,没有值。Container可能包含任何类型、任何数量的子节点(包括leaf,list,leaf-list以及container)。

      YANG示例

      container system {
       container login {
        leaf message {
         type string;
         description
         "Message given at start of login session";
        }
       }
      }

      NETCONF XML示例

      <system>
       <login>
        <message>Good morning</message>
       </login>
      </system>
    • 列表节点(list)

      List定义了一系列节点的集合,这些节点必须定义关键字,能够包含任意类型、任意数量的子节点(包括leaf,list,container)。

      YANG示例

      list user {
       leaf name {
        type string;
       }
       leaf full-name {
        type string;
       }
       leaf class {
        type string;
       }
      }

      NETCONF XML示例

      <user>
       <name>glocks</name>
       <full-name>Goldie Locks</full-name>
       <class>intruder</class>
      </user>
      <user>
       <name>snowey</name>
       <full-name>Snow White</full-name>
       <class>free-loader</class>
      </user>
      <user>
       <name>rzell</name>
       <full-name>Rapun Zell</full-name>
       <class>tower</class>
      </user>
  • 状态数据(State Date)

    YANG能够通过<config>关键字声明对状态数据和配置数据进行建模。当一个节点打上了“config false”的标签,它的子节点就打上了状态数据的标签。通过<get>操作查询此类节点时,其父节点的container、list或key leaf也会一同出现在查询结果中,为这个状态数据节点提供明确的上下文环境。

    在下面的例子中,每个接口都定义了两个leaf,一个是配置速率(configured speed),另一个是观察速率(observed speed)。观察速率是不可配置的,可通过NETCONF的<get>操作获取,但是不能通过<get-config>操作获取。

    list interface {
     leaf configured-speed {
      key "name";
      config true;
      leaf name {
       type string;
      }
      leaf speed {
       enum 10m;
       enum 100m;
       enum auto;
      }
     }
     leaf observed-speed {
      type unit32
      config false;
     }
    }
  • 基本数据类型(Built-in Types)

    +---------------------+-------------------------------------+
    | Name                | Description                         |
    +---------------------+-------------------------------------+
    | binary              | Any binary data                     |
    | bits                | A set of bits or flags              |
    | boolean             | "true" or "false"                   |
    | decimal64           | 64-bit signed decimal number        |
    | empty               | A leaf that does not have any value |
    | enumeration         | Enumerated strings                  |
    | identityref         | A reference to an abstract identity |
    | instance-identifier | References a data tree node         |
    | int8                | 8-bit signed integer                |
    | int16               | 16-bit signed integer               |
    | int32               | 32-bit signed integer               |
    | int64               | 64-bit signed integer               |
    | leafref             | A reference to a leaf instance      |
    | string              | Human-readable string               |
    | uint8               | 8-bit unsigned integer              |
    | uint16              | 16-bit unsigned integer             |
    | uint32              | 32-bit unsigned integer             |
    | uint64              | 64-bit unsigned integer             |
    | union               | Choice of member types              |
    +---------------------+-------------------------------------+
  • 派生数据类型

    YANG能够使用“typedef”通过基本数据类型定义派生类型。

    YANG示例

    typedef percent {
     type uint8 {
      range "0 .. 100";
     }
     description "Percentage";
    }
    leaf completed {
     type percent;
    }
    

    NETCONF XML示例

    <completed>20</completed>
  • 可重用节点组(grouping)

    可以使用“grouping”声明将一组节点放到可重用的集合中。一个节点组定义了节点的集合,该集合可以使用“uses”声明实例化。

    YANG示例

    grouping target {
     leaf address {
      type inet:ip-address;
      description “Target IP address”;
     }
     leaf port {
      type inet:port-number;
      description “Target port number”;
     }
    }
    container peer {
     container destination {
      uses target;
     }
    }

    NETCONF XML示例

    <peer>
     <destination>
      <address>10.1.1.1</address>
      <port>830</port>
     </destination>
    </peer>

    grouping可以根据被调用时的用途进行优化,重写特定的声明来覆盖原来grouping的定义。在下面的例子中,description被重定义:

    container connection {
     container source {
      uses target {
       refine "address" {
        description "Source IP address";
       }
       refine "port" {
        description "Source port number";
       }
      }
     }
     container destination {
      uses target {
       refine "address" {
        description "Destination IP address";
       }
       refine "port" {
        description "Destination port number";
       }
      }
     }
    }
  • 选择节点(choice)

    YANG能够使用“choice”和“case”声明不能同时出现的节点。“choice”声明包含多个“case”声明,每个“case”声明都可能包含多个节点,但是每个节点都应该只在一个“case”中出现。

    当choice中的一个case生效,其他case将被隐式删除,设备会强制执行这个约束,防止出现非法的配置。

    “choice”和“case”节点只会出现在模型的描述中,不能出现在数据或者NETCONF消息中。

    YANG示例

    container food {
     choice snack {
      case sports-arena {
       leaf pretzel {
        type empty;
       }
       leaf beer {
        type empty;
       }
      }
      case late-night {
       leaf chocolate {
        type enumeration {
         enum dark;
         enum milk;
         enum first-available;
        }
       }
      }
     }
    }
    

    NETCONF XML示例

    <food>
     <pretzel/>
     <beer/>
    </food>
  • 扩展数据类型(augment)

    YANG允许通过augment将外部的节点插入到数据模型中。这种方式比较有用,例如,供应商以可互操作的方式向标准数据模型插入供应商特定的参数。

    “augment”声明定义了在数据模型树形结构中,新的节点插入的位置。“when”声明了新节点生效的条件。

    YANG示例

    augment /system/login/user {
     when "class != 'wheel'";
     leaf uid {
      type uint16 {
       range "1000 .. 30000";
      }
     }
    }

    上述示例定义了一个“uid”的leaf节点,该节点仅在user的class不等于wheel情况下才有效。

  • RPC

    YANG提供了RPC关键字,可以对NETCONF中的RPC进行建模,包含操作名称,输入参数和输出参数。

    YANG示例

    rpc activate-software-image {
     input {
      leaf image-name {
       type string;
      }
     }
     output {
      leaf status {
       type string;
      }
     }
    }

    NETCONF XML示例

    <rpc message-id="101"
    	xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
     <activate-software-image xmlns="http://acme.example.com/system">
      <image-name>acmefw-2.3</image-name>
     </activate-software-image>
    </rpc>
    
    <rpc-reply message-id="101"
    	xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
     <status xmlns="http://acme.example.com/system">
      The image acmefw-2.3 is being installed.
     </status>
    </rpc-reply>
  • 通知机制(Notification)

    YANG提供了notification关键字来对通知机制进行建模。

    YANG示例

    notification link-failure {
     description "A link failure has been detected";
     leaf if-name {
      type leafref {
       path "/interface/name";
      }
     }
     leaf if-admin-status {
      type admin-status;
     }
     leaf if-oper-status {
      type oper-status;
     }
    }

    NETCONF XML示例

    <notification
    xmlns="urn:ietf:params:netconf:capability:notification:1.0">
     <eventTime>2007-09-01T10:00:00Z</eventTime>
     <link-failure xmlns="http://acme.example.com/system">
     <if-name>so-1/2/3.0</if-name>
     <if-admin-status>up</if-admin-status>
     <if-oper-status>down</if-oper-status>
     </link-failure>
    </notification>
翻译
下载文档
更新时间:2019-05-05

文档编号:EDOC1100004380

浏览量:19831

下载量:322

平均得分:
本文档适用于这些产品

相关版本

相关文档

Share
上一页 下一页