サービスの改善にご協力お願いします。

お客様のご意見をお聞かせください。

アンケートの所要時間はおよそ 2 分です。

close
keyboard_arrow_left
list Table of Contents

この機械翻訳はお役に立ちましたでしょうか?

starstarstarstarstar
Go to English page
免責事項:

このページは、サードパーティー製機械翻訳ソフトウェアを使用して翻訳されます。質の高い翻訳を提供するために合理的な対応はされていますが、ジュニパーネットワークスがその正確性を保証することはできかねます。この翻訳に含まれる情報の正確性について疑問が生じた場合は、英語版を参照してください. ダウンロード可能なPDF (英語版のみ).

Junos OS Evolvedを実行しているデバイス上のPython 3アプリケーションでルーティングインスタンスを指定する方法

date_range 16-Sep-22

libpyvrf モジュールについて

ルーティングインスタンスは、ルーティングテーブル、インターフェイス、ルーティングプロトコルパラメーターの集合です。各ルーティング インスタンスには固有の名前と対応する IP ユニキャスト テーブルがあり、このテーブルを使用して、そのインスタンスのトラフィックを他のトラフィックと分離することができます。たとえば、Junos OS Evolvedを実行しているデバイスでは、管理タスク専用の個別の管理ルーティングテーブルを使用する、 mgmt_junos専用の管理仮想ルーティングおよび転送(VRF)インスタンスを有効にすることができます。

ルーティング インスタンスを使用すると、複数のデバイスを使用してネットワークをセグメント化することなく、ネットワークを通過するトラフィックを分離できます。ルーティングインスタンスを使用してトラフィックを分離する場合、ネットワークユーティリティはpingssh、そのインスタンスを通じて到達可能な宛先にトラフィックを送信するために、正しいルーティングインスタンスを参照する必要があります。

Junos OS Evolvedイメージは、Linux上でネイティブに動作し、ベースイメージの一部であるPythonライブラリを含むすべてのLinuxユーティリティと操作への直接アクセスを提供します。Junos OS Evolved実行しているデバイス上の Python 3 ライブラリには、Juniper Networks libpyvrf モジュールも含まれています。これにより、シェルで実行される 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()

指定したタスクに関連付けられたルーティング インスタンスを返します。

メモ:

この機能は、リリース 22.1R1 Junos OS Evolved以降は非推奨です。

get_vrf()

現在のプロセスに関連付けられたルーティング インスタンスを返します。

set_socket_vrf()

指定されたソケットのルーティング インスタンスを設定します。

set_task_vrf()

指定されたプロセスのルーティング インスタンスを設定します。

メモ:

この機能は、リリース 22.1R1 Junos OS Evolved以降は非推奨です。

set_vrf()

現在のプロセスのルーティング インスタンスを設定します。

モジュール内の libpyvrf 関数は、関数とエラーに応じて次の例外を発生させることができます。

  • libpyvrf.error- エラーが返されたときに libvrf 生成されます。

  • libpyvrf.evo_not_ready—デバイスが起動しているときなど、Junos OS Evolvedネットワーク スタックの準備が整っていない場合に生成されます。

  • libpyvrf.invalid_table— 指定されたルーティング インスタンスまたはテーブル ID が無効な場合に生成されます。

次のサンプル Python スクリプトは、ルーティング インスタンスを通してのみ到達可能なホストに ping を mgmt_junos 試みます。このスクリプトは、関数を呼び出す前に、最初にホストに ping を実行します set_vrf() 。次に、このスクリプトは、 set_vrf() ルーティング インスタンスを現在の mgmt_junos プロセスに関連付ける関数を呼び出し、ホストに再度 ping を実行します。

content_copy zoom_out_map
[vrf:none] user@host:~# cat libpyvrf-ping.py
import libpyvrf as vrf
import subprocess

command = [ 'ping', '-c', '3', 'host1.example.com' ]

try:
    # Ping the host before setting the routing instance 
    subprocess.call(command) == 0

    # Set the routing instance
    vrf.set_vrf("mgmt_junos")
    print ("\nUsing routing instance:", vrf.get_vrf())

    # Ping the host after setting the routing instance
    subprocess.call(command) == 0

except vrf.invalid_table as e:
    print ("Invalid Table")
except vrf.evo_not_ready as e :
    print ("Junos OS Evolved network stack is not ready")
except vrf.error as e :
    print ("Generic libvrf error")

スクリプトを実行すると、プロセスがこのケースではデフォルトのルーティング インスタンスを使用し、ホストはルーティング インスタンスを通してのみ mgmt_junos 到達可能であるため、最初の ping コマンドは失敗します。ルーティングインスタンスを使用する2番目の mgmt_junos pingコマンドは成功します。

content_copy zoom_out_map
[vrf:none] user@host:~# python3 libpyvrf-ping.py
ping: unknown host host1.example.net

Using routing instance: mgmt_junos
PING host1.example.com (198.51.100.10) 56(84) bytes of data.
64 bytes from host1.example.com (198.51.100.10): icmp_seq=1 ttl=60 time=1.02 ms
64 bytes from host1.example.com (198.51.100.10): icmp_seq=2 ttl=60 time=0.672 ms
64 bytes from host1.example.com (198.51.100.10): icmp_seq=3 ttl=60 time=0.741 ms

--- host1.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.876/0.946/1.001/0.063 ms

ルーティングインスタンス名に空の文字列を指定することで、Pythonアプリケーションでルーティングインスタンスをデフォルトのルーティングインスタンスアソシエーションに戻すことができます。例えば:

content_copy zoom_out_map
vrf.set_vrf("")

アプリケーションがルーティングインスタンスを指定しない場合、デフォルトのルーティングインスタンスの関連付けはプロセスの環境に依存します。環境で libsi.so ライブラリがプリロードされている場合、デフォルトでは、アプリケーションはデフォルトのルーティング インスタンスとテーブルを使用します default.inet。それ以外の場合、プロセスまたはソケットに関連付けられている既定のルーティング インスタンスはありません。

環境が libsi.so ライブラリーをプリロードしているかどうかを判別するには、環境変数の LD_PRELOAD 値にライブラリーへのパスが含まれているかどうかを確認します。

content_copy zoom_out_map
[vrf:none] user@host:~# env | grep LD_PRELOAD
LD_PRELOAD=libsi.so

この変数に LD_PRELOAD libsi.so ライブラリ パスが含まれていない場合、シェルに適したコマンドを使用して追加できます。

content_copy zoom_out_map
[vrf:none] user@host:~# export LD_PRELOAD="/path/to/libsi.so"
[vrf:none] user@host:~# env | grep LD_PRELOAD
LD_PRELOAD=libsi.so

get_host_vrf_name()機能

構文

content_copy zoom_out_map
host_vrf_name get_host_vrf_name(vrf_name)

説明

Junos OS ルーティング インスタンスに対応する Linux VRF を返します。

パラメーター

vrf_name

Junos OS ルーティング インスタンスの名前。

戻り値

host_vrf_name

Junos OS ルーティング インスタンスに対応する Linux VRF の名前。

使用例

次の例では、複数のJunos OSルーティングインスタンスに対応するLinux VRFを印刷します。

content_copy zoom_out_map
[vrf:none] user@host:~# cat libpyvrf-get-host-vrf-name.py
import libpyvrf as vrf

try:
    print ("mgmt_junos VRF:", vrf.get_host_vrf_name("mgmt_junos"))
    print ("default VRF:", vrf.get_host_vrf_name("default"))
    print ("L3VPN-1 VRF:", vrf.get_host_vrf_name("L3VPN-1"))
except vrf.invalid_table as e:
    print ("Invalid Table")
content_copy zoom_out_map
[vrf:none] user@host:~# python3 libpyvrf-get-host-vrf-name.py
mgmt_junos VRF: mgmt_junos
default VRF: vrf0
L3VPN-1 VRF: vrf52

リリース情報

Junos OS Evolved リリース 20.3R1 で導入された関数。

get_table_id()機能

構文

content_copy zoom_out_map
table_id get_table_id(vrf_name)

説明

指定されたルーティング インスタンスに関連付けられたルーティング テーブルのインデックスを返します。ルーティング インスタンスが定義されていない場合、関数は -1 を返します。

パラメーター

vrf_name

Junos OS ルーティング インスタンスの名前。

戻り値

table_id

指定されたルーティング インスタンスのルーティング テーブルのインデックス。

使用例

次の例では、ルーティングインスタンスと未定義のルーティングインスタンスの mgmt_junos テーブルインデックスを取得して印刷します foo

content_copy zoom_out_map
user@host> show route forwarding-table extensive table mgmt_junos

Routing table: mgmt_junos.inet [Index 36738]
Internet:
...
Routing table: mgmt_junos.inet6 [Index 36738]
Internet6:
...
content_copy zoom_out_map
[vrf:none] user@host:~# cat libpyvrf-get-table-id.py
import libpyvrf as vrf

try:
    print (vrf.get_table_id("mgmt_junos"))
    print (vrf.get_table_id("foo"))
except vrf.evo_not_ready as e:
    print ("Junos OS Evolved network stack is not ready")
except vrf.error as e:
    print ("Generic libvrf error")

このスクリプトは、インスタンスのテーブルインデックスを mgmt_junos 返し、未定義のインスタンスに対して-1を返します。

content_copy zoom_out_map
[vrf:none] user@host:~# python3 libpyvrf-get-table-id.py
36738
-1

リリース情報

Junos OS Evolved リリース 20.3R1 で導入された関数。

get_task_vrf()機能

構文

content_copy zoom_out_map
vrf_name get_task_vrf(tid)

説明

指定されたプロセス ID に関連付けられた Junos OS ルーティング インスタンスを返します。

パラメーター

tid

関連するルーティング インスタンスを取得するプロセス ID。

戻り値

vrf_name

プロセス ID に関連付けられたルーティング インスタンスの名前。

使用例

次の例では、現在のプロセスのプロセス ID を取得し、そのプロセスに mgmt_junos ルーティング インスタンスを関連付けます。スクリプトが関数を get_task_vrf() 呼び出して、そのプロセス ID のルーティング インスタンスを要求すると、ルーティング インスタンスが mgmt_junos 返されます。

content_copy zoom_out_map
[vrf:none] user@host:~# cat libpyvrf-set-task-vrf.py
import libpyvrf as vrf
import os, subprocess

command = [ 'ping', '-c', '3', 'host1.example.com' ]

try:
    pid = os.getpid()
    vrf.set_task_vrf(pid, "mgmt_junos")
    print ("Using routing instance:", vrf.get_task_vrf(pid))
    subprocess.call(command) == 0
except vrf.invalid_table as e:
    print ("Invalid Table")
except vrf.evo_not_ready as e:
    print ("Junos OS Evolved network stack is not ready")
except vrf.error as e:
    print ("Generic libvrf error")
content_copy zoom_out_map
[vrf:none] user@host:~# python3 libpyvrf-set-task-vrf.py
Using routing instance: mgmt_junos
PING host1.example.com (198.51.100.10) 56(84) bytes of data.
64 bytes from host1.example.com (198.51.100.10): icmp_seq=1 ttl=60 time=1.02 ms
64 bytes from host1.example.com (198.51.100.10): icmp_seq=2 ttl=60 time=0.672 ms
64 bytes from host1.example.com (198.51.100.10): icmp_seq=3 ttl=60 time=0.741 ms

--- host1.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.876/0.946/1.001/0.063 ms

リリース情報

Junos OS Evolved リリース 20.3R1 で導入された関数。

Junos OS Evolved リリース 22.1R1 では非推奨の関数。

get_vrf()機能

構文

content_copy zoom_out_map
vrf_name get_vrf()

説明

現在のプロセスに関連付けられた Junos OS ルーティング インスタンスを返します。

戻り値

vrf_name

現在のプロセスに関連付けられたルーティング インスタンスの名前。

使用例

次の例では、ルーティング インスタンスを現在の mgmt_junos プロセスに関連付けます。スクリプトが関数を get_vrf() 呼び出して現在のプロセスのルーティング インスタンスを要求すると、ルーティング インスタンスが mgmt_junos 返されます。

content_copy zoom_out_map
[vrf:none] user@host:~# cat libpyvrf-set-vrf.py
import libpyvrf as vrf
import subprocess

command = [ 'ping', '-c', '3', 'host1.example.com' ]

try:
    vrf.set_vrf("mgmt_junos")
    print ("Using routing instance:", vrf.get_vrf())
    subprocess.call(command) == 0
except vrf.invalid_table as e:
    print ("Invalid Table")
except vrf.evo_not_ready as e:
    print ("Junos OS Evolved network stack is not ready")
except vrf.error as e:
    print ("Generic libvrf error")
content_copy zoom_out_map
[vrf:none] user@host:~# python3 libpyvrf-set-vrf.py
Using routing instance: mgmt_junos
PING host1.example.com (198.51.100.10) 56(84) bytes of data.
64 bytes from host1.example.com (198.51.100.10): icmp_seq=1 ttl=60 time=1.02 ms
64 bytes from host1.example.com (198.51.100.10): icmp_seq=2 ttl=60 time=0.672 ms
64 bytes from host1.example.com (198.51.100.10): icmp_seq=3 ttl=60 time=0.741 ms

--- host1.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.876/0.946/1.001/0.063 ms

リリース情報

Junos OS Evolved リリース 20.3R1 で導入された関数。

set_socket_vrf()機能

構文

content_copy zoom_out_map
set_socket_vrf(socket_fd, vrf_name)

説明

指定されたソケットで使用されるルーティング インスタンスを設定します。1 つのソケットにルーティング インスタンスを設定すると、同じアプリケーション内で複数のソケットで異なるルーティング インスタンスを使用する必要がある場合に便利です。プロセスまたはアプリケーションのルーティング・インスタンス・コンテキストに影響を与えることなく、各ソケットのルーティング・インスタンス・コンテキストを個別に設定することができます。

パラメーター

socket_fd

ソケットのファイル記述子。

vrf_name

Junos OS ルーティング インスタンスの名前。

  • 値: 受け入れ可能な値には"default""iri""mgmt_junos"、Junos OS設定でユーザー設定ルーティングインスタンスに定義された名前、 、 、または が含まれます。

リリース情報

Junos OS Evolved リリース 20.3R1 で導入された関数。

set_task_vrf()機能

構文

content_copy zoom_out_map
set_task_vrf(tid, vrf_name)

説明

指定されたプロセス ID を持つプロセスが操作の実行に使用するルーティング インスタンスを設定します。

一方、現在のプロセスのルーティングインスタンスを設定します set_vrf() が、 set_task_vrf() 指定されたプロセスIDでプロセスのルーティングインスタンスを設定します。

パラメーター

tid

指定されたルーティング インスタンスを使用するプロセスのプロセス ID。

vrf_name

Junos OS ルーティング インスタンスの名前。

  • 値: 受け入れ可能な値には"default""iri""mgmt_junos"、Junos OS設定でユーザー設定ルーティングインスタンスに定義された名前、 、 、または が含まれます。

使用例

次のサンプル Python スクリプトは、現在のプロセスのプロセス ID を取得し、ルーティング インスタンスをそのプロセスに関連付けます mgmt_junos 。その後、このスクリプトは、そのルーティング インスタンスを通してのみ到達可能なホストに ping を実行します。

content_copy zoom_out_map
[vrf:none] user@host:~# cat libpyvrf-set-task-vrf.py
import libpyvrf as vrf
import os, subprocess

command = [ 'ping', '-c', '3', 'host1.example.com' ]

try:
    pid = os.getpid()
    vrf.set_task_vrf(pid, "mgmt_junos")
    print ("Using routing instance:", vrf.get_task_vrf(pid))
    subprocess.call(command) == 0
except vrf.invalid_table as e:
    print ("Invalid Table")
except vrf.evo_not_ready as e:
    print ("Junos OS Evolved network stack is not ready")
except vrf.error as e:
    print ("Generic libvrf error")
content_copy zoom_out_map
[vrf:none] user@host:~# python3 libpyvrf-set-task-vrf.py
Using routing instance: mgmt_junos
PING host1.example.com (198.51.100.10) 56(84) bytes of data.
64 bytes from host1.example.com (198.51.100.10): icmp_seq=1 ttl=60 time=1.02 ms
64 bytes from host1.example.com (198.51.100.10): icmp_seq=2 ttl=60 time=0.672 ms
64 bytes from host1.example.com (198.51.100.10): icmp_seq=3 ttl=60 time=0.741 ms

--- host1.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.876/0.946/1.001/0.063 ms

リリース情報

Junos OS Evolved リリース 20.3R1 で導入された関数。

Junos OS Evolved リリース 22.1R1 では非推奨の関数。

set_vrf()機能

構文

content_copy zoom_out_map
set_vrf(vrf_name)

説明

現在のプロセスが操作の実行に使用するルーティング インスタンスを設定します。今後のルックアップでは、このルーティング インスタンスが使用されます。

現在のプロセスではなく、特定のプロセスにルーティング インスタンスを関連付けるには、 関数を使用します set_task_vrf()

パラメーター

vrf_name

Junos OS ルーティング インスタンスの名前。

  • 値: 受け入れ可能な値には"default""iri""mgmt_junos"、Junos OS設定でユーザー設定ルーティングインスタンスに定義された名前、 、 、または が含まれます。

使用例

次のサンプル Python スクリプトは、ルーティング インスタンスを mgmt_junos 現在のプロセスに関連付けます。その後、このスクリプトは、そのルーティング インスタンスを通してのみ到達可能なホストに ping を実行します。

content_copy zoom_out_map
import libpyvrf as vrf
import subprocess

command = [ 'ping', '-c', '3', 'host1.example.com' ]

try:
    vrf.set_vrf("mgmt_junos")
    print ("Using routing instance:", vrf.get_vrf())
    subprocess.call(command) == 0
except vrf.invalid_table as e:
    print ("Invalid Table")
except vrf.evo_not_ready as e:
    print ("Junos OS Evolved network stack is not ready")
except vrf.error as e:
    print ("Generic libvrf error")
content_copy zoom_out_map
[vrf:none] user@host:~# python3 libpyvrf-set-vrf.py
Using routing instance: mgmt_junos
PING host1.example.com (198.51.100.10) 56(84) bytes of data.
64 bytes from host1.example.com (198.51.100.10): icmp_seq=1 ttl=60 time=1.02 ms
64 bytes from host1.example.com (198.51.100.10): icmp_seq=2 ttl=60 time=0.672 ms
64 bytes from host1.example.com (198.51.100.10): icmp_seq=3 ttl=60 time=0.741 ms

--- host1.example.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.876/0.946/1.001/0.063 ms

リリース情報

Junos OS Evolved リリース 20.3R1 で導入された関数。

external-footer-nav