2019-07-30 10:47:21 +00:00
|
|
|
#ifdef __KERNEL__
|
|
|
|
|
|
|
|
#include <linux/init.h>
|
|
|
|
#include <linux/module.h>
|
|
|
|
|
|
|
|
#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;
|
|
|
|
}
|
|
|
|
|
2019-08-01 11:50:13 +00:00
|
|
|
//write_lock(&pObj->lock);
|
2019-07-30 10:47:21 +00:00
|
|
|
list_add_tail(&dt->list, &pObj->data->content);
|
2019-08-01 11:50:13 +00:00
|
|
|
//write_unlock(&pObj->lock);
|
2019-07-30 10:47:21 +00:00
|
|
|
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
|
2019-08-01 11:50:13 +00:00
|
|
|
//write_lock(&pObj->lock);
|
2019-07-30 10:47:21 +00:00
|
|
|
list_for_each_entry_safe(req, temp_req, &pObj->data->content, list) {
|
|
|
|
list_del(&req->list);
|
|
|
|
kfree(req);
|
|
|
|
}
|
2019-08-01 11:50:13 +00:00
|
|
|
//write_unlock(&pObj->lock);
|
2019-07-30 10:47:21 +00:00
|
|
|
kfree(pObj->data);
|
|
|
|
kfree(pObj);
|
|
|
|
}
|
|
|
|
#endif // __KERNEL__
|