LoginSignup
15
14

More than 5 years have passed since last update.

Click Modular Router 事始め

Last updated at Posted at 2014-05-17

Click Modular Routerとは

MIT(マサチューセッツ工科大学)が作ったソフトウェアルータで、 プロトコルを実装・評価するためのシミュレータ。SDN 、さらには DPN ができるすごいヤツ。簡易なDSLを記述することでルータやゲートウェイなど、様々なネットワークノードを実装できるので便利です。

どのように使うの?

element というモジュールを組み合わせることでノードを設計・実装します。様々なモジュールが提供されています。また、ドキュメントも充実していて親切。欲しいモジュールがあればユーザ自身で C++ を用いて実装することも可能です。

モジュール(element)

下図に element を接続することで設計されたノード(CLICKDIR/conf/demo.click)を示します。薄黄色の箱の一つ一つが elementです。
Screenshot_from_2014-05-17 16:09:35.png
element は其々が C++ 実装されたクラスです。提供される仮想クラスを継承・仮想メンバ関数を実装することで element を作れます。

パッケージ(.click)

ノードを記述するときにDSLを用います。element を宣言・接続するだけ、とても簡単。下記に.clickファイル(CLICKDIR/conf/demo.click)を示します。

// Suck stuff in.
PollDevice(eth7) -> c0 :: Classifier(12/0806 20/0001,
                                     12/0806 20/0002,
                                     12/0800,
                                     -);

out :: Queue(1024) -> ToDevice(eth4);

// ARP request need to be answered, obviously
c0[0]
    -> ARPResponder(7.0.0.1 00:C0:95:E1:FC:D6)
    -> out;

// ARP responses are handed to Linux
c0[1]
    -> ToHost();

// Non-IP packets are dropped
c0[3]
    -> Discard;

// Other IP packets. Split on UDP, TCP and rest
c0[2]
    -> Strip(14)
    -> CheckIPHeader()
    -> c1 :: Classifier(9/17, 9/6, -);


// TCP packets
c1[1] -> Print(TCP) -> out;

// UDP packets
c1[0]
    -> Print(UDP)
    -> udp_mon :: IPRateMonitor(DST, PACKETS, 0, 10, 30)
    -> udp_block :: Block(20)
    -> out;

// non-UDP and non-TCP packets
c1[2] -> Print(UNKNOWN) -> out;

インストール手順

下記にインストール手順を示します。足りないモノが何かがあれば configure が教えてくれるはず。

$ git clone git://github.com/kohler/click.git

or

$ wget read.cs.ucla.edu/click/click-VERSION.tar.gz
$ tar czvf click-VERSION.tar.gz click


$ cd click && autoconf
$ sudo ./configure --prefix=CLICKDIR
$ sudo make
$ sudo make install

動作確認

テスト用のパッケージ conf/test.click を実行、"ok"が5つ出ればインストール完了。

$ userlevel/click conf/test.click
ok:   40 | 45000028 00000000 401177c3 01000001 02000002 13691369
ok:   40 | 45000028 00000000 401177c3 01000001 02000002 13691369
ok:   40 | 45000028 00000000 401177c3 01000001 02000002 13691369
ok:   40 | 45000028 00000000 401177c3 01000001 02000002 13691369
ok:   40 | 45000028 00000000 401177c3 01000001 02000002 13691369

ついでに、ping箱(icmp エコー要求を受信すると標準出力するネットワークノード)を実行。他の計算機から ping してみると

$ sudo ./userlevel/click conf/print-pings.click
1400313867.128195: 192.168.0.6 > 192.168.0.2: icmp echo (9733, 0)
1400313868.124981: 192.168.0.6 > 192.168.0.2: icmp echo (9733, 1)
1400313869.126363: 192.168.0.6 > 192.168.0.2: icmp echo (9733, 2)
1400313870.127983: 192.168.0.6 > 192.168.0.2: icmp echo (9733, 3)
1400313871.128845: 192.168.0.6 > 192.168.0.2: icmp echo (9733, 4)
1400313872.129952: 192.168.0.6 > 192.168.0.2: icmp echo (9733, 5)
1400313873.131363: 192.168.0.6 > 192.168.0.2: icmp echo (9733, 6)
1400313874.132591: 192.168.0.6 > 192.168.0.2: icmp echo (9733, 7)

参考

Click Modular Router

15
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14