From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 49847A052F for ; Sun, 26 Jan 2020 19:45:43 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3DA244C7A; Sun, 26 Jan 2020 19:45:43 +0100 (CET) Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) by dpdk.org (Postfix) with ESMTP id 4A35F4C74 for ; Sun, 26 Jan 2020 19:45:41 +0100 (CET) Received: by mail-pl1-f194.google.com with SMTP id b22so2924467pls.12 for ; Sun, 26 Jan 2020 10:45:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=VJ5rCyNihhPpvZ24YM+n7SzekCCEW3v07D8vB9JtRYo=; b=s3f+99uFtCz2uIWM8HsZt/03WFlWIgUlDq4fBIhF0F3QcqvmtG9P9xKVI6V0j7wSUS /QtngJzCzuk1QMS64bwTGMLYSXoz2NDMkYIzBjguKrYxdu+MgNN/Hfk5Et5DjMD8AxY9 Qlc/DZctgIX1CiDtGQrKn4P010ouU4MmzSKrYHKNmcPOBDGUzhRFBhe2GTAbxLliKw1f Kj20cDEaxcYTOh3tLQCXEmHn/pEBZC1vEPq++7cQH9NBplvfn/xgh+1rHyJQtn7s+xqE D0dWNbh8S5akkhovHa3uE2VaiCmXH+BdoZ+cB5EiS6CfCOh5kaDpGTDzUDkfEsTDkPRr Od2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=VJ5rCyNihhPpvZ24YM+n7SzekCCEW3v07D8vB9JtRYo=; b=AlNr4vkpiCGZR8cEy6aBQfFdE1euuNV8rvViBEWrbo264FmDkgi5CEGSb60ZXwyVBw PJhKB2RqfAHTkKVzOD82XGEb7pZn8Au5Z14qD19RdEok/WwrkxUqRRXwaMiCYBPuWmLC hFuwH+X645GKA5o7N/mxbtkww0CDP1+pbGtJCZwCriMF56X6VMeEFXT92Ssgz0DKoxTz 5+r3nF72N7kMCRl+CTxW7WYw/G4DpA5JMdqeuE2wJLZI8m3de4bCAjTqOv+l4o5v4vJN p0ak5tyAnLSBkixuiCZ9y40LDUqsgj4N16oPP2IuG92Qdsr5xFdEVRliJPFYOJJwP6Zz 1lxQ== X-Gm-Message-State: APjAAAXdUpAXy3nXkKVx6fJDXIq8+UsPOg82MHiTLJotXzVfD0zJgjQe OOIzD1ZZrVJK6GHeF9OJiz81PK5M X-Google-Smtp-Source: APXvYqw9d9GfBl2ZPz98+WUyFFXOgCoh3wTJfmWR3LqiRSDp8hM/0BPZznpKEBPIW/4bmh/0UIkYyQ== X-Received: by 2002:a17:90a:6484:: with SMTP id h4mr10096859pjj.84.1580064340303; Sun, 26 Jan 2020 10:45:40 -0800 (PST) Received: from localhost.localdomain ([2400:4050:c8c2:de00:b50a:4377:14ac:92ae]) by smtp.gmail.com with ESMTPSA id h7sm13639086pfq.36.2020.01.26.10.45.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Jan 2020 10:45:39 -0800 (PST) From: Yasufumi Ogawa To: spp@dpdk.org, ferruh.yigit@intel.com, yasufum.o@gmail.com Date: Mon, 27 Jan 2020 03:45:30 +0900 Message-Id: <20200126184533.10762-2-yasufum.o@gmail.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200126184533.10762-1-yasufum.o@gmail.com> References: <20200126184533.10762-1-yasufum.o@gmail.com> Subject: [spp] [PATCH 1/4] shared/sec: add function add_memif X-BeenThere: spp@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: Soft Patch Panel List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: spp-bounces@dpdk.org Sender: "spp" Memif PMD is attached only when launching spp_primary via `--vdev` option, and cannot attach while running SPP. This update is add_memif() for adding memif PMD dynamically after launching from not only spp_primary but also other processes. Signed-off-by: Yasufumi Ogawa --- src/shared/secondary/add_port.c | 76 +++++++++++++++++++++++++++++++++ src/shared/secondary/add_port.h | 20 +++++++++ 2 files changed, 96 insertions(+) diff --git a/src/shared/secondary/add_port.c b/src/shared/secondary/add_port.c index d845250..652ef69 100644 --- a/src/shared/secondary/add_port.c +++ b/src/shared/secondary/add_port.c @@ -46,6 +46,14 @@ get_pcap_pmd_name(int id) return buffer; } +static inline const char * +get_memif_pmd_name(int id) +{ + static char buffer[sizeof(MEMIF_PMD_DEV_NAME) + 2]; + snprintf(buffer, sizeof(buffer) - 1, MEMIF_PMD_DEV_NAME, id); + return buffer; +} + static inline const char * get_null_pmd_name(int id) { @@ -310,6 +318,74 @@ add_pcap_pmd(int index) return pcap_pmd_port_id; } +int +add_memif_pmd(int index) +{ + struct rte_eth_conf port_conf = { + .rxmode = { .max_rx_pkt_len = RTE_ETHER_MAX_LEN } + }; + + struct rte_mempool *mp; + const char *name; + char devargs[64]; + char sock_fn[32]; + uint16_t memif_pmd_port_id; + uint16_t nr_queues = 1; + + int ret; + + memset(devargs, '\0', sizeof(devargs)); + memset(sock_fn, '\0', sizeof(sock_fn)); + + mp = rte_mempool_lookup(PKTMBUF_POOL_NAME); + if (mp == NULL) + rte_exit(EXIT_FAILURE, "Cannon get mempool for mbuf\n"); + + name = get_memif_pmd_name(index); + sprintf(devargs, "%s,id=%d,role=%s,socket=%s", + name, index, MEMIF_ROLE, MEMIF_SOCK); + RTE_LOG(DEBUG, SHARED, "Devargs for memif: '%s'.\n", devargs); + ret = dev_attach_by_devargs(devargs, &memif_pmd_port_id); + if (ret < 0) + return ret; + + ret = rte_eth_dev_configure( + memif_pmd_port_id, nr_queues, nr_queues, + &port_conf); + if (ret < 0) + return ret; + + /* Allocate and set up 1 RX queue per Ethernet port. */ + uint16_t q; + for (q = 0; q < nr_queues; q++) { + ret = rte_eth_rx_queue_setup( + memif_pmd_port_id, q, NR_DESCS, + rte_eth_dev_socket_id( + memif_pmd_port_id), NULL, mp); + if (ret < 0) + return ret; + } + + /* Allocate and set up 1 TX queue per Ethernet port. */ + for (q = 0; q < nr_queues; q++) { + ret = rte_eth_tx_queue_setup( + memif_pmd_port_id, q, NR_DESCS, + rte_eth_dev_socket_id( + memif_pmd_port_id), + NULL); + if (ret < 0) + return ret; + } + + ret = rte_eth_dev_start(memif_pmd_port_id); + if (ret < 0) + return ret; + + RTE_LOG(DEBUG, SHARED, "memif port id %d\n", memif_pmd_port_id); + + return memif_pmd_port_id; +} + int add_null_pmd(int index) { diff --git a/src/shared/secondary/add_port.h b/src/shared/secondary/add_port.h index a75b28b..d686f20 100644 --- a/src/shared/secondary/add_port.h +++ b/src/shared/secondary/add_port.h @@ -13,11 +13,20 @@ #define VHOST_BACKEND_NAME "spp_vhost%u" #define PCAP_PMD_DEV_NAME "eth_pcap%u" +#define MEMIF_PMD_DEV_NAME "net_memif%u" #define NULL_PMD_DEV_NAME "eth_null%u" #define PCAP_IFACE_RX "/tmp/spp-rx%d.pcap" #define PCAP_IFACE_TX "/tmp/spp-tx%d.pcap" +/** + * SPP provides memif for other processes as "master" role and via socket + * file "/tmp/spp-memif.sock". Details of memif is described in here. + * https://doc.dpdk.org/guides/nics/memif.html + */ +#define MEMIF_ROLE "master" +#define MEMIF_SOCK "/tmp/spp-memif.sock" + #define RTE_LOGTYPE_SHARED RTE_LOGTYPE_USER1 /** @@ -77,6 +86,17 @@ add_vhost_pmd(int index); int add_pcap_pmd(int index); +/** + * Create a memif PMD with given ID. + * + * @param port_id + * ID of the next possible valid port. + * @return + * Unique port ID + */ +int +add_memif_pmd(int index); + /** * Create a null PMD with given ID. * -- 2.17.1