2016-08-09 3 views
0

私はというHTP(UDP/TCPのようなトランスポート層)という新しいプロトコルを開発しており、Linuxカーネルに登録する傾向があります。モジュールとして。このチュートリアル https://linuxwarrior.wordpress.com/2008/12/02/add-a-new-protocol-to-linux-kernel/エラープロトコル41> = NPROTO(41)Linuxカーネルに新しいプロトコルを追加する

Iはリナックス/ sock.hヘッダファイルに新しいレコードを挿入:

#define AF_HTP  41 /* new HTP protocol family*/ 
#define AF_MAX  42 /* For now.. */ 

(それだけ41プロトコル、AF_MAX = 41を有するように使用される)

私のコードでは、私はしました:

static struct net_proto_family htp_proto_family = { 
    .family = AF_HTP, 
    .create = htp_create_socket, 
    .owner = THIS_MODULE, 
}; 

... 

//in init_module 
proto_register_status = proto_register(&htp_proto, 1); 

そして、これは私がモジュールのインストールに失敗した後にdmesgによって得たものである:

[ 594.098672] protocol 41 >= NPROTO(41) 

私の質問: 私はこのような状況で何をすべきか? Linuxカーネルを再コンパイルする必要があるのでしょうか?

ありがとうございました。

答えて

1

この印刷物は、カーネルコードから来たもので、ドライバではありません。ご覧のとおり、41はハードコードされています...カーネルはこのconstを広く使用しています。 ええ、「新しい」AFを使うためには、Linuxを再コンパイルする必要があります。

もう1つの方法は、あなたのプロトコルにもう1つのAF_*を再利用することです。あなたのカーネルには、すべてのプロトコルがロードされていない可能性があります。あなたは未使用の "家族"の1つを選んで使用することができます。それはうまくいくだろう。

+0

ありがとう、私はそれを試してみる:) – Immort

関連する問題