arp実装について

仕事の都合で間が開いたので現状把握と仕切りなおし。自分の頭の整理のために書いてみる

  • ARPTEST(サーバー)と HIGE クライアントの構成で IP Address to MAC Addressをできるか試している途中

id:mjtの人が言っていたように現在問題になっているのは「非同期の処理をどうあつかうか?」という点に尽きる。
これはとてもまじめに考えるべき問題であると思う。
今思いつく限りで、2つの大きな問題ある

  • ソケットライブラリレベルでの非同期APIにおける、開発者向けインターフェースをどうするか?
  • ソケットライブラリの内部実装において、非同期問題にどう対処するか?

前者に関しては各プラットフォームのソケットライブラリを参考にすればよい。


後者に関しては、Monaのサーバアーキテクチャやマルチスレッド等を考慮しなければならない
前提としては

  • NICのドライバはフレーム受信毎に割り込みが発生する(と思う)
  • どのプロトコルに対するフレーム受信かを知ることは可能
呼び出し順序 サーバー Ether Arp Nic 備考
1 ip address to mac address メッセージ受信
2 send
3 nic->outputframe
4 ここで非同期
5 割り込みメッセージ受信
6 frame受信 frame受信だけにとどめて処理をqueueに入れるという手もあるがとりあえず保留
7 nic->inputframe
8 Arp受信
9 呼び出し元にメッセージを返す