2016-03-19 2 views
1

と一致するたびダミーパケットを送信するというルールをインストールするには、次の操作を実行するようにスイッチを指示し、スイッチ上のルールをインストールすることが可能です:POX - 特定のパケットがofp_match

If packet_in is TCP: 
    send (dummy packet) 
    send (packet_in) 
    send (dummy packet) 
else: 
    send (packet_in) 

私は感謝しますそれはかなり貧弱な擬似コードですが、私はそれを説明しようとしているより少し良くするために何をしようとしているのかを説明する必要があります。

基本的には、すべてのTCPパケットをコントローラに送信する必要なく、ダミーパケットを送信することで、プロジェクトのTCPパケットの送信を省略しようとしています。私はスイッチが正常に動作するようにしたいが、特定のポート宛てのTCPパケットを受信すると、同じ宛先に向かって同じポートからダミーパケット(私が構築したもの)を送信するようにします。

私は達成しようとしていることを行うためのより良い方法があるかもしれないことを理解しています。

おかげ

答えて

0

は、私の知る限りでは答えは、この概念だけではポックスを聞かせてサポートしていません何のOpenFlowではありません。 Poxはスイッチにパケットを生成するように指示できますが、この他のパケットをここに送信するアクションを持つフローテーブルエントリはありません。

しかし、次のようにこれを実装することができ可能な方法は次のとおりです。

  1. マッチTCPプロトコルとポート番号に2つのアクションを持っています。アクション番号1はパケットを送信し、アクション番号2はパケットをいくつかのスペアテーブルに送信してフローテーブルを送信します。

  2. このテーブルには、このダミーパケットを送信するようにパケットを変更するアクションがあります。あなたは特定のものを作ることはできませんでしたが、あなたは何かナンセンス値に宛先IPを変更するか、ナンセンスVLANを一種のsudoマーカーとして設定すると言うことができます。

編集: ユーザーは、私はいくつかの痘は、私が使用して計画されたプロセスを表示するコマンド見つけようとしますので、私は予備のテーブルで何を意味するのかを明確にするために求めました。 まず最初に、基本的なpoxコマンドの多くについて、this wikiを提案します。これは少し日付が入りますが、いくつかのケースでは間違っていますが、全体的には非常に便利です。

私は、すべてのフローテーブルが処理のための単一のリストである必要がないと言う、openflow 1.3が有効になっているという概念について話しています。代わりに、すべてのパケットは処理のためにテーブル0に行くことができ、アクションが、テーブル5が拡張処理を行うためにパケットを送信することができるか、またはテーブル0が何を発見したかに基づいてよりターゲットを絞った処理を行うことができる。これにより、より多彩なアクションが可能になります。この新しいコンセプトは、テーブルのテーブルまたは最終要素がフローテーブルエントリである2次元配列と考えることができます。申し訳ありませんが、言葉の表がたくさん現れます。

デフォルトでPoxはOpenFlow1.0を使用しているため、この概念をサポートしていませんが、それを可能にする拡張機能があり、その詳細情報はhereです。重要な部分のいくつかを以下に見つけることができます。

# Turn on Nicira packet_ins 
msg = nx.nx_packet_in_format() 
event.connection.send(msg) 
# Turn on ability to specify table in flow_mods 
msg = nx.nx_flow_mod_table_id() 
event.connection.send(msg) 
msg = nx.nx_flow_mod() 
msg.priority = 1 # Low priority 
msg.actions.append(of.ofp_action_output(port = of.OFPP_CONTROLLER)) 
msg.actions.append(nx.nx_action_resubmit.resubmit_table(table = 1)) 
event.connection.send(msg) 
msg = nx.nx_flow_mod() 
msg.table_id = 1 
msg.priority = 1 # Low priority 
msg.actions.append(of.ofp_action_output(port = of.OFPP_FLOOD)) 
event.connection.send(msg) 

マルチテーブル・サポートが有効になっている。この例では、フロー1は、洪水にすべてのパケットを言う流れを有しているが、テーブルから、コントローラおよび表1に、すべてのパケットを送信する追加されます。うまくいけば、これは彼らがどのように働くかについての一般的な考えを与えるでしょう。

poxを使用してパケットを編集する方法がわからない場合、アクションリストに追加して宛先MACアドレスを変更するアクションの例を以下に示します。 VLAN用

ofp_action_dl_addr.set_dst(EthAddr("01:02:03:04:05:06")) 

私が以前提案した方法は、あなたは

msg.actions.append(of.ofp_action_vlan_vid(vlan_vid=1234)) 
+0

Arduicを行うことができ、感謝!私はあなたの実装提案の主なアイデアを把握していると思いますが、私はあなたが「フローテーブルのためのいくつかのスペアテーブル」を意味するのか混乱しています。あなたはおそらく私のために詳しく説明できますか? – renopos

+0

OpenFlow/Poxのマルチテーブルの概念に関する簡単な説明を投稿するために編集しました。また、私が提案していたものを試して実装するのに役立つサンプルコードもあります。 – arduic

+0

本当にありがとうございます。私はあなたがNiciraについて話しているかもしれない気がしました - これは昨夜あなたの最初の答えを読んだ後に簡単に調べたものですが、もう少し調べてみる必要があります。 提案した実装に固有の例か、単なる例ですか?パケットをそのまま送信する1つのテーブルにルールをインストールし、パケットを別のテーブルに転送してから、VLANヘッダーを編集してダミーとして転送することは可能でしょうか? そのVLAN IDを持つすべてのパケットがドロップされたことを示す、すべてのスイッチに別のルールをインストールできますか? – renopos

関連する問題