diff options
| author | Qiuwen Lu <[email protected]> | 2016-11-09 16:29:26 +0800 |
|---|---|---|
| committer | Qiuwen Lu <[email protected]> | 2016-11-09 16:29:26 +0800 |
| commit | 668337a2db136bbc79a4e37c290ebc468f23e540 (patch) | |
| tree | adeee73c8f85836ddf6959d471f3b421d3c50764 /stack/src | |
| parent | d5439897c7cb544f3216da214fa5473368d078c2 (diff) | |
重构物理设备管理器,支持多类型多队列管理。
Diffstat (limited to 'stack/src')
| -rw-r--r-- | stack/src/device.c | 42 |
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; } |
