X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_pmd_pcap%2Frte_eth_pcap.c;h=6a411a93401d988a72b3628c767e31c7e4e5b9f1;hb=88523f27e8448fc45c531e58a53af49cce39e891;hp=03e6e6cf3213b16b719678a4aa279b7a39df67e7;hpb=a02aa29dec026741a6a2d500823a3bfdf344c3fe;p=dpdk.git diff --git a/lib/librte_pmd_pcap/rte_eth_pcap.c b/lib/librte_pmd_pcap/rte_eth_pcap.c index 03e6e6cf32..6a411a9340 100644 --- a/lib/librte_pmd_pcap/rte_eth_pcap.c +++ b/lib/librte_pmd_pcap/rte_eth_pcap.c @@ -40,10 +40,11 @@ #include #include #include +#include #include -#include "rte_eth_pcap.h" +#include #define RTE_ETH_PCAP_SNAPSHOT_LEN 65535 #define RTE_ETH_PCAP_SNAPLEN 4096 @@ -217,7 +218,6 @@ eth_pcap_tx_dumper(void *queue, return num_tx; } -#ifdef PCAP_CAN_SEND /* * Callback to handle sending packets through a real NIC. */ @@ -239,8 +239,9 @@ eth_pcap_tx(void *queue, mbuf = bufs[i]; ret = pcap_sendpacket(tx_queue->pcap, (u_char*) mbuf->pkt.data, mbuf->pkt.data_len); - if(likely(!ret)) - num_tx++; + if (unlikely(ret != 0)) + break; + num_tx++; rte_pktmbuf_free(mbuf); } @@ -248,17 +249,6 @@ eth_pcap_tx(void *queue, tx_queue->err_pkts += nb_pkts - num_tx; return num_tx; } -#else -static uint16_t -eth_pcap_tx(__rte_unused void *queue, - __rte_unused struct rte_mbuf **bufs, - __rte_unused uint16_t nb_pkts) -{ - RTE_LOG(ERR, PMD, "pcap library cannot send packets, please rebuild " - "with a more up to date libpcap\n"); - return -1; -} -#endif static int eth_dev_start(struct rte_eth_dev *dev) @@ -549,15 +539,15 @@ rte_pmd_init_internals(const unsigned nb_rx_queues, const unsigned numa_node, struct pmd_internals **internals, struct rte_eth_dev **eth_dev, - struct args_dict *dict) + struct rte_kvargs *kvlist) { struct rte_eth_dev_data *data = NULL; struct rte_pci_device *pci_dev = NULL; unsigned k_idx; - struct key_value *pair = NULL; + struct rte_kvargs_pair *pair = NULL; - for (k_idx = 0; k_idx < dict->index; k_idx++) { - pair = &dict->pairs[k_idx]; + for (k_idx = 0; k_idx < kvlist->count; k_idx++) { + pair = &kvlist->pairs[k_idx]; if (strstr(pair->key, ETH_PCAP_IFACE_ARG) != NULL) break; } @@ -626,13 +616,13 @@ rte_pmd_init_internals(const unsigned nb_rx_queues, return -1; } -int +static int rte_eth_from_pcaps_n_dumpers(pcap_t * const rx_queues[], const unsigned nb_rx_queues, pcap_dumper_t * const tx_queues[], const unsigned nb_tx_queues, const unsigned numa_node, - struct args_dict *dict) + struct rte_kvargs *kvlist) { struct pmd_internals *internals = NULL; struct rte_eth_dev *eth_dev = NULL; @@ -645,7 +635,7 @@ rte_eth_from_pcaps_n_dumpers(pcap_t * const rx_queues[], return -1; if (rte_pmd_init_internals(nb_rx_queues, nb_tx_queues, numa_node, - &internals, ð_dev, dict) < 0) + &internals, ð_dev, kvlist) < 0) return -1; for (i = 0; i < nb_rx_queues; i++) { @@ -661,13 +651,13 @@ rte_eth_from_pcaps_n_dumpers(pcap_t * const rx_queues[], return 0; } -int +static int rte_eth_from_pcaps(pcap_t * const rx_queues[], const unsigned nb_rx_queues, pcap_t * const tx_queues[], const unsigned nb_tx_queues, const unsigned numa_node, - struct args_dict *dict) + struct rte_kvargs *kvlist) { struct pmd_internals *internals = NULL; struct rte_eth_dev *eth_dev = NULL; @@ -680,7 +670,7 @@ rte_eth_from_pcaps(pcap_t * const rx_queues[], return -1; if (rte_pmd_init_internals(nb_rx_queues, nb_tx_queues, numa_node, - &internals, ð_dev, dict) < 0) + &internals, ð_dev, kvlist) < 0) return -1; for (i = 0; i < nb_rx_queues; i++) { @@ -697,8 +687,8 @@ rte_eth_from_pcaps(pcap_t * const rx_queues[], } -int -rte_pmd_pcap_init(const char *name, const char *params) +static int +rte_pmd_pcap_devinit(const char *name, const char *params) { unsigned numa_node, using_dumpers = 0; int ret; @@ -729,7 +719,8 @@ rte_pmd_pcap_init(const char *name, const char *params) if (ret < 0) return -1; - return rte_eth_from_pcaps(pcaps.pcaps, 1, pcaps.pcaps, 1, numa_node, &dict); + return rte_eth_from_pcaps(pcaps.pcaps, 1, pcaps.pcaps, 1, + numa_node, kvlist); } /* @@ -770,10 +761,17 @@ rte_pmd_pcap_init(const char *name, const char *params) if (using_dumpers) return rte_eth_from_pcaps_n_dumpers(pcaps.pcaps, pcaps.num_of_rx, - dumpers.dumpers, dumpers.num_of_tx, numa_node, &dict); + dumpers.dumpers, dumpers.num_of_tx, numa_node, kvlist); return rte_eth_from_pcaps(pcaps.pcaps, pcaps.num_of_rx, dumpers.pcaps, - dumpers.num_of_tx, numa_node, &dict); + dumpers.num_of_tx, numa_node, kvlist); } +static struct rte_driver pmd_pcap_drv = { + .name = "eth_pcap", + .type = PMD_VDEV, + .init = rte_pmd_pcap_devinit, +}; + +PMD_REGISTER_DRIVER(pmd_pcap_drv);