7.16. “通知”声明

notification”语句用于定义通知。它需要一个参数,它是一个标识符,后面是一个包含详细通知信息的子状态块。 “notification”语句在模式树中定义了一个通知节点。

通知可以在模块的顶层定义,也可以连接到模式树中的特定容器或列表数据节点。

通知不能在rpcaction或其他通知中定义,即通知节点不能在模式树中有一个rpcaction或通知节点作为其祖先之一。例如,这意味着如果在rpc定义中使用在其节点层次结构中包含通知的分组,则这是一个错误。

一个通知不能有一个没有“key”语句的列表节点的祖先节点。

由于无法在“case”语句中定义通知,因此如果在案例定义中使用在其节点层次结构顶部包含通知的分组,则会发生错误。

如果通知树中的某个叶子具有值为“true”的“mandatory”语句,叶子务必出现在通知实例中。

如果通知树中的一个叶子有一个默认值,那么客户端必须在7.6.1节描述的情况下使用这个值。 在这些情况下,客户端必须在操作上表现得像叶子出现在通知实例中一样,其默认值为其值。

如果通知树中的叶子列表有一个或多个默认值,则客户端必须使用与7.7.2节中描述的相同的情况下的这些值。 在这些情况下,客户端必须在操作上像在默认值作为其值的情况下在叶子列表中出现在通知实例中一样。

由于通知树不是任何数据存储区的一部分,因此通知树中所有节点的“config”语句都将被忽略。

7.16.1. notification子语句

  1. +--------------+---------+-------------+
  2. | substatement | section | cardinality |
  3. +--------------+---------+-------------+
  4. | anydata | 7.10 | 0..n |
  5. | anyxml | 7.11 | 0..n |
  6. | choice | 7.9 | 0..n |
  7. | container | 7.5 | 0..n |
  8. | description | 7.21.3 | 0..1 |
  9. | grouping | 7.12 | 0..n |
  10. | if-feature | 7.20.2 | 0..n |
  11. | leaf | 7.6 | 0..n |
  12. | leaf-list | 7.7 | 0..n |
  13. | list | 7.8 | 0..n |
  14. | must | 7.5.3 | 0..n |
  15. | reference | 7.21.4 | 0..1 |
  16. | status | 7.21.2 | 0..1 |
  17. | typedef | 7.3 | 0..n |
  18. | uses | 7.13 | 0..n |
  19. +--------------+---------+-------------+

7.16.2. NETCONF XML编码规则

在模块顶层定义的通知节点被编码为“NETCONF Event Notifications”[RFC5277]中定义的<notification>元素的子XML元素。 元素的本地名称是通知的标识符,其名称空间是模块的XML名称空间(参见第7.1.3节)。

当通知节点被定义为数据节点的子节点时,[RFC5277]中定义的<notification>元素包含标识数据存储区中节点的节点层次结构。 它必须包含从顶层到包含通知的列表或容器的所有容器和列表节点。 对于列表,所有关键叶子也必须包括在内。 最里面的容器或列表包含一个XML元素,它包含定义的通知的名称。

通知的子节点以任何顺序编码为通知节点的XML元素的子元素。

7.16.3. 使用示例

以下示例在模块的顶层定义通知:

  1. module example-event {
  2. yang-version 1.1;
  3. namespace "urn:example:event";
  4. prefix "ev";
  5. notification event {
  6. leaf event-class {
  7. type string;
  8. }
  9. leaf reporting-entity {
  10. type instance-identifier;
  11. }
  12. leaf severity {
  13. type string;
  14. }
  15. }
  16. }

完整通知的相应XML实例示例:

  1. <notification
  2. xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
  3. <eventTime>2008-07-08T00:01:00Z</eventTime>
  4. <event xmlns="urn:example:event">
  5. <event-class>fault</event-class>
  6. <reporting-entity>
  7. /ex:interface[ex:name='Ethernet0']
  8. </reporting-entity>
  9. <severity>major</severity>
  10. </event>
  11. </notification>

以下示例在数据节点中定义通知:

  1. module example-interface-module {
  2. yang-version 1.1;
  3. namespace "urn:example:interface-module";
  4. prefix "if";
  5. container interfaces {
  6. list interface {
  7. key "name";
  8. leaf name {
  9. type string;
  10. }
  11. notification interface-enabled {
  12. leaf by-user {
  13. type string;
  14. }
  15. }
  16. }
  17. }
  18. }

完整通知的相应XML实例示例:

  1. <notification
  2. xmlns="urn:ietf:params:xml:ns:netconf:notification:1.0">
  3. <eventTime>2008-07-08T00:01:00Z</eventTime>
  4. <interfaces xmlns="urn:example:interface-module">
  5. <interface>
  6. <name>eth1</name>
  7. <interface-enabled>
  8. <by-user>fred</by-user>
  9. </interface-enabled>
  10. </interface>
  11. </interfaces>
  12. </notification>