summaryrefslogtreecommitdiff
path: root/stack/src
diff options
context:
space:
mode:
authorQiuwen Lu <[email protected]>2016-11-09 16:29:26 +0800
committerQiuwen Lu <[email protected]>2016-11-09 16:29:26 +0800
commit668337a2db136bbc79a4e37c290ebc468f23e540 (patch)
treeadeee73c8f85836ddf6959d471f3b421d3c50764 /stack/src
parentd5439897c7cb544f3216da214fa5473368d078c2 (diff)
重构物理设备管理器,支持多类型多队列管理。
Diffstat (limited to 'stack/src')
-rw-r--r--stack/src/device.c42
1 files changed, 21 insertions, 21 deletions
diff --git a/stack/src/device.c b/stack/src/device.c
index 4d5d364..2512f62 100644
--- a/stack/src/device.c
+++ b/stack/src/device.c
@@ -66,8 +66,6 @@ int sk_device_iterate(struct sk_instance * instance, struct sk_dev_info ** dev_i
static void sk_dev_desc_delete(struct sk_dev_desc * dev_desc)
{
- // TODO:stream的释放
-
// 释放RX侧自循环缓冲区
for (int i = 0; i < RTE_DIM(dev_desc->rx_loop_buffer); i++)
{
@@ -98,7 +96,7 @@ static int __sk_device_create_loop_buffer(struct sk_instance * instance,
char str_tx_loop_buffer[MR_SYMBOL_MAX];
snprintf(str_tx_loop_buffer, sizeof(str_tx_loop_buffer),
- "skd-%s-rxl-%d", devinfo->symbol, i);
+ "skd-%s-txl-%d", devinfo->symbol, i);
dev_desc->rx_loop_buffer[i] = rte_ring_create(str_rx_loop_buffer,
param->sz_rx_loop_buffer, SOCKET_ID_ANY, RING_F_SC_DEQ | RING_F_SP_ENQ);
@@ -143,8 +141,8 @@ int sk_device_create(struct sk_instance * instance, struct sk_dev_param * param,
struct rte_mempool * direct_pool, struct rte_mempool * indirect_pool)
{
// 检查设备是否已经存在,不允许重复创建
- struct sk_dev_info * devinfo = sk_device_lookup(instance, param->symbol);
- if(devinfo != NULL)
+ struct sk_dev_info * dev_info = sk_device_lookup(instance, param->symbol);
+ if(dev_info != NULL)
{
MR_LOG(INFO, STACK, "StackCreateDevice, StackDevice %s has been created. failed. \n",
param->symbol);
@@ -152,22 +150,22 @@ int sk_device_create(struct sk_instance * instance, struct sk_dev_param * param,
}
// 申请Info结构体的空间
- devinfo = rte_zmalloc(NULL, sizeof(struct sk_dev_info), 0);
- if(unlikely(devinfo == NULL))
+ dev_info = rte_zmalloc(NULL, sizeof(struct sk_dev_info), 0);
+ if(unlikely(dev_info == NULL))
{
MR_LOG(WARNING, STACK, "StackCreateDevice, Cannot alloc memory for device info.\n");
return -ENOMEM;
}
// 写参数
- snprintf(devinfo->symbol, sizeof(devinfo->symbol), "%s", param->symbol);
- devinfo->param = *param;
- devinfo->instance_ = instance;
- devinfo->in_addr = param->in_addr;
- devinfo->in_mask = param->in_mask;
- devinfo->mac_addr = param->mac_addr;
- devinfo->mtu = param->mtu;
- devinfo->promisc = 0;
+ snprintf(dev_info->symbol, sizeof(dev_info->symbol), "%s", param->symbol);
+ dev_info->param = *param;
+ dev_info->instance_ = instance;
+ dev_info->in_addr = param->in_addr;
+ dev_info->in_mask = param->in_mask;
+ dev_info->mac_addr = param->mac_addr;
+ dev_info->mtu = param->mtu;
+ dev_info->promisc = 0;
assert(direct_pool != NULL && indirect_pool != NULL);
@@ -175,14 +173,15 @@ int sk_device_create(struct sk_instance * instance, struct sk_dev_param * param,
if (unlikely(dev_desc == NULL))
{
MR_LOG(WARNING, STACK, "Cannot alloc memory for sk-dev %s desc. Failed. \n",
- devinfo->symbol);
+ dev_info->symbol);
goto err_out;
}
+ dev_desc->dev_info = dev_info;
dev_desc->direct_pool = direct_pool;
dev_desc->indirect_pool = indirect_pool;
- int ret = __sk_device_create_loop_buffer(instance, param, devinfo, dev_desc);
+ int ret = __sk_device_create_loop_buffer(instance, param, dev_info, dev_desc);
if (unlikely(ret < 0)) goto err_out;
ret = protocol_raw_dev_desc_init(instance, dev_desc);
@@ -190,15 +189,16 @@ int sk_device_create(struct sk_instance * instance, struct sk_dev_param * param,
// 加入到协议栈设备链表中
- TAILQ_INSERT_TAIL(&instance->dev_info_list, devinfo, next);
+ TAILQ_INSERT_TAIL(&instance->dev_info_list, dev_info, next);
// 加入协议栈描述符列表
TAILQ_INSERT_TAIL(&instance->dev_desc_list, dev_desc, next);
// TODO: 详细的日志输出
- MR_LOG(NOTICE, STACK, "Sk-device %s created. \n", devinfo->symbol);
+ MR_LOG(NOTICE, STACK, "Sk-device %s created. \n", dev_info->symbol);
+ return 0;
err_out:
- MR_LOG(ERR, STACK, "Sk-device %s create failed. \n", devinfo->symbol);
- if (devinfo) rte_free(devinfo);
+ MR_LOG(ERR, STACK, "Sk-device %s create failed. \n", dev_info->symbol);
+ if (dev_info) rte_free(dev_info);
return 0;
}