Linux kernel 通过内核模块发送ip数据包

Linux kernel 通过内核模块发送ip数据包,linux-kernel,Linux Kernel,我正在编写一个内核模块,它创建一个ip数据包并将其发送到所需的目的地。我正在使用中声明的函数ip\u forward()。当我试图编译代码时,我得到一个错误: “ip_前进”未定义 ip\u-forward未导出(无EXPORT\u-SYMBOL),因此无法从内核模块使用它 它也是IP堆栈的一个内部函数,不打算直接调用。它可能有各种各样的假设,这会给你带来麻烦 也许可以试试ip\u queue\u xmit,尽管我不能100%确定它是否可用。它是在哪个头文件中声明的……由哪个函数发送ip数据包…

我正在编写一个内核模块,它创建一个ip数据包并将其发送到所需的目的地。我正在使用
中声明的函数
ip\u forward()
。当我试图编译代码时,我得到一个错误:

“ip_前进”未定义


ip\u-forward
未导出(无
EXPORT\u-SYMBOL
),因此无法从内核模块使用它

它也是IP堆栈的一个内部函数,不打算直接调用。它可能有各种各样的假设,这会给你带来麻烦


也许可以试试
ip\u queue\u xmit
,尽管我不能100%确定它是否可用。

它是在哪个头文件中声明的……由哪个函数发送ip数据包……。它在net/ip.h中声明,在编译的/net/ipv4/ip\u forward.c
ip\u queue\u xmit
中定义,没有任何错误。但当我试图插入模块时,系统挂起,我不得不重新启动。我按如下方式调用函数:struct flowi*fl=NULL;fl->u.ip4.SADD=123456;fl->u.ip4.daddr=234567;如果(ip_queue_xmit(skb,fl)>=0)printk(KERN_EMERG“包传输”);else printk(KERN_EMERG“错误”);您需要调试。。。但是序列
struct flowi*fl=NULL;fl->u.ip4.saddr=123456
肯定会在空指针解引用时崩溃。