netlink_kernel_create is not working with latest linux kernel

前端 未结 3 1648
情深已故
情深已故 2021-02-04 11:28

I am getting compiler error while compiling my old kernel module which is using netlink functions.

int
init_module()
{
    /* Initialize the Netlin         


        
相关标签:
3条回答
  • 2021-02-04 12:08

    That's because in 3.8 the netlink_kernel_create prototype has been changed:

    netlink_kernel_create(struct net *net, int unit, struct netlink_kernel_cfg *cfg)

    (and q.v. http://lxr.linux.no/linux+v3.8/include/linux/netlink.h#L48)

    You've no option but to rewrite the kernel module, and remove that extra argument (THIS_MODULE), as well as implement the netlink_kernel_cfg struct.

    0 讨论(0)
  • 2021-02-04 12:11
        netlink_kernel_create(struct net *net, int unit, struct netlink_kernel_cfg *cfg)
    
        struct netlink_kernel_cfg cfg = {
            .groups = SELNLGRP_MAX,
            .flags  = NL_CFG_F_NONROOT_RECV,
        };
    
        selnl = netlink_kernel_create(&init_net, NETLINK_SELINUX, &cfg);
        if (selnl == NULL)
            panic("SELinux:  Cannot create netlink socket.");
    
    0 讨论(0)
  • 2021-02-04 12:19

    Just replace

    nl_sk = netlink_kernel_create(&init_net, 17, 0, recv_cmd, NULL, THIS_MODULE);
    

    with the following

    struct netlink_kernel_cfg cfg = {
        .input = recv_cmd,
    };
    
    nl_sk = netlink_kernel_create(&init_net, 17, &cfg);
    

    and it should work. I ran into the same problems.

    0 讨论(0)
提交回复
热议问题