DPDK-尝试(2)-mdns收发包的问题
最近在完善mdns的时候,收发包这里碰到了一点问题。 使用rte_eal_mp_remote_launch在其他lcore启动了dns_worker_start这个收发包入口。原本是想在每一个lcore来处理对应的ports这样的思路,但是发现在接受的时候有问题。当PORT_PER_LCORE为1时,希望形成一个(lcore1,port0),(lcore2,port1)…这样一种配对处理,...
最近在完善mdns的时候,收发包这里碰到了一点问题。 使用rte_eal_mp_remote_launch在其他lcore启动了dns_worker_start这个收发包入口。原本是想在每一个lcore来处理对应的ports这样的思路,但是发现在接受的时候有问题。当PORT_PER_LCORE为1时,希望形成一个(lcore1,port0),(lcore2,port1)…这样一种配对处理,...
在尝试完成mdns-D的时候,碰到了在配置eth_dev_config时的一个参数问题,rte_eth_conf参数中的rx/tx配置mode,存在一个VMDQ选项,不知道这是个啥玩意。查询gpt后,给出了如下回答 VMDq 可以为每个虚拟机分配一个或多个队列,这样每个 VM 的网络流量都被独立处理,而不会相互干扰。这种方式特别适用于高密度虚拟化环境,其中大量的 VM 需要共享同一个...
最近的学习暂时告一段落,一直看下去,不动手实操也不会有什么实际体验,还得是手写代码来走进每一个步骤才行。准备利用dpdk前面的知识,来尝试开发一个小型的dns服务,暂时名为mdns-D。 这一篇就用来记录中途碰见的问题和怎么解决它们的。 port_init 前面仿照着example写下来,先默认4个lcore和2个nic可用。碰到第一个问题,rte_eth_dev_configure中...
之前曾经提到过这个问题,现在终于有了答案。那就是dpdk应用不需要ip。 问题一:为什么ifconfig看不到了 要理解这个问题,首先我们得知道,为什么ifconfig能够看到网卡信息?为了明白这个问题,我们需要先了解下,Linux中的一个结构struct net_device和struct net_device_ops。 在Linux的网络协议栈中,驱动需要注册上面的两个结构,通过这...
从dpdk的DMA模块看了下,下面这个函数调用返回可用dma数量,结果是0。怀疑是虚拟机没这个功能——DMA控制器芯片。所以这里先不写了,后面看能不能搞一个真机来看看。 uint16_t dma_count = rte_dma_count_avail();
KeepAlive检测常被用在检测无声退出的情况,一般都是主进程main保持一定频率的想worker发送消息并获取回复,如果达到设定阈值没有回复就通告上级并处理。 关键函数 前面都是些见过好多次的常规操作了,不再赘述。 rte_eth_tx_buffer_set_err_callback 原型如下。该函数用于为一个pkt缓冲区buffer注册一个callback,当尝试通过一个eth...
关键函数 rte_eth_allmulticast_enable 前面的流程和ip_fragmentation基本没差,这里也就不展开了,直到这个函数。 该函数用于启动某个port的多播功能。 init_mcast_hash 结构很简单,创建一个rte_fbk_hash_table然后向里面添加key即可。fbk(four byte keys) mcast_hash_params...
到现在为止,有一点不理解,那就是使用vfio-pci驱动的网卡,怎么ifconfig看不到。在stackoverflow看到了一个解答,不知道对不对,留待后续验证。 关键函数 init_mem 进行一些内存初始化,这里第一次出现了rte_lcore_to_socket_id,函数原型如下 unsigned int rte_lcore_to_socket_id(unsigned int...
L2fwd example 本来应该是IP Fragmentation Sample的,但是前面提到说IP Fragmentation是基于L2fwd的,所以先来看这个。由于DPDK修改了代码组织,现在l2fwd example全名是L2 Forwarding Sample Application (in Real and Virtualized Environments)。 关键函数 ...
flow_filtering example 重复函数不再赘述,只会涉及到新增的部分 关键函数 init_port 定义了需要的卸载功能,后续通过与网卡能提供的能力做&即可。 这里有个坑,默认的nr_queues为5,但是我本机的vm虚拟机网卡(e1000)提供的max_rx_queues为2,注意修改否则会初始化失败。真实的物理网卡为RTL8168H,搜了下没找到硬件手册...