今日も秋田で IoT

旧 Trema 日記

ATOM Lite から Line へ通知 (MicroPython)

ATOM Lite 本体についているボタンを押したら,Line に通知が飛ぶプログラムを MicroPython で作ってみました.ATOM Lite とは M5Stack 社が開発した小型マイコンモジュールです.ESP32 という Wi-Fi 機能を持ったマイコンを搭載しています.ATOM Lite ESP32…

Trema を Docker コンテナ上で動かす

いまさらですが,とある事情で Trema を動かす必要があったため,docker コンテナ上で動かしてみましたので,ここに手順を書き残しておきます.docker 関連の必要なソフトウェアは事前にインストール済みであることを前提に話を進めます. 準備 まず,作業用…

USB_E220-900T22S レビュー (その 1)

低価格の LoRa モジュール E220-900T22S を搭載した FLINT LoRa無線USBドングル (USB_E220-900T22S) を触ってみたので,備忘録を兼ねて,簡単にレビューする. ハードウェア USB シリアル 私は Mac にて使用したが,以下のサイトにて説明されている通りドラ…

レビュー「サーバ/インフラエンジニア養成読本 仮想化活用編 第二版」

先月、「サーバ/インフラエンジニア養成読本 仮想化活用編」の改訂版が発売されました。献本頂きましたので、レビューをしたいと思います。 技術説明では、教科書的な説明にとどまらず、一歩踏み込んだ説明をしてくれています。この本は、Software Design 本…

rvm を使って trema/trema-edge 共存環境をつくる

今回から OpenFlow 1.3 に対応した trema-edge に挑戦してみます。 streocat さんに先をこされた気もしますが、気にしないこととします。trema と trema-edge では必要とする ruby のバージョンが異なります。両者を扱える環境では、複数のバージョンの ruby…

Ubuntu に最新版の Open vSwitch をインストールする

今回は Ubuntu に、最新版の Open vSwitch をインストールする方法を紹介します。Open vSwitch は、今まさに開発が進行中のプロジェクトなので、使いたい機能が最新版においてのみサポートといったことが多々有ります。そのため、なるべく最新版を使えるよう…

Flow エントリをポート指定で消す (その2)

今回は、ポート番号の指定によりフローエントリを消す方法について、実際に動かして試してみましょう。以下の内容のコントローラを outport_test.rb というファイル名で用意します。 class OutportTest < Controller def switch_ready dpid send_flow_mod_ad…

Flow エントリをポート指定で消す (その1)

今回は、出力ポートが同じである複数のフローエントリを消す方法を紹介します。早速ですが、Flow Mod メッセージフォーマットを見てみましょう。 /* Flow setup and teardown (controller -> datapath). */ struct ofp_flow_mod { struct ofp_header header;…

Features Request でスイッチから情報を取得する (その5)

前回からだいぶ時間がたってしまいましたが、Features Request を用いた情報取得に関する記事の最終回です。今回は、第一回で作成した ShowFeatures コントローラを改造して、Features Request で取得できる情報を更に出力できるようにしてみます。 class Sh…

レビュー「マスタリングTCP/IP OpenFlow編」

ネットワーク技術者御用達のマスタリング TCP/IP シリーズから、OpenFlow 編が出ました。著者の方から献本頂きましたので、レビューをしたいと思います。マスタリングTCP/IP OpenFlow編作者: あきみち,宮永直樹,岩田淳出版社/メーカー: オーム社発売日: 2013…

OpenFlow実践入門 Kindle 版

拙著の OpenFlow 実践入門ですが、Kindle 版が 5/10 に発売になるようです。持ち運びに便利な Kindle 版の方も、ぜひよろしくお願いします。クラウド時代のネットワーク技術 OpenFlow実践入門作者: 高宮安仁,鈴木一哉出版社/メーカー: 技術評論社発売日: 201…

レビュー : 「次世代ネットワーク制御技術 OpenFlow 入門」

OpenFlow入門が、アスキー・メディアワークス社から発売されました。著者の方から献本いただきましたので、レビューしたいと思います。次世代ネットワーク制御技術 OpenFlow入門作者: 石井秀治,大山裕泰,河合栄治出版社/メーカー: アスキー・メディアワーク…

Features Request でスイッチから情報を取得する (その4)

今回もTremaを少し離れて、OpenFlow 1.0 の仕様の話です。今回は Features Request/Reply で取得できるポートの情報について見ていきます。ポート情報を格納するための構造体 struct ofp_phy_port は、以下のように定義されています。 struct ofp_phy_port {…

Features Request でスイッチから情報を取得する (その3)

今回は Trema の話はすこしお休みして、OpenFlow spec 1.0 の仕様書を見てみましょう。Features Reply の中身は以下のように定義されています。 /* Switch features. */ struct ofp_switch_features { struct ofp_header header; uint64_t datapath_id; /* D…

Features Request でスイッチから情報を取得する (その2)

前回、Ruby でコントローラを書きましたが、もちろん C 言語でも同様なことができます。 #include <stdio.h> #include "trema.h" static void handle_switch_ready( uint64_t dpid, void *user_data ) { UNUSED( user_data ); buffer *features_request = create_feat</stdio.h>…

Features Request でスイッチから情報を取得する (その1)

OpenFlow プロトコルでは、スイッチから情報を取得するために、Features Request/Reply メッセージが定義されています。今回は、これらのメッセージを用いたコントローラを作り、実行することで、どのような情報が取得できるかを確認してみます。 class Show…

Sliceable Switch を使う (その2)

Sliceable Switch のスライス設定は、前節で紹介したようにコマンドで行うこともできますが、REST ベースの API で行うこともできます。今回はこの REST API を使った設定方法を、試しながら紹介していきたいと思います。 まずは、コマンド設定と REST API …

Sliceable Switch を使う (その1)

今回は Trema Apps にある Sliceable Switch について紹介します。このアプリを使うと、OpenFlow ネットワーク全体をスライスに分割し,複数の L2 ネットワークとして動かすことができます。ちょうど,L2 スイッチを複数の VLAN に分けて使うイメージです。…

オープンルータ・コンペティション

Interop 2012 の併催イベントとして、オープンルータ・コンペティションが開催されました。6/13 に最終審査会が開かれたので、見学してきました。最終審査会では、一次審査を通過した10チームのプレゼンが行われました。 FPGA 付きの NIC を使ってワイヤーレ…

Openvswitch を userspace で動かす

今回は Openvswitch (ovs-vswitchd) を userspace で動作させる方法を試してみたので紹介します。以前にも openvswitch の userspace での動作について紹介しましたが、その時用いていたのは ovs-openflowd でした。こちらの方は 1.4.0 にはすでに同梱されて…

GRE を使って OpenFlow ネットワークを作る

前回は etherip を使ってトンネルを組む方法について紹介しましたが、今回は GRE を使う方法について紹介します。 Linux には kernel module として動作する GRE ドライバが存在しますが、今回は Openvswitch に組み込まれている GRE 機能を使用します。その…

EtherIP を使って OpenFlow ネットワークを作る

今回は EtherIP を使って、openvswitch 同士を接続してみたいと思います。ハードウェア OpenFlow スイッチを持っていなくても、トンネルを使うことで、オーバーレイで OpenFlow ネットワークを作ることが出来ます。今回は、以下のような構成を作ることが目標…

C 言語で Match を書く (その1)

今回は、C 言語で Match を書いてみましょう。送信元 IP アドレス 192.168.1.0/24、宛先 IP アドレス 192.168.2.0/24 とマッチさせる Flow_mod を設定するコントローラは、以下のようになります。 ポイントは二点です。 宛先 IP アドレスをマッチ条件に用い…

Match 条件の wildcard について

Match 中の wildcard について説明します。前回記事で作成した matchtest.rb を動かしてみましょう。 $ ./trema run ./matchtest.rb -c ./network.conf -d $ TREMA_HOME=. ../apps/flow_dumper/flow_dumper [0x00000000000001] priority = 65535, match = [w…

Ruby で Match を書く (その2)

今回は Match を書く際の注意点について説明します。nw_dst を Matching の条件として使ってみましょう。 上記のサンプルを動かして、どのようなフローエントリが設定されたか確認してみましょう。 $ ./trema run ./matchtest.rb -c ./network.conf -d $ TRE…

Openvswitch を OpenFlow スイッチとして使う

以前 userspace で動作する openvswitch について紹介しましたが、今回は kernel-mode で転送動作を行う openvswitch を OpenFlow スイッチとして動作させる方法をまとめてみました。 ソースは ここ にあるものを利用し、INSTALL.Linux を参考にインストール…

Ruby で Match を書く (その1)

今回は Match の書き方について説明します。今回は C 言語よりもシンプルにかける Ruby を使います。OpenFlow 1.0 の仕様では、Packet の Matching に 12-tuple の情報を用いることができます。Trema において Match を作る際に、使用したい引数に値を設定す…

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 スイッチ…