#ifdef __KERNEL__ #include #include #include "obj_api.h" static int server_objs_cmp(__be32 port, int proType) { return 0; } static PSERVER_OBJ_CONTENT new_server_content(__be16 minPort, __be16 maxPort, int proType) { PSERVER_OBJ_CONTENT dt = (PSERVER_OBJ_CONTENT)kmalloc(sizeof(SERVER_OBJ_CONTENT), GFP_KERNEL); if(!dt) { printk(KERN_ERR "new_server_data error\n"); } else { memset(dt, 0, sizeof(SERVER_OBJ_CONTENT)); dt->min_port = minPort; dt->max_port = maxPort; dt->pro_type = proType; } return dt; } static POBJECT_DATA new_server_object(void) { POBJECT_DATA obj = (POBJECT_DATA)kmalloc(sizeof(POBJECT_DATA), GFP_KERNEL); if(obj == NULL) { printk(KERN_ERR "Malloc CMHI_OBJECT Error\n"); return NULL; } memset(obj, 0, sizeof(CMHI_OBJECT)); obj->callback = server_objs_cmp; return obj; } int add_server_obj_data(PCMHI_OBJECT pObj, __be16 minPort, __be32 maxPort, int proType) { PSERVER_OBJ_CONTENT dt; if(pObj == NULL) { printk(KERN_ERR "Input pObj is NULL\n"); return -EINVAL; } dt = new_server_content(minPort, maxPort, proType); if(dt == NULL) { printk(KERN_ERR "Malloc SERVER_OBJ_CONTENT Error\n"); return -ENOMEM; } write_lock(&pObj->lock); list_add_tail(&dt->list, &pObj->data->content); write_unlock(&pObj->lock); return 0; } PCMHI_OBJECT create_server_object(const char *name, OBJ_TYPES type) { POBJECT_DATA pObjData = NULL; PCMHI_OBJECT pObj = new_object(); if(!pObj) { printk(KERN_ERR "create_server_object error\n"); return NULL; } pObjData = new_server_object(); if(!pObjData) { printk(KERN_ERR "new_server_object error\n"); kfree(pObj); return NULL; } strncpy(pObj->name, name, MAX_NAME_LEN - 1); pObj->type = type; pObj->data = pObjData; INIT_LIST_HEAD(&pObj->data->content); return pObj; } void cleanup_server_object(PCMHI_OBJECT pObj) { PSERVER_OBJ_CONTENT req = NULL, temp_req = NULL; if(!pObj) { return; } write_lock(&pObj->lock); list_for_each_entry_safe(req, temp_req, &pObj->data->content, list) { list_del(&req->list); kfree(req); } kfree(pObj->data); write_unlock(&pObj->lock); kfree(pObj); } #endif // __KERNEL__