DPDK KNI 接口2
kni 源码讲解
1 /* Initialise EAL */ 2 ret = rte_eal_init(argc, argv); 3 if (ret < 0) 4 rte_exit(EXIT_FAILURE, "Could not initialise EAL (%d)\n", ret); 5 argc -= ret; 6 argv += ret; 7 8 /* Parse application arguments (after the EAL ones) */ 9 ret = parse_args(argc, argv); 10 if (ret < 0) 11 rte_exit(EXIT_FAILURE, "Could not parse input parameters\n"); 12 13 /* Create the mbuf pool */ 14 pktmbuf_pool = rte_pktmbuf_pool_create("mbuf_pool", NB_MBUF, 15 MEMPOOL_CACHE_SZ, 0, MBUF_DATA_SZ, rte_socket_id()); 16 if (pktmbuf_pool == NULL) { 17 rte_exit(EXIT_FAILURE, "Could not initialise mbuf pool\n"); 18 return -1; 19 } 20 21 /* Get number of ports found in scan */ 22 nb_sys_ports = rte_eth_dev_count_avail(); 23 if (nb_sys_ports == 0) 24 rte_exit(EXIT_FAILURE, "No supported Ethernet device found\n"); 25 26 /* Check if the configured port ID is valid */ 27 for (i = 0; i < RTE_MAX_ETHPORTS; i++) 28 if (kni_port_params_array[i] && !rte_eth_dev_is_valid_port(i)) 29 rte_exit(EXIT_FAILURE, "Configured invalid " 30 "port ID %u\n", i); 31 32 /* Initialize KNI subsystem */ 33 init_kni(); 34 35 /* Initialise each port */ 36 RTE_ETH_FOREACH_DEV(port) { 37 /* Skip ports that are not enabled */ 38 if (!(ports_mask & (1 << port))) 39 continue; 40 init_port(port); 41 42 if (port >= RTE_MAX_ETHPORTS) 43 rte_exit(EXIT_FAILURE, "Can not use more than " 44 "%d ports for kni\n", RTE_MAX_ETHPORTS); 45 46 kni_alloc(port); 47 } 48 check_all_ports_link_status(ports_mask); 49 50 pid = getpid(); 51 RTE_LOG(INFO, APP, "========================\n"); 52 RTE_LOG(INFO, APP, "KNI Running\n"); 53 RTE_LOG(INFO, APP, "kill -SIGUSR1 %d\n", pid); 54 RTE_LOG(INFO, APP, " Show KNI Statistics.\n"); 55 RTE_LOG(INFO, APP, "kill -SIGUSR2 %d\n", pid); 56 RTE_LOG(INFO, APP, " Zero KNI Statistics.\n"); 57 RTE_LOG(INFO, APP, "========================\n"); 58 fflush(stdout); 59 60 ret = rte_ctrl_thread_create(&kni_link_tid, 61 "KNI link status check", NULL, 62 monitor_all_ports_link_status, NULL); 63 if (ret < 0) 64 rte_exit(EXIT_FAILURE, 65 "Could not create link status thread!\n"); 66 67 /* Launch per-lcore function on every lcore */ 68 rte_eal_mp_remote_launch(main_loop, NULL, CALL_MASTER); 69 RTE_LCORE_FOREACH_SLAVE(i) { 70 if (rte_eal_wait_lcore(i) < 0) 71 return -1; 72 } 73 monitor_links = 0; 74 pthread_join(kni_link_tid, &retval); 75 76 /* Release resources */ 77 RTE_ETH_FOREACH_DEV(port) { 78 if (!(ports_mask & (1 << port))) 79 continue; 80 kni_free_kni(port); 81 } 82 for (i = 0; i < RTE_MAX_ETHPORTS; i++) 83 if (kni_port_params_array[i]) { 84 rte_free(kni_port_params_array[i]); 85 kni_port_params_array[i] = NULL; 86 } 87 88 return 0;
main 主要完成步骤:
1.进行EAL层的初始化
2.解析DPDK和应用层的参数
3.分配报文的mempool,为接收报文做准备
4.初始化以及启动接口
5.启动各个核上的线程
转载于:https://www.cnblogs.com/mysky007/p/11219609.html
DPDK KNI 接口2相关推荐
- DPDK KNI介绍
DPDK KNI KNI = Kernel NIC Interface 可以通过KNI与内核交互数据包.一些不便于用户态的处理的包可以通过KNI交于内核处理. DPDK KNI 优势 比 linux ...
- dpdk kni 口 ifconfig up、down 的执行流程
问题描述 用户执行 ifconfig netcard down.up 时 rte_kni 模块中的哪部分起作用? ifconfig up down 接口的正常流程 ifconfig 是通过调用 ioc ...
- dpdk 程序接口 down、up 问题定位的一般流程
接口 up.down 失败问题排查 接口 up 失败问题 排查硬件接线情况 确认网卡是否 bypass 卡,检查 bypass 状态 收集 ifconfig x/x.ethtool x/x.ethto ...
- DPDK KNI实现(二十五)
一.为什么要用kni 通常情况下dpdk用于二三层报文转发,接收到来自网卡的报文后,如果是二层报文则查找fdb表: 如果是三层报文,则进行dnat, snat处理后,查找路由表, 将报文转发给下一跳路 ...
- 企业级负载均衡解决方案之七:京东四层负载均衡解决方案ContainerLB
一.前言 根据文章<京东商城ContainerLB实践>里面的描述,京东在2016年的时候几乎已经把他的所有业务系统转成容器模式,"线上20万+容器实例承载着数千个业务应用&qu ...
- DPDK — 安装部署(CentOS 7)
目录 文章目录 目录 官方手册 环境参数 环境准备 RT Kernel 基础软件依赖 设置大页内存 安装 DPDK 获取 DPDK 代码 设置环境变量 编译安装 目标环境目录 加载内核模块 绑定网卡到 ...
- DPDK — 架构解析
目录 文章目录 目录 前文列表 DPDK 架构 内核态模块 IGB_UIO KNI PMD DPDK Lib(核心部件库) 组件代码 平台相关模块 Classify 库 QoS 库 前文列表 < ...
- DPDK 初识DPDK(十五)
EAL 首先必须明白的一点就是, DPDK 是以若干个 lib 的形式提供给应用链接使用,其中最终要的一个 lib 就是 EAL 了, EAL 的全称是(Environment Abstraction ...
- lwip协议栈优化_干货分享 | KNI性能优化实践
友情提示:全文5000多文字,预计阅读时间15分钟 文章源自现网实践对支撑及用户态/内核态网络报文交换场景的认识,欢迎有Linux/FreeBSD内核.网络协议栈.DPDK优化实践经验的同学留言探讨- ...
最新文章
- 2022-2028年中国智能眼镜行业深度调研及投资前景预测报告
- SAP MM 某项目上产品层次的设计
- 告诉你你也学不会!中台灵感 SuperCell 的管理之道!
- python菜鸟教程h-Python 命令行参数
- 深入探究递归神经网络:大牛级的训练和优化如何修成?
- C# 字符、字符串过滤,只能输入数字、中文、英文、大写、小写(转)
- 改变mysql的菜单栏的颜色_导航条——动态改变导航菜单的背景颜色
- python基于svm的异常检测_[scikit learn]:异常检测-OneClassSVM的替代方案
- UVA 847 - A Multiplication Game(游戏)
- QueryRunner实战(query_update)、BeanList\BeanHandler、MapList\MapHandler、ScalarHandler
- VTK系列12_VTK读取PNG图像并显示
- conda 解决An HTTP error occurred when trying to retrieve this URL.
- 解决nacos不停刷日志 ClientWorker get changedGroupKeys:[] 问题
- ECC椭圆曲线加密的特点以及在有限域(Fp)的三点共线问题
- 企业网站用什么服务器操作系统?
- 分享一些Python导图与速查表
- 计算机开机最快设置,怎样让电脑开机更快
- 字符串去掉小数点后取整数
- 【排序算法】归并排序(C语言)
- 线性滤波、非线性滤波区别
热门文章
- Jive学习(四)--Jive缓存
- 【我解C语言面试题系列】013 以单词为单位的翻转字符串
- Castle ActiveRecord学习实践(4):实现One-Many关系的映射
- 编程软件python下载怎么读-使用最方便的计算机编程软件,Python下载使用完美教程...
- 不是计算机专业学python能找到工作吗-非计算机行业为什么要转行学习Python编程...
- python3安装pip3-python3安装pip3
- python可以在线编程吗-有哪些 python 的在线练习题或编程挑战的网站?
- python绘制三维曲面图-Python中使用Matplotlib绘制3D图形示例
- python爬虫用途-Python爬虫入门知识:解析数据篇
- python web-2019年Python Web五大主流框架