当前位置: 首页 > news >正文

南京做网站询南京乐识淘宝特价版

南京做网站询南京乐识,淘宝特价版,网站前端需要会什么,网站开发教程 视频前面我们已经了解了如何使用DPDK创建线程并绑定核心#xff0c;以及如何申请内存池并创建 RX/TX 队列。 接下来我们将了解DPDK的核心内容之一#xff1a;以轮询的方式从网卡中收取报文。 下面直接给出一个实例#xff0c;此实例使用核心1及核心2创建了两个线程用于报文处理以及如何申请内存池并创建 RX/TX 队列。 接下来我们将了解DPDK的核心内容之一以轮询的方式从网卡中收取报文。 下面直接给出一个实例此实例使用核心1及核心2创建了两个线程用于报文处理其中在核心1上运行的线程接收网卡0的消息而在核心2上运行的线程接收网卡1的消息。在这里从网卡上获取报文的方式为轮询具体的接口为 rte_eth_rx_burst而所谓的报文处理就是简单地打印报文消息。 #include arpa/inet.h#include rte_eal.h #include rte_mbuf.h #include rte_ethdev.h#includerte_errno.h#define NB_SOCKETS 10 #define MEMPOOL_CACHE_SIZE 250static unsigned nb_mbuf 512; static int numa_on 0; static struct rte_mempool * pktmbuf_pool[NB_SOCKETS];static int init_mem(unsigned nb_mbuf){unsigned lcore_id;int socketid;char mbuf_pool_name[64];for(lcore_id 0; lcore_id RTE_MAX_LCORE; lcore_id){if (rte_lcore_is_enabled(lcore_id) 0){continue;}if(numa_on){socketid rte_lcore_to_socket_id(lcore_id);}else{socketid 0;}if(socketid NB_SOCKETS){rte_exit(EXIT_FAILURE, Socket %d of lcore %u is out of range %d\n,socketid, lcore_id, NB_SOCKETS);}if(pktmbuf_pool[socketid] NULL){snprintf(mbuf_pool_name, sizeof(mbuf_pool_name), mbuf_pool_%d, socketid);pktmbuf_pool[socketid] rte_pktmbuf_pool_create(mbuf_pool_name, nb_mbuf,MEMPOOL_CACHE_SIZE, 0, RTE_MBUF_DEFAULT_BUF_SIZE, socketid);if(pktmbuf_pool[socketid] NULL){rte_exit(EXIT_FAILURE, Cannot init mbuf pool on socket %d\n, socketid);}else{printf(Allocated mbuf pool on socket %d\n, socketid);}}}return 0; }#define MAX_RX_QUEUE_PER_PORT 1 #define MAX_TX_QUEUE_PER_PORT 1 #define RX_RING_SIZE 128 #define TX_RING_SIZE 512 #define BURST_SIZE 128static const struct rte_eth_conf dev_conf_default {.rxmode {.max_rx_pkt_len ETHER_MAX_LEN} };static void init_port(void) {int nb_port 0;int portid 0;int ret 0;nb_port rte_eth_dev_count_avail();if(!nb_port){rte_exit(EXIT_FAILURE, No support eth found\n);}printf(nb_port %d\n, nb_port);for(portid0;portid nb_port;portid){ret rte_eth_dev_configure(portid, MAX_RX_QUEUE_PER_PORT, MAX_TX_QUEUE_PER_PORT, dev_conf_default);if (ret 0) {rte_exit(EXIT_FAILURE, Cannot configure device: err%d, port%u\n, ret, portid);}ret rte_eth_rx_queue_setup(portid, 0, RX_RING_SIZE, rte_eth_dev_socket_id(portid), NULL, pktmbuf_pool[0]);if (ret 0) {rte_exit(EXIT_FAILURE, rte_eth_rx_queue_setup:err%d, port%u\n, ret, portid);}ret rte_eth_tx_queue_setup(portid, 0, TX_RING_SIZE, rte_eth_dev_socket_id(portid), NULL);if (ret 0) {rte_exit(EXIT_FAILURE, rte_eth_tx_queue_setup:err%d, port%u\n, ret, portid);}ret rte_eth_dev_start(portid);if (ret 0) {rte_exit(EXIT_FAILURE, rte_eth_dev_start:err%d, port%u\n, ret, portid);}rte_eth_promiscuous_enable(portid);} }static void pkt_process(struct rte_mbuf *mbuf){struct ether_hdr *eth rte_pktmbuf_mtod(mbuf, struct ether_hdr *);if(eth-ether_type rte_cpu_to_be_16(ETHER_TYPE_IPv4)){struct ipv4_hdr *iphdr rte_pktmbuf_mtod_offset(mbuf, struct ipv4_hdr *,sizeof(struct ether_hdr));//udpif(iphdr-next_proto_id IPPROTO_UDP){struct udp_hdr *udphdr (struct 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),ntohs(udphdr-src_port));addr.s_addr iphdr-dst_addr;printf(dst:%s:%d, %s\n,inet_ntoa(addr),ntohs(udphdr-dst_port),(char*)(udphdr 1));}}rte_pktmbuf_free(mbuf); }static int main_loop(__attribute__((unused)) void *dummy) {struct rte_mbuf *mbufs[BURST_SIZE];int num_recvd 0;unsigned target_lcore_id_1 1;unsigned target_lcore_id_2 2;int portid 0;unsigned lcore_id rte_lcore_id();int i;if(lcore_id ! target_lcore_id_1 lcore_id ! target_lcore_id_2){return 0;}//核1接收port0的消息//核2接收port1的消息if(lcore_id target_lcore_id_1){portid 0;}else if(lcore_id target_lcore_id_2){portid 1;}else{return 0;}while(1){num_recvd rte_eth_rx_burst(portid, 0, mbufs, BURST_SIZE);if(num_recvd BURST_SIZE){rte_exit(EXIT_FAILURE, rte_eth_rx_burst failed\n);}for(i 0; i num_recvd; i){pkt_process(mbufs[i]);}}return 0; }int main(int argc, char *argv[]) {unsigned lcore_id;// init ealif(rte_eal_init(argc, argv) 0){rte_exit(EXIT_FAILURE, Error with eal init\n);}// alloc memoryinit_mem(nb_mbuf);// create tx queue and rx queueinit_port();// main_looprte_eal_mp_remote_launch(main_loop, NULL, CALL_MASTER);RTE_LCORE_FOREACH_SLAVE(lcore_id) {if (rte_eal_wait_lcore(lcore_id) 0){return -1;}}// freefor(int i 0; i NB_SOCKETS; i){rte_mempool_free(pktmbuf_pool[i]);}return 0; }
http://www.hkea.cn/news/14312747/

相关文章:

  • 高度重视机关门户网站建设建筑模板的规格及价格
  • 学做网站教程网站建设需要云主机吗
  • 网站建设与运营策划书网站开发技术考试题目
  • 什么好的网站学做食品免费友链平台
  • 祁阳网站建设装修设计合同范本
  • 东莞做网站最好有哪些公司成都机房托管
  • 做的比较漂亮的网站wordpress网站背景设置方法
  • 图书馆网站建设需求分许服务器注册
  • 整站seo运营泰安红河网站建设
  • 好听好记的网站域名变量命名网站
  • 多平台网站建设培训网网站源码
  • 做旅游的网站单页面网站模板
  • 如何查询网站临淄信息港发布信息
  • 织梦 网站标题中国化工建设网站
  • 网站建设公司面临的问题七牛云wordpress加速
  • 无锡网站建设推广公司外贸平台运营
  • 潍坊知名网站建设哪家好展示型装饰网站模板下载
  • 12306 网站开发qq的seo综合查询
  • 网站建设 收费小程序登录入口网页版
  • 企业网站建设方案如何写oa办公系统有哪些
  • 好看的网站源码免费网站建设制作哪家公司好
  • wordpress媒体库整理网站优化 西安
  • 海口网站建设方面网站设计制作公司
  • 我想在泉州做网站只知道网站后台怎么做301
  • 物流网站建设模板下载优秀ppt模板免费下载
  • 住房和建设建设局网站做微信问卷调查的网站
  • 漳州城乡建设局网站首页wordpress 广告文件夹
  • php 网站调试如何下载网站模板文件在哪里
  • 永久的免费网站地址网站维护学习
  • 关于做网站的笑话行情宝app下载