2000/09/26

2000/09/26

[LINUX] [NETWORK] SOCK_PACKET ?

linux 2.4(test-?)でtcpdumpなどを使っていると

tcpdump uses obsolete (PF_INET,SOCK_PACKET)

なんてログが残ります。 で調べてみると


/* Compatibility.
   This uglymoron is moved from INET layer to here to avoid
   deadlock in module load.
*/
  if (family == PF_INET && type == SOCK_PACKET) {
    static int warned; 
    if (!warned) {
      warned = 1;
      printk(KERN_INFO "%s uses obsolete (PF_INET,SOCK_PACKET)\n", current->comm);
    }
    family = PF_PACKET;
  }

なんてのが linux/net/socket.c にありました。じゃどうすれば良いのかというとsocket(2)を調べてみるとやはりここにも、

 SOCK_PACKET は 廃止されており新しいプログラムで使用してはいけない。

という記述がありました。そこでsocket(7)を調べてみると、

socket(PF_PACKET, SOCK_RAW, protocol);

みたいにすれば良いとのこと(完全互換ではない)。また、

移植性の必要なプログラムでは pcap(3) で PF_PACKET を用いる
ほうが良い。ただしこの方法では PF_PACKET の機能すべてを 利
用することはできない。

とありました。

0 件のコメント: