+ int ret=0;
+ int nb_ports = 0;
+ char dpdk_name[DPDK_DEV_NAME_MAX];
+ char dpdk_desc[DPDK_DEV_DESC_MAX];
+ struct ether_addr eth_addr;
+ char mac_addr[DPDK_MAC_ADDR_SIZE];
+ char pci_addr[DPDK_PCI_ADDR_SIZE];
+ do{
+ ret = dpdk_pre_init();
+ if (ret < 0)
+ {
+ pcap_fmt_errmsg_for_errno(ebuf, PCAP_ERRBUF_SIZE,
+ errno, "error: Init failed with device");
+ ret = PCAP_ERROR;
+ break;
+ }
+ nb_ports = rte_eth_dev_count_avail();
+ if (nb_ports == 0)
+ {
+ pcap_fmt_errmsg_for_errno(ebuf, PCAP_ERRBUF_SIZE,
+ errno, "DPDK error: No Ethernet ports");
+ ret = PCAP_ERROR;
+ break;
+ }
+ for (int i=0; i<nb_ports; i++){
+ pcap_snprintf(dpdk_name,DPDK_DEV_NAME_MAX-1,"dpdk:%d",i);
+ // mac addr
+ rte_eth_macaddr_get(i, ð_addr);
+ eth_addr_str(ð_addr,mac_addr,DPDK_MAC_ADDR_SIZE);
+ // PCI addr
+ rte_eth_dev_get_name_by_port(i,pci_addr);
+ pcap_snprintf(dpdk_desc,DPDK_DEV_DESC_MAX-1,"%s %s, MAC:%s, PCI:%s", DPDK_DESC, dpdk_name, mac_addr, pci_addr);
+ // continue add all dev, even error happens
+ add_dev(devlistp, dpdk_name, 0, dpdk_desc, ebuf);
+ }
+ }while(0);
+ return ret;