オープンのvSwitch(OVS)は、プログラム可能なソフトスイッチ操作は、メッセージ内のテキストの各レベルのために実行することができるです。この文書では、パケットは、データ・プレーン間に発生したどのプロセスを理解することのトラッキングツールを使用する方法について説明します。
ovs-vswitchd(8)
マニュアルページはofproto / traceコマンドは、Open vSwitchの中の基本的な使用状況の追跡について説明します。OVNは、パケットスイッチ・ロジックを追跡することができますについては、ofproto /参照、同様のツールをトレースovn-trace(8)
_。
メッセージ追跡
ツールを理解するために、のは、ストリームを使ってみましょうflow
例として:
table=3,ip,tcp,tcp_dst=80,action=output:2
table=2,ip,tcp,tcp_dst=22,action=output:1
table=0,in_port=3,ip,nw_src=192.0.2.0/24,action=resubmit(,2)
table=0,in_port=3,ip,nw_src=198.51.100.0/24,action=resubmit(,3)
注意:
あなたが「本物」OVS環境を使用できない場合は、使用可能ovs-sandbox
な公式文書として、:/tutorials/ovs-advanced
で、それはまた、追加のトラッキングの例を提供します。
表3の最初の行は、TCP / IPパケットの宛先ポート80(HTTP)に一致するルールを追加します。パケットが一致する場合、パケットの操作は、ポート2のOpenFlowに出力されます。
同様に第二列が、一致する宛先ポート22(SSH)。パケットが一致する場合、パケットは出力ポート1のOpenFlowの操作です。
次の2行は、送信元IPアドレスと一致します。これらが一致する場合、パケットは、動作パラメータの再送信によって決定される指定されたテーブルのテーブルに再送信されます。
それでは、IPアドレスから宛先ポート番号はどうかOpenFlowの22ポート1に忠実であること、192.0.2.2を見てみましょう:
$ ovs-appctl ofproto/trace br0 in_port=3,tcp,nw_src=192.0.2.2,tcp_dst=22
Flow: tcp,in_port=3,vlan_tci=0x0000,dl_src=00:00:00:00:00:00,dl_dst=00:00:00:00:00:00,nw_src=192.0.2.2,nw_dst=0.0.0.0,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=0,tp_dst=22,tcp_flags=0
bridge("br0")
-------------
0. ip,in_port=3,nw_src=192.0.2.0/24, priority 32768
resubmit(,2)
2. tcp,tp_dst=22, priority 32768
output:1
Final flow: unchanged
Megaflow: recirc_id=0,tcp,in_port=3,nw_src=192.0.2.0/24,nw_frag=no,tp_dst=22
Datapath actions: 1
最初の行は、traceコマンドです。br0
橋を通過するメッセージです。次のパラメータは、メッセージ自体を説明します。例えば、nw_src
送信元IPアドレスのマッチングを持つフィールド。すべてのパケットフィールドが十分に説明されているovs-fields(7)
_マニュアルページを参照してください。
第二行は抽象前述のパケット・ストリームによってコマンドラインを表示します。未指定のメッセージがゼロにフィールド。
次の数行は、BR0ブリッジを介して旅にメッセージを表示します。私たちは、テーブル0で、一致するフィールドのOpenFlowストリームの流れを見て、優先順位は、それが移動します。現在の状況では、我々は、このパケットがパケットストリームの流れは、表2にそれを再送信します一致することを参照してください。「再送信」アクションがオープンフロー表2に第2のルックアップテーブルを引き起こし、それが「2」の行の先頭に少ないです。第二の外観では、我々は、ストリームの流れを見ると、パケットは、OpenFlowの出力ポート#1にパケットを照合します。
要するに、最終的な決定は、可能なトレースストリームフローエントリとそのアクションですまで。最後に、追跡ツールが表示、関連するすべての照合フィールドが含まれている情報、およびデータ・パスの最後の操作をMegaflow。
私たちは80の後に何が起こるかを修正するために、より多くのパケットが、TCP宛先ポートを見てみましょう:
$ ovs-appctl ofproto/trace br0 in_port=3,tcp,nw_src=192.0.2.2,tcp_dst=80
Flow: tcp,in_port=3,vlan_tci=0x0000,dl_src=00:00:00:00:00:00,dl_dst=00:00:00:00:00:00,nw_src=192.0.2.2,nw_dst=0.0.0.0,nw_tos=0,nw_ecn=0,nw_ttl=0,tp_src=0,tp_dst=80,tcp_flags=0
bridge("br0")
-------------
0. ip,in_port=3,nw_src=192.0.2.0/24, priority 32768
resubmit(,2)
2. No match.
drop
Final flow: unchanged
Megaflow: recirc_id=0,tcp,in_port=3,nw_src=192.0.2.0/24,nw_frag=no,tp_dst=0x40/0xffc0
Datapath actions: drop
ラインの第二の部分では、テーブル内のテーブル0は、ルールの送信元IPアドレスと一致するパケットを見ることができるので、上記の表の表2に示されるように、再送信されるべきです。しかし、それは表2のいずれかのルールを満たしていません。任意のルールのパケットフローテーブルが一致しない場合には、テーブルのミスと呼ばれます。ミス行動Openvswitchスイッチは、あなたがオープンフローを使用しているバージョンに応じて、設定することができます。この例では、デフォルトのアクションは、パケットをドロップすることです。