前回までのあらすじ
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)を作成
流れが分かった所で、自前のパッケージを作成。
-
パッケージ用のディレクトリを作成する
-
(.hhファイルと.ccファイルで
element
を実装する) -
.clickファイルを記述する
-
etc/configure.ac をコピーして書き換える
-
etc/Makefile.in をコピーして書き換える
-
後は、上述のビルド手順と同じ
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に置いてあります。