7.14. “rpc”声明

rpc”语句用于定义RPC操作。 它需要一个参数,它是一个标识符,后面是一个包含详细rpc信息的子语句块。 这个参数是RPC的名字。

rpc”语句在模式树中定义一个rpc节点。 在rpc节点下,还定义了一个名为“input”的模式节点和一个名为“output”的模式节点。 节点“input”和“output”在模块的命名空间中定义。

7.14.1. rpc子语句

  1. +--------------+---------+-------------+
  2. | substatement | section | cardinality |
  3. +--------------+---------+-------------+
  4. | description | 7.21.3 | 0..1 |
  5. | grouping | 7.12 | 0..n |
  6. | if-feature | 7.20.2 | 0..n |
  7. | input | 7.14.2 | 0..1 |
  8. | output | 7.14.3 | 0..1 |
  9. | reference | 7.21.4 | 0..1 |
  10. | status | 7.21.2 | 0..1 |
  11. | typedef | 7.3 | 0..n |
  12. +--------------+---------+-------------+

7.14.2. “输入”声明

input”语句是可选的,用于定义操作的输入参数。它没有争论。 “input”子语句定义操作输入节点下的节点。

如果输入树中的一个叶子有一个值为“true”的“mandatory”语句,叶子务必出现在一个RPC调用中。

如果输入树中的一个叶子有一个默认值,那么服务器必须在7.6.1节描述的情况下使用这个值。在这些情况下,服务器必须在操作上表现得像叶子出现在RPC调用中一样,其默认值是其值。

如果输入树中的叶子列表有一个或多个默认值,那么服务器必须在7.7.2节中描述的那些情况下使用这些值。在这些情况下,服务器必须在操作上表现得像叶子列表出现在RPC调用中一样,其默认值作为其值。

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

如果任何节点有一个“when”语句,将评估为“false”,那么这个节点绝不能出现在输入树中。

7.14.2.1. input子语句

  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. | grouping | 7.12 | 0..n |
  9. | leaf | 7.6 | 0..n |
  10. | leaf-list | 7.7 | 0..n |
  11. | list | 7.8 | 0..n |
  12. | must | 7.5.3 | 0..n |
  13. | typedef | 7.3 | 0..n |
  14. | uses | 7.13 | 0..n |
  15. +--------------+---------+-------------+

7.14.3. “输出”声明

output”语句是可选的,用于定义RPC操作的输出参数。它没有争论。 “output”子状态定义操作的输出节点下的节点。

如果输出树中的一个叶子有一个值为“true”的“mandatory”语句,叶子务必出现在RPC回复中。

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

如果输出树中的叶子列表有一个或多个默认值,那么客户端必须在7.7.2节中描述的情况下使用这些值。在这些情况下,客户端必须在操作上表现得好像叶子列表出现在RPC回复中,默认值作为其值。

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

如果任何节点有一个“when”语句,其结果为“false”,那么这个节点绝不能出现在输出树中。

7.14.3.1. output子语句

  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. | grouping | 7.12 | 0..n |
  9. | leaf | 7.6 | 0..n |
  10. | leaf-list | 7.7 | 0..n |
  11. | list | 7.8 | 0..n |
  12. | must | 7.5.3 | 0..n |
  13. | typedef | 7.3 | 0..n |
  14. | uses | 7.13 | 0..n |
  15. +--------------+---------+-------------+

7.14.4. NETCONF XML编码规则

rpc节点被编码为<rpc>元素的子XML元素,由[RFC6241]中的替换组“rpcOperation”指定。 元素的本地名称是rpc的标识符,其名称空间是模块的XML名称空间(参见第7.1.3节)。

输入参数按照在“input”语句中定义的顺序,作为子XML元素编码到rpc节点的XML元素。

如果RPC操作调用成功并且没有返回输出参数,则<rpc-reply>包含在[RFC6241]中定义的单个<ok/>元素。 如果返回输出参数,则按照在“output”语句中定义的顺序,将它们作为子元素编码到[RFC6241]中定义的<rpc-reply>元素。

7.14.5. 使用示例

以下示例定义了一个RPC操作:

  1. module example-rock {
  2. yang-version 1.1;
  3. namespace "urn:example:rock";
  4. prefix "rock";
  5. rpc rock-the-house {
  6. input {
  7. leaf zip-code {
  8. type string;
  9. }
  10. }
  11. }
  12. }

完整rpcrpc-reply的相应XML实例示例:

  1. <rpc message-id="101"
  2. xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  3. <rock-the-house xmlns="urn:example:rock">
  4. <zip-code>27606-0100</zip-code>
  5. </rock-the-house>
  6. </rpc>
  7. <rpc-reply message-id="101"
  8. xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  9. <ok/>
  10. </rpc-reply>