* [spp] [PATCH 1/4] spp_nfv: add pcap pmd
@ 2018-01-31 11:21 ogawa.yasufumi
2018-01-31 11:21 ` [spp] [PATCH 2/4] spp: add pcap pmd support ogawa.yasufumi
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: ogawa.yasufumi @ 2018-01-31 11:21 UTC (permalink / raw)
To: spp, ferruh.yigit, geminoa; +Cc: ogawa.yasufumi, Naoki Takada
From: ogawa.yasufumi@lab.ntt.co.jp
From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Add libpcap-based PMD[1] support to read and write packets from files
on host. As ring or vhost PMD, pcap PMD is created from add_pcap_pmd().
Pcap device is created as '/tmp/rx_*.pcap' and '/tmp/tx_*.pcap' from
rte_eth_dev_attach().
[1] https://dpdk.org/doc/guides/nics/pcap_ring.html
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Signed-off-by: Naoki Takada <takada.naoki@lab.ntt.co.jp>
---
src/nfv/nfv.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
src/shared/common.c | 5 ++++
src/shared/common.h | 10 +++++++
3 files changed, 99 insertions(+), 1 deletion(-)
diff --git a/src/nfv/nfv.c b/src/nfv/nfv.c
index fd82690..c1a48e9 100644
--- a/src/nfv/nfv.c
+++ b/src/nfv/nfv.c
@@ -346,7 +346,6 @@ do_del(char *token_list[], int max_token)
if (port_id < 0)
return -1;
-
} else if (!strcmp(token_list[1], "ring")) {
char name[RTE_ETH_NAME_MAX_LEN];
@@ -358,6 +357,18 @@ do_del(char *token_list[], int max_token)
return -1;
rte_eth_dev_detach(port_id, name);
+
+ } else if (!strcmp(token_list[1], "pcap")) {
+ char name[RTE_ETH_NAME_MAX_LEN];
+
+ if (spp_atoi(token_list[2], &id) < 0)
+ return 0;
+
+ port_id = find_port_id(id, PCAP);
+ if (port_id < 0)
+ return -1;
+
+ rte_eth_dev_detach(port_id, name);
}
forward_array_remove(port_id);
@@ -484,6 +495,71 @@ add_vhost_pmd(int index)
}
static int
+add_pcap_pmd(int index)
+{
+ struct rte_eth_conf port_conf = {
+ .rxmode = { .max_rx_pkt_len = ETHER_MAX_LEN }
+ };
+
+ struct rte_mempool *mp;
+ const char *name;
+ char devargs[256];
+ uint16_t pcap_pmd_port_id;
+ uint16_t nr_queues = 1;
+
+ int ret;
+
+ mp = rte_mempool_lookup(PKTMBUF_POOL_NAME);
+ if (mp == NULL)
+ rte_exit(EXIT_FAILURE, "Cannon get mempool for mbuf\n");
+
+ name = get_pcap_pmd_name(index);
+ sprintf(devargs,
+ "%s,rx_pcap=/tmp/rx_%d.pcap,tx_pcap=/tmp/tx_%d.pcap",
+ name, index, index);
+ ret = rte_eth_dev_attach(devargs, &pcap_pmd_port_id);
+
+ if (ret < 0)
+ return ret;
+
+ ret = rte_eth_dev_configure(
+ pcap_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(
+ pcap_pmd_port_id, q, NR_DESCS,
+ rte_eth_dev_socket_id(pcap_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(
+ pcap_pmd_port_id, q, NR_DESCS,
+ rte_eth_dev_socket_id(pcap_pmd_port_id),
+ NULL);
+ if (ret < 0)
+ return ret;
+ }
+
+ ret = rte_eth_dev_start(pcap_pmd_port_id);
+
+ if (ret < 0)
+ return ret;
+
+ RTE_LOG(DEBUG, APP, "pcap port id %d\n", pcap_pmd_port_id);
+
+ return pcap_pmd_port_id;
+}
+
+static int
do_add(char *token_list[], int max_token)
{
enum port_type type = UNDEF;
@@ -506,6 +582,13 @@ do_add(char *token_list[], int max_token)
type = RING;
port_id = add_ring_pmd(id);
+
+ } else if (!strcmp(token_list[1], "pcap")) {
+ if (spp_atoi(token_list[2], &id) < 0)
+ return 0;
+
+ type = PCAP;
+ port_id = add_pcap_pmd(id);
}
if (port_id < 0)
diff --git a/src/shared/common.c b/src/shared/common.c
index 5b87385..c577d12 100644
--- a/src/shared/common.c
+++ b/src/shared/common.c
@@ -297,6 +297,11 @@ print_active_ports(char *str, uint16_t client_id,
sprintf(str + strlen(str), "VHOST(%u),",
port_map[i].id);
break;
+ case PCAP:
+ RTE_LOG(INFO, APP, "Type: PCAP\n");
+ sprintf(str + strlen(str), "PCAP(%u),",
+ port_map[i].id);
+ break;
case UNDEF:
RTE_LOG(INFO, APP, "Type: UDF\n");
sprintf(str + strlen(str), "UDF,");
diff --git a/src/shared/common.h b/src/shared/common.h
index 5defbb0..c5f39d1 100644
--- a/src/shared/common.h
+++ b/src/shared/common.h
@@ -118,6 +118,7 @@ enum port_type {
PHY,
RING,
VHOST,
+ PCAP,
UNDEF,
};
@@ -143,6 +144,7 @@ struct port {
#define MZ_PORT_INFO "MProc_port_info"
#define VHOST_BACKEND_NAME "eth_vhost%u"
#define VHOST_IFACE_NAME "/tmp/sock%u"
+#define PCAP_PMD_DEV_NAME "eth_pcap%u"
/*
* Given the rx queue name template above, get the queue name
@@ -186,6 +188,14 @@ get_vhost_iface_name(unsigned int id)
return buffer;
}
+static inline const char *
+get_pcap_pmd_name(int id)
+{
+ static char buffer[sizeof(PCAP_PMD_DEV_NAME) + 2];
+ snprintf(buffer, sizeof(buffer) - 1, PCAP_PMD_DEV_NAME, id);
+ return buffer;
+}
+
void check_all_ports_link_status(struct port_info *ports, uint16_t port_num,
uint32_t port_mask);
--
2.13.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [spp] [PATCH 2/4] spp: add pcap pmd support
2018-01-31 11:21 [spp] [PATCH 1/4] spp_nfv: add pcap pmd ogawa.yasufumi
@ 2018-01-31 11:21 ` ogawa.yasufumi
2018-01-31 11:21 ` [spp] [PATCH 3/4] spp_nfv: add null pmd ogawa.yasufumi
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: ogawa.yasufumi @ 2018-01-31 11:21 UTC (permalink / raw)
To: spp, ferruh.yigit, geminoa; +Cc: ogawa.yasufumi, Naoki Takada
From: ogawa.yasufumi@lab.ntt.co.jp
From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Add pcap for add/del commands and complementation to SPP controller.
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Signed-off-by: Naoki Takada <takada.naoki@lab.ntt.co.jp>
---
src/spp.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/spp.py b/src/spp.py
index e7ad43b..f5d53de 100755
--- a/src/spp.py
+++ b/src/spp.py
@@ -362,7 +362,7 @@ class Shell(cmd.Cmd):
PRI_CMDS = ['status', 'exit', 'clear']
SEC_CMDS = ['status', 'exit', 'forward', 'stop', 'add', 'patch', 'del']
- SEC_SUBCMDS = ['vhost', 'ring']
+ SEC_SUBCMDS = ['vhost', 'ring', 'pcap']
BYE_CMDS = ['sec', 'all']
def close_all_secondary(self):
@@ -454,7 +454,7 @@ class Shell(cmd.Cmd):
level1 = ['status', 'exit', 'forward', 'stop']
level2 = ['add', 'patch', 'del']
patch_args = ['reset']
- add_del_args = ['ring', 'vhost']
+ add_del_args = ['ring', 'vhost', 'pcap']
cmdlist = cmds.split(' ')
valid = 0
--
2.13.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [spp] [PATCH 3/4] spp_nfv: add null pmd
2018-01-31 11:21 [spp] [PATCH 1/4] spp_nfv: add pcap pmd ogawa.yasufumi
2018-01-31 11:21 ` [spp] [PATCH 2/4] spp: add pcap pmd support ogawa.yasufumi
@ 2018-01-31 11:21 ` ogawa.yasufumi
2018-01-31 11:21 ` [spp] [PATCH 4/4] spp: add null pmd support ogawa.yasufumi
2018-02-01 13:09 ` [spp] [PATCH 1/4] spp_nfv: add pcap pmd Ferruh Yigit
3 siblings, 0 replies; 5+ messages in thread
From: ogawa.yasufumi @ 2018-01-31 11:21 UTC (permalink / raw)
To: spp, ferruh.yigit, geminoa; +Cc: ogawa.yasufumi, Naoki Takada
From: ogawa.yasufumi@lab.ntt.co.jp
From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Null PMD is a virtual device for DPDK performance test[1]. It provides
'/dev/null' like PMD which means that it is able to send/receive
packets no limitation.
[1] https://dpdk.org/ml/archives/dev/2015-February/012482.html
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Signed-off-by: Naoki Takada <takada.naoki@lab.ntt.co.jp>
---
src/nfv/nfv.c | 82 +++++++++++++++++++++++++++++++++++++++++++++++++++++
src/shared/common.c | 5 ++++
src/shared/common.h | 10 +++++++
3 files changed, 97 insertions(+)
diff --git a/src/nfv/nfv.c b/src/nfv/nfv.c
index c1a48e9..a3e04bf 100644
--- a/src/nfv/nfv.c
+++ b/src/nfv/nfv.c
@@ -369,6 +369,19 @@ do_del(char *token_list[], int max_token)
return -1;
rte_eth_dev_detach(port_id, name);
+
+ } else if (!strcmp(token_list[1], "nullpmd")) {
+ char name[RTE_ETH_NAME_MAX_LEN];
+
+ if (spp_atoi(token_list[2], &id) < 0)
+ return 0;
+
+ port_id = find_port_id(id, NULLPMD);
+ if (port_id < 0)
+ return -1;
+
+ rte_eth_dev_detach(port_id, name);
+
}
forward_array_remove(port_id);
@@ -560,6 +573,68 @@ add_pcap_pmd(int index)
}
static int
+add_null_pmd(int index)
+{
+ struct rte_eth_conf port_conf = {
+ .rxmode = { .max_rx_pkt_len = ETHER_MAX_LEN }
+ };
+
+ struct rte_mempool *mp;
+ const char *name;
+ char devargs[64];
+ uint16_t null_pmd_port_id;
+ uint16_t nr_queues = 1;
+
+ int ret;
+
+ mp = rte_mempool_lookup(PKTMBUF_POOL_NAME);
+ if (mp == NULL)
+ rte_exit(EXIT_FAILURE, "Cannon get mempool for mbuf\n");
+
+ name = get_null_pmd_name(index);
+ sprintf(devargs, "%s", name);
+ ret = rte_eth_dev_attach(devargs, &null_pmd_port_id);
+ if (ret < 0)
+ return ret;
+
+ ret = rte_eth_dev_configure(
+ null_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(
+ null_pmd_port_id, q, NR_DESCS,
+ rte_eth_dev_socket_id(
+ null_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(
+ null_pmd_port_id, q, NR_DESCS,
+ rte_eth_dev_socket_id(
+ null_pmd_port_id),
+ NULL);
+ if (ret < 0)
+ return ret;
+ }
+
+ ret = rte_eth_dev_start(null_pmd_port_id);
+ if (ret < 0)
+ return ret;
+
+ RTE_LOG(DEBUG, APP, "null port id %d\n", null_pmd_port_id);
+
+ return null_pmd_port_id;
+}
+
+static int
do_add(char *token_list[], int max_token)
{
enum port_type type = UNDEF;
@@ -589,6 +664,13 @@ do_add(char *token_list[], int max_token)
type = PCAP;
port_id = add_pcap_pmd(id);
+
+ } else if (!strcmp(token_list[1], "nullpmd")) {
+ if (spp_atoi(token_list[2], &id) < 0)
+ return 0;
+
+ type = NULLPMD;
+ port_id = add_null_pmd(id);
}
if (port_id < 0)
diff --git a/src/shared/common.c b/src/shared/common.c
index c577d12..4176b6d 100644
--- a/src/shared/common.c
+++ b/src/shared/common.c
@@ -302,6 +302,11 @@ print_active_ports(char *str, uint16_t client_id,
sprintf(str + strlen(str), "PCAP(%u),",
port_map[i].id);
break;
+ case NULLPMD:
+ RTE_LOG(INFO, APP, "Type: NULLPMD\n");
+ sprintf(str + strlen(str), "NULLPMD(%u),",
+ port_map[i].id);
+ break;
case UNDEF:
RTE_LOG(INFO, APP, "Type: UDF\n");
sprintf(str + strlen(str), "UDF,");
diff --git a/src/shared/common.h b/src/shared/common.h
index c5f39d1..f0d68e5 100644
--- a/src/shared/common.h
+++ b/src/shared/common.h
@@ -119,6 +119,7 @@ enum port_type {
RING,
VHOST,
PCAP,
+ NULLPMD,
UNDEF,
};
@@ -145,6 +146,7 @@ struct port {
#define VHOST_BACKEND_NAME "eth_vhost%u"
#define VHOST_IFACE_NAME "/tmp/sock%u"
#define PCAP_PMD_DEV_NAME "eth_pcap%u"
+#define NULL_PMD_DEV_NAME "eth_null%u"
/*
* Given the rx queue name template above, get the queue name
@@ -196,6 +198,14 @@ get_pcap_pmd_name(int id)
return buffer;
}
+static inline const char *
+get_null_pmd_name(int id)
+{
+ static char buffer[sizeof(NULL_PMD_DEV_NAME) + 2];
+ snprintf(buffer, sizeof(buffer) - 1, NULL_PMD_DEV_NAME, id);
+ return buffer;
+}
+
void check_all_ports_link_status(struct port_info *ports, uint16_t port_num,
uint32_t port_mask);
--
2.13.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [spp] [PATCH 4/4] spp: add null pmd support
2018-01-31 11:21 [spp] [PATCH 1/4] spp_nfv: add pcap pmd ogawa.yasufumi
2018-01-31 11:21 ` [spp] [PATCH 2/4] spp: add pcap pmd support ogawa.yasufumi
2018-01-31 11:21 ` [spp] [PATCH 3/4] spp_nfv: add null pmd ogawa.yasufumi
@ 2018-01-31 11:21 ` ogawa.yasufumi
2018-02-01 13:09 ` [spp] [PATCH 1/4] spp_nfv: add pcap pmd Ferruh Yigit
3 siblings, 0 replies; 5+ messages in thread
From: ogawa.yasufumi @ 2018-01-31 11:21 UTC (permalink / raw)
To: spp, ferruh.yigit, geminoa; +Cc: ogawa.yasufumi, Naoki Takada
From: ogawa.yasufumi@lab.ntt.co.jp
From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Add nullpmd for add/del commands and complementation to SPP controller.
Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
Signed-off-by: Naoki Takada <takada.naoki@lab.ntt.co.jp>
---
src/spp.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/spp.py b/src/spp.py
index f5d53de..3796670 100755
--- a/src/spp.py
+++ b/src/spp.py
@@ -362,7 +362,7 @@ class Shell(cmd.Cmd):
PRI_CMDS = ['status', 'exit', 'clear']
SEC_CMDS = ['status', 'exit', 'forward', 'stop', 'add', 'patch', 'del']
- SEC_SUBCMDS = ['vhost', 'ring', 'pcap']
+ SEC_SUBCMDS = ['vhost', 'ring', 'pcap', 'nullpmd']
BYE_CMDS = ['sec', 'all']
def close_all_secondary(self):
@@ -454,7 +454,7 @@ class Shell(cmd.Cmd):
level1 = ['status', 'exit', 'forward', 'stop']
level2 = ['add', 'patch', 'del']
patch_args = ['reset']
- add_del_args = ['ring', 'vhost', 'pcap']
+ add_del_args = ['ring', 'vhost', 'pcap', 'nullpmd']
cmdlist = cmds.split(' ')
valid = 0
--
2.13.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [spp] [PATCH 1/4] spp_nfv: add pcap pmd
2018-01-31 11:21 [spp] [PATCH 1/4] spp_nfv: add pcap pmd ogawa.yasufumi
` (2 preceding siblings ...)
2018-01-31 11:21 ` [spp] [PATCH 4/4] spp: add null pmd support ogawa.yasufumi
@ 2018-02-01 13:09 ` Ferruh Yigit
3 siblings, 0 replies; 5+ messages in thread
From: Ferruh Yigit @ 2018-02-01 13:09 UTC (permalink / raw)
To: ogawa.yasufumi, spp, geminoa; +Cc: Naoki Takada
On 1/31/2018 11:21 AM, ogawa.yasufumi@lab.ntt.co.jp wrote:
> From: ogawa.yasufumi@lab.ntt.co.jp
>
> From: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
>
> Add libpcap-based PMD[1] support to read and write packets from files
> on host. As ring or vhost PMD, pcap PMD is created from add_pcap_pmd().
> Pcap device is created as '/tmp/rx_*.pcap' and '/tmp/tx_*.pcap' from
> rte_eth_dev_attach().
>
> [1] https://dpdk.org/doc/guides/nics/pcap_ring.html
>
> Signed-off-by: Yasufumi Ogawa <ogawa.yasufumi@lab.ntt.co.jp>
> Signed-off-by: Naoki Takada <takada.naoki@lab.ntt.co.jp>
I think it is good idea to add pcap and null support.
Series applied, thanks.
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2018-02-01 13:09 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-01-31 11:21 [spp] [PATCH 1/4] spp_nfv: add pcap pmd ogawa.yasufumi
2018-01-31 11:21 ` [spp] [PATCH 2/4] spp: add pcap pmd support ogawa.yasufumi
2018-01-31 11:21 ` [spp] [PATCH 3/4] spp_nfv: add null pmd ogawa.yasufumi
2018-01-31 11:21 ` [spp] [PATCH 4/4] spp: add null pmd support ogawa.yasufumi
2018-02-01 13:09 ` [spp] [PATCH 1/4] spp_nfv: add pcap pmd Ferruh Yigit
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).