【问题标题】:Error protocol 41 >= NPROTO(41) adding new protocol to linux kernel错误协议 41 >= NPROTO(41) 向 linux 内核添加新协议
【发布时间】:2016-12-15 09:07:39
【问题描述】:

出于学习目的,我正在开发一个名为HTP的新协议(在传输层为UDP/TCP),并倾向于将其作为模块注册到Linux内核。

按照本教程 https://linuxwarrior.wordpress.com/2008/12/02/add-a-new-protocol-to-linux-kernel/

我在 linux/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 内核还是有其他解决方法?

非常感谢。

【问题讨论】:

    标签: c linux sockets kernel network-protocols


    【解决方案1】:

    此打印来自内核代码,而不是任何驱动程序。正如你所看到的,41 是硬编码的……内核广泛使用这个常量。 所以是的,为了使用“新”AF,您必须重新编译 Linux。

    另一种选择是为您的协议重用其他一些AF_* - 您的内核可能没有加载所有协议。所以你可以选择一个未使用的“家庭”并使用它。它会工作的。

    【讨论】:

    • 谢谢,我试试看:)
    猜你喜欢
    • 1970-01-01
    • 2015-09-12
    • 2016-10-06
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-17
    相关资源
    最近更新 更多