Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

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

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 を実行します。

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

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

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

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

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

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

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

使用例

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

このスクリプトは、インスタンスのテーブルインデックスを 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()機能

構文

説明

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

パラメーター

socket_fd

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

vrf_name

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

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

リリース情報

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

set_task_vrf()機能

構文

説明

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

一方、現在のプロセスのルーティングインスタンスを設定します set_vrf() が、 set_task_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 で導入された関数。