I am getting compiler error while compiling my old kernel
module which is using netlink functions.
int
init_module()
{
/* Initialize the Netlin
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.
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.");
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.