DPDKでremote_core_launchした処理が例外を投げた時の挙動について

上記について実際に動かして調べました。

パターン1: remote_core_launchをtryに囲む

void func() /* user implementation */
{
throw exception;
}

int main() /* developer implementation */
{
dpdk_init();
try {
remote_core_launch(func);
} catch (e) {
printf(e.what());
}
}

これでは例外をキャッチできないが、一応普段どおりに terminate called after throwing an instance of ‘hogehoge’ してくれるので壊れたり(余談参照)しなかった。

余談: DPDK使ってるときに極まれにDPDKの秘孔をついてNICが使えなくなることが セキュリティキャンプであったので。(本当にDPDKの秘孔が原因か解らないけど。。)

パターン2: すべての処理の一番上からtryで囲む

void func() /* user implementation */
{
throw exception;
}

int main() /* developer implementation */
{
try {
dpdk_init();
remote_core_launch(func);
} catch (e) {
printf(e.what());
}
}

これでも例外はキャッチできない。 なおterminate called after throwing an instance of ‘hogehoge’はしてくれる

パターン3: remote_core_launchする関数をラップする

void func() /* user implementation */
{
throw exception;
}

void wrap_func() /* developer implementation */
{
try {
func();
} catch (e) {
printf(e.what());
}
}

int main() /* developer implementation */
{
dpdk_init();
remote_core_launch(wrap_func);
}

これで例外をしっかりキャッチできる

まとめ

STCPではパターン3を採用して実装する。 これが一番ベターな感じがするなあ。

OSC 2016 do に参加してきました

前回のオープンソースカンファレンス2016東京に続き、先日北海道で行われたオープンソース カンファレンス2016北海道にも参加させていただきました。 いつも通り「国立セキュリティ・キャンプ同窓会」というコミュニティで参加をさせていただき、 セキュリティキャンプ修了生の成果報告という形で展示とセミナーをさせていただきました。 前回はるくすさん(@rkx1209)に協力を仰ぎ、手伝っていただいたのですが、今回のセミナーは 私単身で心細いながらもパケット解析手法についてのお話をさせていただきました。 後述いたしますが、展示も前回と同じようにcpawctfの宣伝をさせていただいています。 今回は開発中の新フロントエンドの試作を展示させていただきました!

Continue reading

OSC2016 北海道 特設ページ

このページはOSC2016doでのセミナーのサポートページです。

今回のセミナーでは以下のようなことを行います。

  1. パケット解析ライブラリLibPGENの紹介
  2. LibPGENを使用した新たなプロトコルを解析するデモ

1. パケット解析ライブラリLibPGENの紹介

プログラミング言語から簡単でがっつりパケット解析をおこなうことができるLibPGENという パケット解析のライブラリを紹介します。

2. LibPGENを使用した新たなプロトコルを解析するデモ

既存環境が解析に対応していないプロトコルの通信を解析するデモンストレーションを行います。 LibPGENは新たなプロトコルのパケットを解析するときの拡張が簡単に行えるように設計してあり、 今回LibPGENを拡張して新たなプロトコルの通信解析を行います。 TMP(TestMessageProtocol)というデモ専用なんちゃってプロトコルを定義して、その通信をする アプリケーションを用意しました。今回はそのアプリケーションの通信をあらかじめキャプチャした ファイルを用意したので、その通信内容を解析するスクリプトを簡単に実装します。

セミナーで使用するプログラムのソース群や参考情報

セキュリティ・ミニキャンプ in 四国高松

IPA主催のセキュリティ・キャンプの地方大会であるセキュリティ・ミニキャンプ in 四国高松で チューターとして参加させていただきました。

セキュリティ・ミニキャンプin四国高松

今回はもりたこ君(@mrtc0)と一緒にチューター業務をさせていただきました。こういうのにチューターとして 参加したのは初めてで、いつも以上にもりたこ君にはご迷惑をおかけしてしまいました。いつもごめんなさい。

Continue reading

DPDKとLinuxカーネルでパケット処理のレイテンシ比較

DPDKを使って開発をするのですが、どれだけ早いのか一応自分で測ってまとめてみました。 今回はrdtscを使ってレイテンシ計測を行います。ただ、DPDKの通信速度を計るだけでなく、 Linuxカーネルで同様の通信をした時の速度と比較をします。

Continue reading

Intel DPDK の環境構築 [実機編]

ちょっとした開発でDPDKを使うことになり、 結構導入が辛かったので備忘録のようにかんたんにまとめました。 まだ全てわかっているわけではないので、 今後も勉強しながら更新していこうと思います。もしご指摘などがあれば、コメントをしていただけると、助かります。DPDK関連の日本語の情報が少ないので、他の人のお役に立てれば幸いです。 環境構築は普通のx86_64マシン上(Thinkpad X250 に ArchLinux) でやりました。 公式ドキュメントを参考にしながら行ったため、章分けなどは公式ドキュメントと合わせてあります。 わからなかった時に公式ドキュメント(英語)を参照する時にご活用ください。今回は1のIntroductionから4のCompiling and Running Sample Applicationsまでをやります。具体的にはDPDKの導入を行ってサンプルアプリケーションの実行までです。

Continue reading

サイボウズ・ラボユース

今年の2月から2ヶ月間サイボウズ・ラボユースという神制度のお世話になってきました。OSC2015/TokyoFallの時にあの川合さんに紹介していただいて、2月からしほ氏(@elliptic_shiho)とかすごい人たちの中で素人発揮してきました。 趣味の開発(大学の研究にすることも可)などをしながらバイトなどをしないための金銭面をサイボウズ・ラボに支援していただける素晴らしい制度なので紹介させていただきます。

Continue reading

BPFとLinuxでのL2IFを扱うネットワークプログラミングでの違いについて

この記事を書こうと思ったきっかけ

OSX上でc言語で書いたパケットキャプチャでパケットをキャプチャしていた時に並行してwiresharkと見比べていたのですが、なんだかwiresharkと比べてパケットを幾つかドロップしていたため、少し調べた(他人に頼った)ところ、BPFでの確保したディスクリプタはLinuxのそれと幾つか動作の違いがあるとのことなので、簡単にまとめることにしました。 今回この記事を書く上で情報を提供してくれた方々にはとても感謝です。

Continue reading

セキュリティ・キャンプアワード

先日セキュリティ・キャンプ フォーラム2016に参加することになり、そこでパケット解析ライブラリの開発について話をさせていただきました。

後日@ITさんの記事で紹介をしていただきました。 セキュリティ・キャンプが修了生の「今」を表彰する新たな取り組みに迫る

Continue reading

OSC2016 Tokyo/Spring に参加してきました

前回のOSCに続き、国立セキュリティ・キャンプ同窓会としてOSCに参加させていただきました。前回は展示のみの参加だったのですが、今回はがっつりセミナーもさせていただきましたので幾つか報告をしようと思います。

後日キャンプ運営の方のサイトに掲載していただきまいした。 セキュリティ・キャンプ修了生の活動

Continue reading

© 2016 Slank Blog

Theme by Anders NorenUp ↑