ioctl ってなんだ?

現在 sniffer というものがどのような原理で動作しているのかが知りたくて gdd というパケットスキャナーのソースを見ながら勉強していたんだ。そうしたらなにやらデバイスファイルに接続して読み込んでいる。そこで同じ事をやってみたところ上手くいかない。もう一度良くgdd のソースを追っていくと ioctl というメソッドが使われている。何の為なのかもわからないし、引き数に渡しているものもよく分からない。第一 ioctl って何の略だろうか、直感的には In Out ConTroL だと思うのだが…。
いつになったら sniffer っぽいものは出来るのだろうか…?

                                                                                                          • -

↑と書いた三時間後になってsniffer っぽいものが出来た。ただし、まともに見れない状態だ。完全に理解しているかと聞かれたら(三分ほど考えてから)『多分…』と答えるだろう。やはり、ポイントは ioctl だと思う。俺なりのioctl の理解を書いておく(言い訳だが、三時間で得たものだと思って見てほしい)
ioctl は以下のような形式だ。

ioctl(int fd, unsigned long action, ... )

これに与える引き数が全く分からなくて苦戦していたのだが、おそらく次のような事にで良いと思う。

fd
ファイルディスクリプタ(デバイスファイルを開いた際のもの)
action
バイスに対して何を行うかを指定する bpf では bpf.h に記述されている BIO**** というものがそれにあたる
...
ここは時によって代わるのだが、bpf.h のBIO*** という箇所を見れば分かる

そして次の問題はactionというものによって何をすれば良いのかだ。こいつはネットで探すか、ターミナルでman bpf で調べるか、ここhttp://www.gsp.com/cgi-bin/man.cgi?section=4&topic=bpfで見るかだ(私は最後の方法で調べた)
いつかちゃんと理解出来たら文書にしたいとは思っているが、いつになるやら…。
そして恥ずかしい事に『デバイス』とか『bpf』とかを全然理解していない。先は長いぞ。