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]中的替换组“rpcOperatio
n”指定。 元素的本地名称是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;
}
}
}
}
完整rpc
和rpc-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>