diff options
author | jingleyang <yjyfrombnu@gmail.com> | 2018-12-23 22:49:21 +0800 |
---|---|---|
committer | jingleyang <yjyfrombnu@gmail.com> | 2018-12-23 22:49:21 +0800 |
commit | 1cbf7e4b48533e42941176454afbf908431972a9 (patch) | |
tree | 08f54daee146da6c18b2896bc96393a2f51d8a61 /pcap-dpdk.c | |
parent | cf48b4ddc9662c04dae6cc1a73be0bee1f5628a2 (diff) |
synchronous call dpdk_dispatch_internal
Diffstat (limited to 'pcap-dpdk.c')
-rw-r--r-- | pcap-dpdk.c | 39 |
1 files changed, 11 insertions, 28 deletions
diff --git a/pcap-dpdk.c b/pcap-dpdk.c index d53928f1..91278acc 100644 --- a/pcap-dpdk.c +++ b/pcap-dpdk.c @@ -168,7 +168,6 @@ struct pcap_dpdk{ struct dpdk_ts_helper ts_helper; char pci_addr[DPDK_PCI_ADDR_SIZE]; unsigned char pcap_tmp_buf[RTE_ETH_PCAP_SNAPLEN]; - volatile sig_atomic_t break_loop; }; static struct rte_eth_conf port_conf = { @@ -211,13 +210,7 @@ static uint32_t dpdk_gather_data(unsigned char *data, int len, struct rte_mbuf * return total_len; } -static void pcap_dpdk_breakloop(pcap_t *p) -{ - pcap_breakloop_common(p); - struct pcap_dpdk *pd = (struct pcap_dpdk*)(p->priv); - pd->break_loop = p->break_loop; -} -static void dpdk_dispatch_inter(void *dpdk_user) +static void dpdk_dispatch_internal(void *dpdk_user) { if (dpdk_user == NULL){ return; @@ -255,7 +248,7 @@ static void dpdk_dispatch_inter(void *dpdk_user) return; } while( max_cnt==-1 || pkt_cnt < max_cnt){ - if (pd->break_loop){ + if (p->break_loop){ break; } nb_rx = (int)rte_eth_rx_burst(portid, 0, pkts_burst, MAX_PKT_BURST); @@ -316,11 +309,7 @@ static void dpdk_dispatch_inter(void *dpdk_user) } pd->rx_pkts = pkt_cnt; } -static int launch_one_lcore(void *dpdk_user) -{ - dpdk_dispatch_inter(dpdk_user); - return 0; -} + static int pcap_dpdk_dispatch(pcap_t *p, int max_cnt, pcap_handler cb, u_char *pcap_user) { unsigned lcore_id = 0; @@ -331,13 +320,7 @@ static int pcap_dpdk_dispatch(pcap_t *p, int max_cnt, pcap_handler cb, u_char *p pd->max_cnt = max_cnt; pd->orig = p; void *dpdk_user = p; - // launch_one_lcore func will be called on every lcore include master core. - rte_eal_mp_remote_launch(launch_one_lcore, dpdk_user, CALL_MASTER); - RTE_LCORE_FOREACH_SLAVE(lcore_id) { - if (rte_eal_wait_lcore(lcore_id) < 0) { - break; - } - } + dpdk_dispatch_internal(dpdk_user); return pd->rx_pkts; } @@ -382,12 +365,12 @@ static int pcap_dpdk_stats(pcap_t *p, struct pcap_stat *ps) struct pcap_dpdk *pd = p->priv; calculate_timestamp(&(pd->ts_helper), &(pd->curr_ts)); rte_eth_stats_get(pd->portid,&(pd->curr_stats)); - - ps->ps_recv = pd->curr_stats.ipackets; - ps->ps_drop = pd->curr_stats.ierrors; - ps->ps_drop += pd->bpf_drop; - ps->ps_ifdrop = pd->curr_stats.imissed; - + if (ps){ + ps->ps_recv = pd->curr_stats.ipackets; + ps->ps_drop = pd->curr_stats.ierrors; + ps->ps_drop += pd->bpf_drop; + ps->ps_ifdrop = pd->curr_stats.imissed; + } uint64_t delta_pkt = pd->curr_stats.ipackets - pd->prev_stats.ipackets; struct timeval delta_tm; timersub(&(pd->curr_ts),&(pd->prev_ts), &delta_tm); @@ -726,7 +709,7 @@ static int pcap_dpdk_activate(pcap_t *p) p->setnonblock_op = pcap_dpdk_setnonblock; p->stats_op = pcap_dpdk_stats; p->cleanup_op = pcap_dpdk_close; - p->breakloop_op = pcap_dpdk_breakloop; + p->breakloop_op = pcap_breakloop_common; ret = 0; // OK }while(0); |