struct netlink_skb_parms {
struct scm_creds creds; /* Skb credentials */
__u32 portid;
__u32 dst_group;
__u32 flags;
struct sock *sk;
bool nsid_is_set;
int nsid;
};
#define NETLINK_CB(skb) (*(struct netlink_skb_parms*)&((skb)->cb))
#define NETLINK_CREDS(skb) (&NETLINK_CB((skb)).creds)
##############################################################
NETLINK_CB(skb).creds.pid
##############################################################
struct netlink_kernel_cfg cfg = {
.input = sample_input,
};
static int init_netlink(void)
{
//nl_sk = netlink_kernel_create(&init_net, NETLINK_SAMPLE, 0, sample_input, NULL, THIS_MODULE);
nl_sk = netlink_kernel_create(&init_net, NETLINK_SAMPLE, &cfg);
if (!nl_sk)
{
printk("net_link: Cannot create netlink socket.\n");
return -EIO;
}
printk("net_link: create socket ok.\n");
return 0;
}