LoginSignup
3
3

More than 5 years have passed since last update.

Click Modular Router でFizzBuzzを書いてみた

Last updated at Posted at 2014-05-17

前回までのあらすじ

clickを使えば、どんな(!?)ネットワークノードでも作れることが分かりました。

前回

サンプルパッケージ(.click)を作成

さて、実際にパッケージを作るにはどうするのでしょうかか?サンプルパッケージがCLICKDIR/etc/samplepackageにあります。先ずは、これを実際にビルドしてみましょう。ディレクトリ構造は以下の通りです。

etc/samplepackage/
├── Makefile.in
├── README
├── configure.ac
├── sampleelt.cc
├── sampleelt.hh
└── test.click

ビルド手順

ビルド手順を下記に示します。

$ cd CLICKDIR/etc/samplepackage
$ autoconf
$ sudo ./configure --prefix=CLICKDIR
$ sudo make install
$ cd CLICKDIR && sudo make elemlist

動作確認

さらに、サンプルパッケージの作成が成功しているか確認。

$ cd CLICKDIR
$ sudo ./userlevel/click etc/samplepackage/test.click 
etc/samplepackage/test.click:3: While initializing ‘test :: SamplePackageElement’:
  Successfully linked with package!

自前でパッケージ(.click)を作成

流れが分かった所で、自前のパッケージを作成。

  1. パッケージ用のディレクトリを作成する

  2. (.hhファイルと.ccファイルで element を実装する)

  3. .clickファイルを記述する

  4. etc/configure.ac をコピーして書き換える

  5. etc/Makefile.in をコピーして書き換える

  6. 後は、上述のビルド手順と同じ

FizzBuzz IP Print

ping箱(icmp エコー要求を受信すると標準出力するネットワークノード)を簡単に拡張。連続するエコー要求に対してFizzBuzzする element とそのパッケージを作成してみた。

実装

element についてはCLICKDIR/eements/ip/ipprint.*を、パッケージファイルについてはCLICKDIR/conf/print-pings.click
を参考にして実装(ちょっと書き足しただけ)。

実行結果

$ sudo ./userlevel/click fizzbuzzipprint/fizzbuzz-print-ping.click 
1400319739.238376: 192.168.0.6 > 192.168.0.2: icmp echo (38919, FIZZBUZZ)
1400319740.238418: 192.168.0.6 > 192.168.0.2: icmp echo (38919, 1)
1400319741.239264: 192.168.0.6 > 192.168.0.2: icmp echo (38919, 2)
1400319742.240362: 192.168.0.6 > 192.168.0.2: icmp echo (38919, FIZZ)
1400319743.240233: 192.168.0.6 > 192.168.0.2: icmp echo (38919, 4)
1400319744.242769: 192.168.0.6 > 192.168.0.2: icmp echo (38919, BUZZ)
1400319745.243883: 192.168.0.6 > 192.168.0.2: icmp echo (38919, FIZZ)
1400319746.245183: 192.168.0.6 > 192.168.0.2: icmp echo (38919, 7)
1400319747.246686: 192.168.0.6 > 192.168.0.2: icmp echo (38919, 8)
1400319748.247602: 192.168.0.6 > 192.168.0.2: icmp echo (38919, FIZZ)
1400319749.248823: 192.168.0.6 > 192.168.0.2: icmp echo (38919, BUZZ)
1400319750.250107: 192.168.0.6 > 192.168.0.2: icmp echo (38919, 11)
1400319751.251322: 192.168.0.6 > 192.168.0.2: icmp echo (38919, FIZZ)
1400319752.251410: 192.168.0.6 > 192.168.0.2: icmp echo (38919, 13)
1400319753.253154: 192.168.0.6 > 192.168.0.2: icmp echo (38919, 14)
1400319754.254597: 192.168.0.6 > 192.168.0.2: icmp echo (38919, FIZZBUZZ)
1400319755.255436: 192.168.0.6 > 192.168.0.2: icmp echo (38919, 16)
1400319756.256580: 192.168.0.6 > 192.168.0.2: icmp echo (38919, 17)

ソースコード

GitHubに置いてあります。

参考

Click Modular Router

3
3
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
3
3