Monaのプロトコルスタックの方向性について考える
mones2の実装をいろいろ進めていましたが2つの狙いがありました。
- 実装を通してのドライバインターフェースの設計の種とする
- ネットワークの知識の習得
「実装を通してのドライバインターフェースの設計の種とする」
狙い
NICドライバの最小インターフェースは何か?
さらに進めて今までの経験をあわせて、最小のドライバーインターフェースは何か?
を探るという狙いがありました。
成果
これは、uipのtapデバイスドライバ、WinSock RawSocket、WinPcapを見ていくことで見えてきました。
結論から言うと、Initilize/Write/Readあたりで十分そう。
必要があればioctl的なものを追加すればいいかな。
「ネットワーク知識の習得」
Monaのプロトコルスタックをどうするか?
このような前提で、いろいろ進めてきたなかで感じたことを適当に書いてみます。
以前は、プロトコルスタックを全部自分で実装するのは勉強にもなるしやるべきだと思っていました。
ですが今では、自分で実装しなくても、移植でもありかなと思うようになりました。
理由は
- ネットワークプロトコルは仕様がきちんと定められているという点において自由度がないこと。(実装方法の自由度はもちろんあります)
- 個人で実装すると、信頼性を上げる部分に膨大な時間がかかりそう。(動く程度の実装に比べての話)
- ネットワークプロトコルの実装の違いで、Mona OSだけの特長は出しづらい
- 移植性の高そうなプロトコルスタック実装がいくつかある
などです。
そういう心境の変化もあり
- uip
- FreeBSD
などを物色しています。
junjunnさんのNineBirdも見てみようと思います。