封装dpdk接口成静(动)态库(同源同宿、多通道队列收包),然后在C++应用中使用方法

dpdk的接口全部都是C语言实现的,它的makefile模版也很简单,只需改变其宏就可以在生成可执行文件、静态库、动态库之间切换。本篇博文主要给出如果使用dpdk封装成静态库后,在C++应用程序中编译使用的方法。

一、封装dpdk抓包接口

源代码实现的功能:

1、可通过配置文件进行配置多个队列收取数据包,并且保证数据包的同源同宿(或者负载均衡,二者取其一,具体方法须修改网卡驱动程序);

2、实时显示收到总包数、Gbps、pps。

jz_dpdk_api.h

/********************************************************************
	Copyright (C), 2001-2017, XXX Co., Ltd.
	File Name	:	jz_dpdk_api.h
	Version		: 	Initial Draft
	Author		:	
	Created		:	2017.06.19
	Last Modified:	2017.06.19
	Description	:	Api of capture packets by dpdk,with max speed 10Gbps.
*********************************************************************/

#ifndef JZ_DPDK_H
#define JZ_DPDK_H

#include <stdio.h>
#include <stdint.h>

#include <rte_eal.h>
#include <rte_ethdev.h>

#ifdef __cplusplus  
extern "C" {  
#endif 

/*
*   rx_number:从配置文件中读取的线程数,用于调用者绑定cpu以及开启多线程
*/
extern int rx_number;

/*
*   描述: 初始化函数,对端口、队列、大页内存等配置。
*   参数: 无。
*   返回值: 初始化成功返回0,失败返回-1。
*/
int  jz_dpdk_init(int argc,char **argv);

/*
*   描述: 接收包。
*   参数: uint8_t : 端口号
          uint16_t: 队列号
          struct rte_mbuf * :存储接收到包的数组指针,一次性返回多个数据包。
*         uint16_t : 一次接收包的个数,需要根据包长以及配置的单个页大小来设定。
*                     如:页大小为2M,设定接收包大概是1500字节,那么设置32.
*   返回值:返回收到包的个数,如果为-1,则说明收包失败。
*/
int jz_dpdk_recv_pkts(uint8_t port_id,uint16_t queue_id,struct rte_mbuf *pkts[],const uint16_t nb_pkts);

/*
*   描述: 释放dpdk收包内存,注意:此接口必须在收包成功后调用。
*   参数:struct rte_mbuf * :存储接收到包的数组指针。
*         uint16_t :收到包的个数,与接口 jz_dpdk_recv_pkt 配合使用。
*   返回值: 无。
*/
void jz_dpdk_free(struct rte_mbuf *pkts[], uint16_t nb_pkts);

/*
*   描述: 返回当前收包状态,如pps,总包数。
*   参数: 无。
*   返回值: 无。
*/
void jz_dpdk_current_stat(void);
#ifdef __cplusplus  
};  
#endif 


#endif

jz_dpdk_api.c

#include "jz_dpdk_api.h"
#include "ini/iniparser.h"

/**************************宏********************************/
#define NUM_MBUFS_ 8191
#define MBUF_CACHE_SIZE_ 512
#define RX_RING_SIZE_ 128
#defi
  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值