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;
}
}
}
}
完整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>