【问题标题】:Why do I receive an "RTMGRP_LINK undeclared" error even when "rtnetlink.h" is included?为什么即使包含“rtnetlink.h”,我也会收到“RTMGRP_LINK undeclared”错误?
【发布时间】:2014-07-14 09:01:47
【问题描述】:

我编写了一个内核模块,我想在其中向用户空间程序发送接口启动/关闭通知。我已将消息组分配为RTMGRP_LINK,还包括linux/rtnetlink.h 头文件。但是当我编译模块时仍然收到以下错误:

abc.c: In function âevent_handlerâ:
abc.c:63: error: âRTMGRP_LINKâ undeclared (first use in this function)
abc.c:63: error: (Each undeclared identifier is reported only once
abc.c:63: error: for each function it appears in.)

有人能说明原因吗?

【问题讨论】:

  • RTMGRP_LINK 宏被定义为仅供用户模式程序使用。我可以看到它是在“#ifndef __KERNEL__”宏下定义的
  • @Icarus3 正确。再次浏览内核头文件后,我观察到 RTMGRP_LINK 仅限于用户空间程序,如您所说。对于内核模块,将使用 RTNLGRP_LINK。

标签: linux kernel-module netlink


【解决方案1】:

经过linux/rtnetlink.h 标头后。我观察到RTMGRP_LINK 是在#ifndef __KERNEL__ 下定义的,这意味着它只能由用户空间程序使用。对于内核模块RTNLGRP_LINK 应该用于使用NETLINK_ROUTE 系列的Netlink Sockets 进行通信。

【讨论】:

    猜你喜欢
    • 2020-10-25
    • 1970-01-01
    • 2021-12-30
    • 2019-10-11
    • 2022-11-03
    • 2022-06-10
    • 1970-01-01
    • 2021-08-21
    • 2023-03-29
    相关资源
    最近更新 更多