diff --git a/openair2/NAS/DRIVER/MESH/netlink.c b/openair2/NAS/DRIVER/MESH/netlink.c index 49d72d921e8055e298ff6ae20d052235e59f4465..574f311549c472516278386901d810b6cb2174d3 100644 --- a/openair2/NAS/DRIVER/MESH/netlink.c +++ b/openair2/NAS/DRIVER/MESH/netlink.c @@ -34,6 +34,7 @@ */ //#include <linux/config.h> +#include <linux/version.h> #include <linux/socket.h> #include <linux/kernel.h> #include <linux/module.h> @@ -57,7 +58,9 @@ static struct sock *nas_nl_sk = NULL; static int exit_netlink_thread=0; static int nas_netlink_rx_thread(void *); - +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) +struct netlink_kernel_cfg oai_netlink_cfg; +#endif static DEFINE_MUTEX(nasmesh_mutex); @@ -152,20 +155,33 @@ int nas_netlink_init() { printk("[NAS][NETLINK] Running init ...\n"); - - nas_nl_sk = netlink_kernel_create( -#ifdef KERNEL_VERSION_GREATER_THAN_2622 - &init_net, -#endif - NAS_NETLINK_ID, - 0, - nas_nl_data_ready, -#ifdef KERNEL_VERSION_GREATER_THAN_2622 - &nasmesh_mutex, // NULL -#endif - THIS_MODULE); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) + oai_netlink_cfg.groups = 0; + oai_netlink_cfg.input = nas_nl_data_ready; + oai_netlink_cfg.cb_mutex = &nasmesh_mutex; + oai_netlink_cfg.bind = NULL; + nas_nl_sk = netlink_kernel_create( + &init_net, + NAS_NETLINK_ID, +# if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0) + THIS_MODULE, +# endif + &oai_netlink_cfg); +#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) */ + nas_nl_sk = netlink_kernel_create( +# ifdef KERNEL_VERSION_GREATER_THAN_2622 + &init_net, +# endif + NAS_NETLINK_ID, + 0, + nas_nl_data_ready, +# ifdef KERNEL_VERSION_GREATER_THAN_2622 + &nasmesh_mutex, // NULL +# endif + THIS_MODULE); +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) */ if (nas_nl_sk == NULL) { @@ -224,7 +240,11 @@ int nas_netlink_send(unsigned char *data,unsigned int len) { nlh->nlmsg_pid = 0; /* from kernel */ +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0) + NETLINK_CB(nl_skb).portid = 0; +#else NETLINK_CB(nl_skb).pid = 0; +#endif #ifdef NETLINK_DEBUG printk("[NAS][NETLINK] In nas_netlink_send, nl_skb %p, nl_sk %x, nlh %p, nlh->nlmsg_len %d\n",nl_skb,nas_nl_sk,nlh,nlh->nlmsg_len);