如何解决关于dpdk中的L3Header访问
如何访问指向第 3 层报头开头的指针。 我试图访问指向 L3 的指针,如下面的代码段所示。
enter code here
for (i = 0; i < nb_rx; i++) {
m = bufs[i];
pkt_len=rte_pktmbuf_pkt_len(bufs[i]);
if (RTE_ETH_IS_IPV4_HDR(m->packet_type))
{
struct rte_ipv4_hdr *ip_hdr;
ip_hdr = rte_pktmbuf_mtod(m,struct rte_ipv4_hdr *);
if(Func1(P1,(unsigned char*)ip_hdr,pkt_len-sizeof(struct ethhdr),T1)){
//DO Something
}
}
但 Func1 返回 false 以前使用原始套接字实现的相同代码可以正常工作。
unsigned char *buffer
if Fun1(P1,(buffer+sizeof(struct ethhdr)),pkt_size-sizeof(struct ethhdr),T1){
}
解决方法
@ima,访问 L2|L3|L4 很容易在 DPDK 示例中介绍。对于您的特定需求 DPDK 示例,lib
可以轻松涵盖该场景。因此,我谦虚的建议是先参考这样的应用程序。
您查询的答案是您尝试访问 L3 标头的方式不正确。要正确访问 L3 标头,您需要从
l3fwd
改为
if (RTE_ETH_IS_IPV4_HDR(m->packet_type))
{
struct rte_ipv4_hdr *ip_hdr;
ip_hdr = rte_pktmbuf_mtod(m,struct rte_ipv4_hdr *);
注意:这是假设以太网类型是 IPV4 并且前面没有 VLAN 或 MPLS。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。