Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

如何在运行 Junos OS 演化的设备上的 Python 3 应用程序中指定路由实例

了解 libpyvrf 模块

路由实例是路由表、接口和路由协议参数的集合。每个路由实例都有一个唯一的名称和相应的 IP 单播表,可用于将该实例的流量与其他流量分隔开来。例如,在运行 Junos OS Evolved 的设备上,您可以启用专用管理虚拟路由和转发 (VRF) 实例, mgmt_junos该实例使用专用于管理任务的单独管理路由表。

通过路由实例,您无需使用多个设备对网络进行分段,即可隔离通过网络的流量。当您使用路由实例隔离流量时,网络实用程序喜欢 pingssh 必须参考正确的路由实例,以便将流量发送至可通过该实例到达的目标。

Junos OS Evolved 图像在 Linux 上本机运行,提供对所有 Linux 公用事业和运营的直接访问,包括作为基本映像一部分的 Python 库。运行 Junos OS Evolved 的设备上的 Python 3 库还包括瞻博网络 libpyvrf 模块,该模块允许在 shell 中执行的 Python 3 应用程序指定路由实例用于特定流程和网络实用程序。

表 1 概述了 libpyvrf 您可以在 Linux 外壳中执行的 Python 3 应用程序中使用的功能。您可以使用这些功能来指示进程使用特定路由实例。如果同一进程需要多个路由实例,您还可以为特定插槽设置路由实例上下文,这不会影响进程本身的上下文。通过插座的数据包,然后使用与该实例关联的路由表。将路由实例设置为进程或插槽时, libpyvrf 该模块会将上下文设置为与 Junos OS 路由实例对应的 Linux VRF。

表 1:libpyvrf 功能

libpyvrf 功能

描述

get_host_vrf_name()

将对应于 Junos OS 路由实例的 Linux VRF 返回。

get_table_id()

退还与指定路由实例关联的路由表索引。

get_task_vrf()

退还与指定任务关联的路由实例。

注意:

此功能在 Junos OS Evolved 版本 22.1R1 中已弃用。

get_vrf()

返回与当前进程关联的路由实例。

set_socket_vrf()

为指定插座设置路由实例。

set_task_vrf()

为指定进程设置路由实例。

注意:

此功能在 Junos OS Evolved 版本 22.1R1 中已弃用。

set_vrf()

为当前进程设置路由实例。

模块中的 libpyvrf 功能可根据功能和错误增加以下例外情况:

  • libpyvrf.error—返回错误时 libvrf 生成。

  • libpyvrf.evo_not_ready—在 Junos OS Evolved 网络堆栈未就绪时生成,例如设备启动时。

  • libpyvrf.invalid_table—在指定的路由实例或表 ID 无效时生成。

以下示例 Python 脚本尝试 ping 只能通过路由实例到达的 mgmt_junos 主机。在调用功能之前,脚本会先对主机进行 set_vrf() ping。然后,脚本调用 set_vrf() 该功能将路由实例与当前进程关联 mgmt_junos ,然后再次对主机进行 ping。

执行脚本时,第一个 ping 命令将失败,因为此情况下进程使用默认路由实例,并且主机只能通过 mgmt_junos 路由实例到达。使用路由实例的第二个 ping 命令 mgmt_junos 成功。

您可将路由实例重置为 Python 应用程序中的默认路由实例关联,方法是为路由实例名称指定空字符串。例如:

如果应用程序未指定路由实例,默认路由实例关联将取决于进程的环境。如果环境预加载 libsi.so 库,则默认情况下,应用程序将使用默认路由实例和表 default.inet。否则,没有与进程或插座关联的默认路由实例。

要确定环境是否预加载 libsi.so 库,请验证环境变量的 LD_PRELOAD 值是否包括到库的路径。

LD_PRELOAD如果变量不包括 libsi.so 库路径,则可以使用适合您的 shell 的命令来添加,例如:

get_host_vrf_name() 功能

语法

描述

将对应于 Junos OS 路由实例的 Linux VRF 返回。

参数

vrf_name

Junos OS 路由实例的名称。

回报值

host_vrf_name

对应于 Junos OS 路由实例的 Linux VRF 名称。

使用情况示例

以下示例打印出对应于多个 Junos OS 路由实例的 Linux VRF:

发布信息

Junos OS Evolved 版本 20.3R1 中引入的功能。

get_table_id() 功能

语法

描述

退还与指定路由实例关联的路由表索引。如果未定义路由实例,功能将返回 -1。

参数

vrf_name

Junos OS 路由实例的名称。

回报值

table_id

给定路由实例的路由表索引。

使用情况示例

以下示例检索并打印路由实例和未定义路由实例foo的表索mgmt_junos引。

脚本将返回实例的 mgmt_junos 表索引,而未定义实例的返回 -1。

发布信息

Junos OS Evolved 版本 20.3R1 中引入的功能。

get_task_vrf() 功能

语法

描述

退还与指定进程 ID 关联的 Junos OS 路由实例。

参数

tid

用于检索相关路由实例的进程 ID。

回报值

vrf_name

与进程 ID 关联的路由实例的名称。

使用情况示例

以下示例检索当前进程的进程 ID,并将路由实例与该进程相关联 mgmt_junos 。当脚本调用该 get_task_vrf() 功能以请求该进程 ID 的路由实例时,将返回 mgmt_junos 路由实例。

发布信息

Junos OS Evolved 版本 20.3R1 中引入的功能。

Junos OS Evolved 版本 22.1R1 中弃用的功能。

get_vrf() 功能

语法

描述

返回与当前进程关联的 Junos OS 路由实例。

回报值

vrf_name

与当前进程关联的路由实例的名称。

使用情况示例

以下示例将路由实例与当前进程相关联 mgmt_junos 。当脚本调用该 get_vrf() 功能以请求当前进程的路由实例时,将返回 mgmt_junos 路由实例。

发布信息

Junos OS Evolved 版本 20.3R1 中引入的功能。

set_socket_vrf() 功能

语法

描述

设置指定插座使用的路由实例。当同一应用程序内的多个插槽需要使用不同的路由实例时,为插槽设置路由实例会很有用。您可以为每个插座单独设置路由实例上下文,而不会影响进程或应用程序的路由实例上下文。

参数

socket_fd

套接字的文件描述符。

vrf_name

Junos OS 路由实例的名称。

  • 值: 可接受的值包括"default""iri"、、"mgmt_junos"或为 Junos OS 配置中的任何用户配置的路由实例定义的名称。

发布信息

Junos OS Evolved 版本 20.3R1 中引入的功能。

set_task_vrf() 功能

语法

描述

设置具有指定进程 ID 的进程用于执行操作的路由实例。

而设置当前进程的路由实例,set_task_vrf()set_vrf()使用指定的进程 ID 设置该进程的路由实例。

参数

tid

用于将使用指定路由实例的进程的进程 ID。

vrf_name

Junos OS 路由实例的名称。

  • 值: 可接受的值包括"default""iri"、、"mgmt_junos"或为 Junos OS 配置中的任何用户配置的路由实例定义的名称。

使用情况示例

以下示例 Python 脚本检索当前进程的进程 ID,并将路由实例与该进程相关联 mgmt_junos 。然后,脚本会 ping 只能通过路由实例到达的主机。

发布信息

Junos OS Evolved 版本 20.3R1 中引入的功能。

Junos OS Evolved 版本 22.1R1 中弃用的功能。

set_vrf() 功能

语法

描述

设置当前进程用于执行操作的路由实例。未来的查找将使用此路由实例。

要将路由实例与特定进程(而非当前进程)相关联,请使用此 set_task_vrf() 功能。

参数

vrf_name

Junos OS 路由实例的名称。

  • 值: 可接受的值包括"default""iri"、、"mgmt_junos"或为 Junos OS 配置中的任何用户配置的路由实例定义的名称。

使用情况示例

以下示例 Python 脚本将路由实例与当前进程相关联 mgmt_junos 。然后,脚本会 ping 只能通过路由实例到达的主机。

发布信息

Junos OS Evolved 版本 20.3R1 中引入的功能。