今日も秋田で IoT

旧 Trema 日記

2012-03-01から1ヶ月間の記事一覧

C 言語で flow_mod を送る (その2)

今回は、flow_mod メッセージの作り方について、少し詳しく説明したいと思います。openflow-message.h 中にて、以下のように create_flow_mod() のプロトタイプが宣言されています。 buffer *create_flow_mod( const uint32_t transaction_id, const struct …

C 言語で flow_mod を送る (その1)

今回は、flow_mod をスイッチに送る方法について説明します。packet_in ハンドラ中で、flow_mod を作り、送ってみましょう。 flow_mod を送る際のポイントは、以下の 4 つです。 match を作る 今回の例では、set_match_from_packet() 関数を使って、packet_i…

OpenWRT with OpenFlow を trema と接続する(その3)

今回は、OpenWRT/WHR-G301N がきちんと OpenFlow スイッチとして動作するのかを確認してみたいと思います。今回使うコントローラは、loopback-test.rb を用います。 さっそく動かす。 それでは起動してみましょう。OpenWRT/WHR-G301N 中の OpenFlow スイッチ…

OpenWRT with OpenFlow を trema と接続する(その2)

OpenWRT/WHR-G301N 側の設定 前回の記事で /lib/openflow/ofprotocol.sh の修正を行いましたが、それに加え、今回は以下の修正を行いました。 /etc/config/network : switch_vlan の設定を変更しています。 /etc/config/openflow : OpenFlow の設定は、inban…

OpenWRT with OpenFlow を trema と接続する(その1)

srchack さんの patch により、OpenWRT を OpenFlow スイッチとして動作させることができるようになりました。OpenWRT の OpenFlow 化については こちら をご参照いただくとして、ここでは trema に繋いでみる方法について簡単に紹介します。 OpenWRT 側の変…

C 言語で packet_in ハンドラを書く (その4)

前回紹介した packet_info 型のデータを取り出す関数として、get_packet_info() 関数を用意しています。この関数を使って packet_info 型の構造体の値を取り出すことで、パケット中の値を簡単に参照することができます。 例えば packet_in ハンドラを以下の…

C 言語で packet_in ハンドラを書く (その3)

今回は packet_in ハンドラにどのような情報が渡ってくるかについて解説します。packet_in ハンドラに引数として渡ってくる packet_in 構造体は、以下のように定義されています。 typedef struct { uint64_t datapath_id; uint32_t transaction_id; uint32_t…

C 言語で packet_in ハンドラを書く (その2)

今回は packet_in ハンドラを使って、簡単なコントローラを書いてみましょう。以下のソースの handle_packet_in() がハンドラです。packet_in メッセージの送りもとのスイッチの datapath_id および受信ポートを表示する簡単なハンドラです。 1. #include <stdio.h> 2</stdio.h>…

C 言語で packet_in ハンドラを書く (その1)

C 言語を使った Trema 上でのコントローラプログラミングに関する話です。今回は packet_in を扱う方法について解説します。 packet_in は、OpenFlow スイッチがフローエントリにマッチしなかったパケットをコントローラに送るためのメッセージです。このメ…