diff --git a/openair2/NAS/DRIVER/LITE/netlink.c b/openair2/NAS/DRIVER/LITE/netlink.c index c8a196ac02c2456eacdda0e3e34da15c7563adfa..cd4f05cdcc804ce3d66817231093b371bb789e33 100755 --- a/openair2/NAS/DRIVER/LITE/netlink.c +++ b/openair2/NAS/DRIVER/LITE/netlink.c @@ -31,7 +31,9 @@ * \author Raymond knopp, and Navid Nikaein, Lionel Gauthier * \company Eurecom * \email: knopp@eurecom.fr, and navid.nikaein@eurecom.fr, lionel.gauthier@eurecom.fr -*/ +*/ + +#include <linux/version.h> //#include <linux/config.h> #include <linux/socket.h> @@ -52,6 +54,9 @@ #define NAS_NETLINK_ID 31 #define NL_DEST_PID 1 +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) +struct netlink_kernel_cfg oai_netlink_cfg; +#endif static struct sock *nas_nl_sk = NULL; static int exit_netlink_thread=0; @@ -146,20 +151,33 @@ int oai_nw_drv_netlink_init(void) { printk("[OAI_IP_DRV][NETLINK] Running init ...\n"); - +#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 +# ifdef KERNEL_VERSION_GREATER_THAN_2622 &init_net, -#endif +# endif NAS_NETLINK_ID, 0, nas_nl_data_ready, -#ifdef KERNEL_VERSION_GREATER_THAN_2622 +# ifdef KERNEL_VERSION_GREATER_THAN_2622 &nasmesh_mutex, // NULL -#endif +# endif THIS_MODULE); - +#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) */ if (nas_nl_sk == NULL) { @@ -218,7 +236,11 @@ int oai_nw_drv_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("[OAI_IP_DRV][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);