VOS_INT __init DMS_NLK_Init(VOS_VOID) { struct sock *pstSock = VOS_NULL_PTR; DMS_NLK_ENTITY_STRU *pstNlkEntity = VOS_NULL_PTR; printk("DMS_NLK_Init entry,%u",VOS_GetSlice()); /* 初始化 netlink 实体 */ DMS_NLK_InitEntity(); /* 在内核态创建一个 netlink socket */ #if ((LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)) || (VOS_OS_VER == VOS_WIN32)) pstSock = netlink_kernel_create(&init_net, NETLINK_HW_LOGCAT, &g_stDmsNlkCfg); #else pstSock = netlink_kernel_create(&init_net, NETLINK_HW_LOGCAT, 0, DMS_NLK_Input, NULL, THIS_MODULE); #endif if (VOS_NULL_PTR == pstSock) { printk(KERN_ERR "[%s][LINE: %d] Fail to create netlink socket.\n", __func__, __LINE__); DMS_DBG_NLK_CREATE_SOCK_FAIL_NUM(1); return -ENOMEM; } /* 保存 socket */ pstNlkEntity = DMS_GET_NLK_ENTITY(); pstNlkEntity->pstSock = pstSock; printk("DMS_NLK_Init exit,%u",VOS_GetSlice()); return 0; }
VOS_VOID DMS_NLK_InitEntity(VOS_VOID) { DMS_NLK_ENTITY_STRU *pstNlkEntity = VOS_NULL_PTR; pstNlkEntity = DMS_GET_NLK_ENTITY(); /* netlink socket */ pstNlkEntity->pstSock = VOS_NULL_PTR; /* netlink 消息数据块大小 */ pstNlkEntity->ulDataSize = DMS_NLK_DEFUALT_DATA_SIZE; /* netlink 消息数据块大小 */ pstNlkEntity->ulThreshSize = DMS_NLK_DEFUALT_DATA_SIZE * 2; /* netlink 物理承载进程号 */ pstNlkEntity->astPhyBearProp[DMS_NLK_PHY_BEAR_LTE].lPid = DMS_NLK_INVALID_PID; pstNlkEntity->astPhyBearProp[DMS_NLK_PHY_BEAR_GU].lPid = DMS_NLK_INVALID_PID; /* netlink 逻辑通道属性(LTE CLTR) */ pstNlkEntity->astOmChanProp[DMS_OM_CHAN_LTE_CTRL].pDataFunc = VOS_NULL_PTR; pstNlkEntity->astOmChanProp[DMS_OM_CHAN_LTE_CTRL].pEvtFunc = VOS_NULL_PTR; pstNlkEntity->astOmChanProp[DMS_OM_CHAN_LTE_CTRL].enPhyBear = DMS_NLK_PHY_BEAR_LTE; pstNlkEntity->astOmChanProp[DMS_OM_CHAN_LTE_CTRL].enMsgType = DMS_NLK_MSG_TYPE_LTE_CTRL; /* netlink 逻辑通道属性(LTE DATA) */ pstNlkEntity->astOmChanProp[DMS_OM_CHAN_LTE_DATA].pDataFunc = VOS_NULL_PTR; pstNlkEntity->astOmChanProp[DMS_OM_CHAN_LTE_DATA].pEvtFunc = VOS_NULL_PTR; pstNlkEntity->astOmChanProp[DMS_OM_CHAN_LTE_DATA].enPhyBear = DMS_NLK_PHY_BEAR_LTE; pstNlkEntity->astOmChanProp[DMS_OM_CHAN_LTE_DATA].enMsgType = DMS_NLK_MSG_TYPE_LTE_DATA; /* netlink 逻辑通道属性(GU DATA) */ pstNlkEntity->astOmChanProp[DMS_OM_CHAN_GU_DATA].pDataFunc = VOS_NULL_PTR; pstNlkEntity->astOmChanProp[DMS_OM_CHAN_GU_DATA].pEvtFunc = VOS_NULL_PTR; pstNlkEntity->astOmChanProp[DMS_OM_CHAN_GU_DATA].enPhyBear = DMS_NLK_PHY_BEAR_GU; pstNlkEntity->astOmChanProp[DMS_OM_CHAN_GU_DATA].enMsgType = DMS_NLK_MSG_TYPE_GU_DATA; return; }