[DPDK] dpdk测试收包

简介: [DPDK] dpdk测试收包

使用 dpdk-stable-19.08.2 ubuntu

配置环境

ifconfig eth0 down

./usertools/dpdk-setup.sh

切换sudo su

export RTE_SDK=/home/king/share/dpdk/dpdk-stable-19.08.2

export RTE_TARGET=x86_64-native-linux-gcc

recv.c

#include <rte_eal.h>
#include <rte_ethdev.h>
#include <rte_mbuf.h>
#include <stdio.h>
#include <arpa/inet.h>
#define NUM_MBUFS (4096-1)
#define BURST_SIZE  32
int gDpdkPortId = 0;
static const struct rte_eth_conf port_conf_default = {
  .rxmode = {.max_rx_pkt_len = RTE_ETHER_MAX_LEN }
};
static void ng_init_port(struct rte_mempool *mbuf_pool) {
  uint16_t nb_sys_ports= rte_eth_dev_count_avail(); //
  if (nb_sys_ports == 0) {
    rte_exit(EXIT_FAILURE, "No Supported eth found\n");
  }
  struct rte_eth_dev_info dev_info;
  rte_eth_dev_info_get(gDpdkPortId, &dev_info); //
  const int num_rx_queues = 1;
  const int num_tx_queues = 0;
  struct rte_eth_conf port_conf = port_conf_default;
  rte_eth_dev_configure(gDpdkPortId, num_rx_queues, num_tx_queues, &port_conf);
  if (rte_eth_rx_queue_setup(gDpdkPortId, 0 , 128, 
    rte_eth_dev_socket_id(gDpdkPortId),NULL, mbuf_pool) < 0) {
    rte_exit(EXIT_FAILURE, "Could not setup RX queue\n");
  }
  if (rte_eth_dev_start(gDpdkPortId) < 0 ) {
    rte_exit(EXIT_FAILURE, "Could not start\n");
  }
}
int main(int argc, char *argv[]) {
  if (rte_eal_init(argc, argv) < 0) {
    rte_exit(EXIT_FAILURE, "Error with EAL init\n");
  }
  struct rte_mempool *mbuf_pool = rte_pktmbuf_pool_create("mbuf pool", NUM_MBUFS,
    0, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());
  if (mbuf_pool == NULL) {
    rte_exit(EXIT_FAILURE, "Could not create mbuf pool\n");
  }
  ng_init_port(mbuf_pool);
  while (1) {
    struct rte_mbuf *mbufs[BURST_SIZE];
    unsigned num_recvd = rte_eth_rx_burst(gDpdkPortId, 0, mbufs, BURST_SIZE);
    if (num_recvd > BURST_SIZE) {
      rte_exit(EXIT_FAILURE, "Error receiving from eth\n");
    }
    unsigned i = 0;
    for (i = 0;i < num_recvd;i ++) {
      struct rte_ether_hdr *ehdr = rte_pktmbuf_mtod(mbufs[i], struct rte_ether_hdr*);
      if (ehdr->ether_type != rte_cpu_to_be_16(RTE_ETHER_TYPE_IPV4)) {
        continue;
      }
      struct rte_ipv4_hdr *iphdr =  rte_pktmbuf_mtod_offset(mbufs[i], struct rte_ipv4_hdr *, 
        sizeof(struct rte_ether_hdr));
      if (iphdr->next_proto_id == IPPROTO_UDP) {
        struct rte_udp_hdr *udphdr = (struct rte_udp_hdr *)(iphdr + 1);
        uint16_t length = ntohs(udphdr->dgram_len);
        *((char*)udphdr + length) = '\0';
        struct in_addr addr;
        addr.s_addr = iphdr->src_addr;
        printf("src: %s:%d, ", inet_ntoa(addr), udphdr->src_port);
        addr.s_addr = iphdr->dst_addr;
        printf("dst: %s:%d, %s\n", inet_ntoa(addr), udphdr->src_port, 
          (char *)(udphdr+1));
        rte_pktmbuf_free(mbufs[i]);
      }
    }
  }
}


相关文章
|
1月前
|
自然语言处理 机器人 Python
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
ChatPaper是一个基于文本生成技术的智能研究论文工具,能够根据用户输入进行智能回复和互动。它支持快速下载、阅读论文,并通过分析论文的关键信息帮助用户判断是否需要深入了解。用户可以通过命令行或网页界面操作,进行论文搜索、下载、总结等。
49 1
ChatGPT使用学习:ChatPaper安装到测试详细教程(一文包会)
|
3月前
|
测试技术 开发工具 Python
在Jetson Nano上编译 pyrealsense2库包,并在Intel的tof相机上进行测试
在Jetson Nano上编译 pyrealsense2库包,并在Intel的tof相机上进行测试
146 0
|
4月前
|
测试技术 数据安全/隐私保护 索引
基于SpringBoot+Vue大学生体质测试管理系统【源码+论文+演示视频+包运行成功】(2)
基于SpringBoot+Vue大学生体质测试管理系统【源码+论文+演示视频+包运行成功】
38 0
|
4月前
|
Java 关系型数据库 MySQL
基于SpringBoot+Vue大学生体质测试管理系统【源码+论文+演示视频+包运行成功】(1)
基于SpringBoot+Vue大学生体质测试管理系统【源码+论文+演示视频+包运行成功】
71 0
|
6月前
|
Android开发 数据安全/隐私保护 iOS开发
ios和安卓测试包发布网站http://fir.im的注册与常用功能
ios和安卓测试包发布网站http://fir.im的注册与常用功能
276 0
ios和安卓测试包发布网站http://fir.im的注册与常用功能
|
5月前
|
存储 网络安全 Android开发
接口测试:抓包工具证书配置
Charles 抓包工具配置指南:包括Charles的基础设置,证书安装(Mac和Windows),SSL代理设置,移动端(同一WIFI环境,启用透明HTTP代理)和模拟器的代理配置,以及iOS系统的代理与证书安装步骤。注意Android 6+及iPhone 10+的特殊信任设置。配置完成后,通过Charles进行网络请求监控。
|
6月前
|
安全 测试技术 Go
Golang深入浅出之-Go语言单元测试与基准测试:testing包详解
【4月更文挑战第27天】Go语言的`testing`包是单元测试和基准测试的核心,简化了测试流程并鼓励编写高质量测试代码。本文介绍了测试文件命名规范、常用断言方法,以及如何进行基准测试。同时,讨论了测试中常见的问题,如状态干扰、并发同步、依赖外部服务和测试覆盖率低,并提出了相应的避免策略,包括使用`t.Cleanup`、`t.Parallel()`、模拟对象和检查覆盖率。良好的测试实践能提升代码质量和项目稳定性。
104 1
|
6月前
|
分布式计算 Java 测试技术
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
110 0
|
6月前
|
网络协议 测试技术 网络性能优化
Android系统 以太网吞吐量和丢包测试
Android系统 以太网吞吐量和丢包测试
247 1
|
6月前
|
测试技术 编译器 持续交付
【Conan 入门教程 】深入理解Conan中的测试包:test_package目录的精髓
【Conan 入门教程 】深入理解Conan中的测试包:test_package目录的精髓
269 0