7.14. “rpc”声明

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

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

7.14.1. rpc子语句

+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| description  | 7.21.3  | 0..1        |
| grouping     | 7.12    | 0..n        |
| if-feature   | 7.20.2  | 0..n        |
| input        | 7.14.2  | 0..1        |
| output       | 7.14.3  | 0..1        |
| reference    | 7.21.4  | 0..1        |
| status       | 7.21.2  | 0..1        |
| typedef      | 7.3     | 0..n        |
+--------------+---------+-------------+

7.14.2. “输入”声明

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

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

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

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

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

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

7.14.2.1. input子语句

+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| anydata      | 7.10    | 0..n        |
| anyxml       | 7.11    | 0..n        |
| choice       | 7.9     | 0..n        |
| container    | 7.5     | 0..n        |
| grouping     | 7.12    | 0..n        |
| leaf         | 7.6     | 0..n        |
| leaf-list    | 7.7     | 0..n        |
| list         | 7.8     | 0..n        |
| must         | 7.5.3   | 0..n        |
| typedef      | 7.3     | 0..n        |
| uses         | 7.13    | 0..n        |
+--------------+---------+-------------+

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子语句

+--------------+---------+-------------+
| substatement | section | cardinality |
+--------------+---------+-------------+
| anydata      | 7.10    | 0..n        |
| anyxml       | 7.11    | 0..n        |
| choice       | 7.9     | 0..n        |
| container    | 7.5     | 0..n        |
| grouping     | 7.12    | 0..n        |
| leaf         | 7.6     | 0..n        |
| leaf-list    | 7.7     | 0..n        |
| list         | 7.8     | 0..n        |
| must         | 7.5.3   | 0..n        |
| typedef      | 7.3     | 0..n        |
| uses         | 7.13    | 0..n        |
+--------------+---------+-------------+

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操作:

module example-rock {
  yang-version 1.1;
  namespace "urn:example:rock";
  prefix "rock";

  rpc rock-the-house {
    input {
      leaf zip-code {
        type string;
      }
    }
  }
}

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

<rpc message-id="101"
     xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <rock-the-house xmlns="urn:example:rock">
    <zip-code>27606-0100</zip-code>
  </rock-the-house>
</rpc>

<rpc-reply message-id="101"
           xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <ok/>
</rpc-reply>

results matching ""

    No results matching ""