dpdk-udp socket的实现(三线程+两组ring)

目标

之前虽然能够解析udp报文,但无法承载上面的应用程序。换句话说,我们希望udp_server程序使用我们提供的API,API的函数内部是对于报文的解析。

解释server:UDP 不同于 TCP,不存在请求连接和受理过程,因此在某种意义上无法明确区分服务器端和客户端,只是因为其提供服务而称为服务器端。1

详细的,请看如下的一个使用内核api的udp程序 unix_udp.c:

继续阅读“dpdk-udp socket的实现(三线程+两组ring)”

dpdk-发送udp包的实现

发送过程的实现

  1. 加宏定义ENABLE_SEND,之后在recv.c基础上改的内容都框在 #if ENABLE_SEND#endif间。
  2. 定义6个全局变量,分别是:源mac,目的mac,源ip,目的ip,源port,目的port。并且在拆包时给它们依次赋值。
  • 从外到里:
  • 源mac是虚拟机网卡eth0的mac地址(rte_eth_macaddr_get(gDpdkPortId, (struct rte_ether_addr *)gSrcMac);)从绑定pci地址(dpdk-setup.sh的【49】那一步来的)
  • 目的mac是windows的网卡mac地址,从刚刚收到的包的eth中拆出来(rte_memcpy(gDstMac, ehdr->s_addr.addr_bytes, RTE_ETHER_ADDR_LEN);
  • 后四个值是iphdr和udphdr源和目的互换而来 (hdr是header的意思)

继续阅读“dpdk-发送udp包的实现”