首页 > 其他分享 >dpdk ppp丢包排查

dpdk ppp丢包排查

时间:2024-11-21 18:14:21浏览次数:3  
标签:rte 丢包 查表 丢弃 flow PPP ppp 数据包 dpdk

在 openEuler 系统运行 DPDK 时,若 PPE(Packet Processing Engine) 中的 PPP(Packet Processing Pipeline) 处理逻辑为“查表后丢弃所有包”,可能是由于以下几种情况导致的。下面分析可能的原因及对应的解决方案:

 

1. 流表查找未命中(表项缺失或匹配失败)

现象:

PPP 根据预定义规则(如流表、ACL 规则)处理数据包。如果流表中没有匹配的条目,默认行为可能是丢弃包。

原因:

流表没有正确加载条目。

数据包的关键字段未正确解析,导致查表失败。

查表规则未覆盖当前数据包的特性(如源/目的 IP、端口号等不在规则范围内)。

解决方法:

检查流表是否已加载正确的规则。

bash

复制代码

# DPDK 应用运行时检查流表状态

show_flow_table

验证流表条目的覆盖范围是否包含待处理的数据包。

若需支持默认转发行为,设置“默认动作”为转发,而不是丢弃。

2. 流表条目配置错误

现象:

流表中的规则指示 PPP 对包执行“丢弃”操作。

原因:

流表条目的动作配置为 DROP 或等效的丢弃指令。

配置工具或应用程序加载规则时未正确设置动作。

解决方法:

检查流表配置文件,确认条目的动作是否正确。

bash

复制代码

# 示例规则配置

flow create 0 ingress pattern eth / ipv4 / udp / end actions drop / end

修改动作为转发到目标端口(如转发到端口 1):

bash

复制代码

flow create 0 ingress pattern eth / ipv4 / udp / end actions queue index 0 / end

3. PPP 的处理逻辑有误

现象:

数据包进入 PPP 后,即使查表成功,也被错误地标记为“丢弃”。

原因:

DPDK 应用程序在 PPP 处理逻辑中设置了错误的返回值或动作。

包处理逻辑中丢弃所有包可能是测试配置的残留。

解决方法:

检查 PPP 的代码逻辑,确认处理后动作:

确认是否显式设置了丢弃标记。

c

复制代码

if (lookup_failed) {

    rte_pktmbuf_free(pkt);  // 丢弃包

    continue;

}

若需转发数据包,确保正确调用发送接口:

c

复制代码

rte_eth_tx_burst(port_id, queue_id, &pkt, 1);

确保动作类型逻辑正确:

对特定条件下的包设置 DROP 或 FORWARD。

调试时记录日志以验证动作选择。

4. 系统或硬件资源不足

现象:

PPP 查表后丢弃包,但并非因规则问题,而是系统资源不足导致。

原因:

缓冲区溢出:接收队列满或内存池耗尽。

DPDK 应用程序未正确处理数据包溢出。

解决方法:

增大内存池和队列大小:

c

复制代码

struct rte_mempool *mbuf_pool = rte_pktmbuf_pool_create("MBUF_POOL",

    NUM_MBUFS * nb_ports, MBUF_CACHE_SIZE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, rte_socket_id());

检查是否有包因未及时发送被丢弃。

5. 默认丢弃行为未修改

现象:

查表后所有包未匹配规则,PPP 执行默认的丢弃动作。

解决方法:

修改默认行为为转发到指定端口:

c

复制代码

struct rte_flow_action_jump jump_to_port = {

    .group = NEXT_TABLE_ID,  // 跳转到下一流表或端口

};

调试思路

验证数据包是否进入 PPP:

使用调试工具(如 dpdk-pdump)捕获 PPP 处理前后的数据包,确认是否被错误丢弃。

确认查表逻辑:

打印 PPP 查表结果,确保流表命中行为符合预期。

排查资源分配问题:

检查队列状态、内存池利用率等,排除因资源不足导致的包丢弃。

示例代码片段

以下为 PPP 查表及动作设置的示例:

 

c

复制代码

// 查表

struct rte_flow *flow = rte_flow_create(port_id, &attr, pattern, actions, &error);

if (flow == NULL) {

    printf("Flow create error: %s\n", error.message);

    return -1;

}

 

// 包处理逻辑

struct rte_mbuf *pkts[BURST_SIZE];

uint16_t nb_rx = rte_eth_rx_burst(port_id, queue_id, pkts, BURST_SIZE);

for (int i = 0; i < nb_rx; i++) {

    struct rte_mbuf *pkt = pkts[i];

    if (lookup_flow(pkt) == ACTION_DROP) {

        rte_pktmbuf_free(pkt);  // 丢弃包

    } else {

        rte_eth_tx_burst(out_port, out_queue, &pkt, 1);  // 转发包

    }

}

通过上述排查步骤,可以逐步定位 PPP 丢弃包的问题,并在 openEuler 系统中调试解决。

标签:rte,丢包,查表,丢弃,flow,PPP,ppp,数据包,dpdk
From: https://blog.csdn.net/scm06111/article/details/143952019

相关文章

  • 3.2点对点ppp
    001ppp协议特点ppp协议能承载不同网络层分组,ip数据报里有其他网络层协议存在。能在多种类型的链路上运行和广播方式相比,需要一个网络地址的协商,传送前有个协商过程,确认资源。地址 002ppp协议组成将ip数据报封装到串行链路的方法链路控制协议LCP--建立链路,身份验证网络控......
  • 动态IP( DHCP ), 静态 IP , 拨号( PPPOE) 上网方式详解
    一 ,DHCP——动态IP(1)动态IP上网,又叫DHCP上网,自动获取IP上网;(2)动态IP这种上网方式,在未使用路由器的情况下,只需要把这根宽带网线连接到电脑上,电脑的IP地址设置为自动获得,电脑就可以实现上网了;       自动获取IP地址       自动获取DNS......
  • 在Windows中,使用批处理(.bat)文件可以通过调用命令来实现自动拨号连接。以下是通过批处
    在Windows中,使用批处理(.bat)文件可以通过调用命令来实现自动拨号连接。以下是通过批处理文件实现PPPoE(拨号)连接的基本步骤:步骤1:配置拨号连接(PPPoE)在Windows中,你首先需要设置一个PPPoE拨号连接。以下是设置步骤:打开网络连接设置:点击开始菜单,输入“网络和共享中心”并打开......
  • 故障排除-丢包严重的抓包解决
    简介:群里一个群友,新装环保局车牌检车功能,要求国五以上的车才能进厂区。就装了一个摄像头,一个多功能显示屏一体机。基本结构就是摄像头识别车牌传给显示屏,显示屏上一个什么设备联网查询车管所还是哪里的数据库,给出排放是否符合标准。但是接入群友企业网络后,该显示屏丢包,大概20多......
  • 面试:TCP、UDP如何解决丢包问题
    文章目录一、TCP丢包原因、解决办法1.1TCP为什么会丢包1.2TCP传输协议如何解决丢包问题1.3其他丢包情况(拓展)1.4补充1.4.1TCP端口号1.4.2多个TCP请求的逻辑1.4.3处理大量TCP连接请求的方法1.4.4总结二、UDP丢包2.1UDP协议2.1.1UDP简介2.1.2......
  • 常用的DPDK命令和工具
    dpdk-devbind.py:用于绑定和解绑网络设备与DPDK驱动程序。示例:./dpdk-devbind.py--bind=igb_uio<NIC> 绑定网络接口卡(NIC)。dpdk-pktgen:一个高性能的网络流量生成器。示例:./pktgen-c0x1-n4----portmask=0x1 生成流量。dpdk-testpmd:测试和调试DPDK的网络性能......
  • dpdk环境搭建
    系统配置ubuntu22.04dpdk21.11修改grub配置sudovim/etc/default/grub这里是进行配置大页内存,在修改之前需要查看自己机器的配置,根据自己的机器配置进行修改等等GRUB_CMDLINE_LINUX="intel_iommu=oniommu=ptvfio_pci.enable_sriov=1vfio_pci.disable_idle_d3=1us......
  • CSPPPPP
    (?表示存疑,单独一个括号表示谔谔剩余3日感觉受周期影响有点大,所以直接当CSP不存在,把CSP当模拟赛打就可以打好(?不过nfls考前放三个大DS是什么意思啊,写完前两个就3h了,不过排名还不错(?下午把后两个改了,T3感觉找下规律列个GF就做完了,有时间的话肯定能切(?然后T4是巨型......
  • 计算机网络:数据链路层 —— PPP 点对点协议
    文章目录PPP帧PPP帧的格式PPP帧的透明传输面向字节的异步链路面向比特的同步链路PPP帧的差错检测PPP的工作状态点对点协议(Point-to-PointProtocol,PPP)是目前使用最广泛的点对点数据链路层协议,用于在两个节点之间进行数据传输。它通常用于建立在串行线路上的点对......
  • 点对点协议PPP
    PPP协议的特点接入到互联网,PPP协议就是用户计算机和ISP进行通信时,所使用的数据链路层协议,它应满足如下需求:简单封装成帧透明性多种网络层协议多种类型链路差错检测检测连接状态最大转送单元网络层地址协商数据压缩协商具体内容见谢书P79PPP......