All of lore.kernel.org
 help / color / mirror / Atom feed
From: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH 05/40] pipeline: add extern objects and functions
Date: Wed, 26 Aug 2020 16:14:10 +0100	[thread overview]
Message-ID: <20200826151445.51500-6-cristian.dumitrescu@intel.com> (raw)
In-Reply-To: <20200826151445.51500-1-cristian.dumitrescu@intel.com>

Add extern objects and functions to plug in functions that cannot be
efficiently implemented with existing instructions, e.g. special
checksum/ECC, crypto, meters, stats arrays, heuristics, etc. In/out
arguments are passed through mailbox with format defined by struct.

Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>
---
 lib/librte_pipeline/Makefile                 |   1 +
 lib/librte_pipeline/meson.build              |   3 +-
 lib/librte_pipeline/rte_pipeline_version.map |   4 +
 lib/librte_pipeline/rte_swx_extern.h         |  98 ++++
 lib/librte_pipeline/rte_swx_pipeline.c       | 477 +++++++++++++++++++
 lib/librte_pipeline/rte_swx_pipeline.h       | 113 +++++
 6 files changed, 695 insertions(+), 1 deletion(-)
 create mode 100644 lib/librte_pipeline/rte_swx_extern.h

diff --git a/lib/librte_pipeline/Makefile b/lib/librte_pipeline/Makefile
index 32582db9e..23bfd88e6 100644
--- a/lib/librte_pipeline/Makefile
+++ b/lib/librte_pipeline/Makefile
@@ -25,6 +25,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_PIPELINE) += rte_swx_pipeline.c
 
 # install includes
 SYMLINK-$(CONFIG_RTE_LIBRTE_PIPELINE)-include += rte_pipeline.h rte_port_in_action.h rte_table_action.h
+SYMLINK-$(CONFIG_RTE_LIBRTE_PIPELINE)-include += rte_swx_extern.h
 SYMLINK-$(CONFIG_RTE_LIBRTE_PIPELINE)-include += rte_swx_pipeline.h
 
 include $(RTE_SDK)/mk/rte.lib.mk
diff --git a/lib/librte_pipeline/meson.build b/lib/librte_pipeline/meson.build
index 880c2b274..bea406848 100644
--- a/lib/librte_pipeline/meson.build
+++ b/lib/librte_pipeline/meson.build
@@ -8,5 +8,6 @@ sources = files('rte_pipeline.c',
 headers = files('rte_pipeline.h',
 	'rte_port_in_action.h',
 	'rte_table_action.h',
-	'rte_swx_pipeline.h',)
+	'rte_swx_pipeline.h',
+	'rte_swx_extern.h',)
 deps += ['port', 'table', 'meter', 'sched', 'cryptodev']
diff --git a/lib/librte_pipeline/rte_pipeline_version.map b/lib/librte_pipeline/rte_pipeline_version.map
index 6a48c3666..4297e185d 100644
--- a/lib/librte_pipeline/rte_pipeline_version.map
+++ b/lib/librte_pipeline/rte_pipeline_version.map
@@ -60,6 +60,10 @@ EXPERIMENTAL {
 	rte_swx_pipeline_port_in_config;
 	rte_swx_pipeline_port_out_type_register;
 	rte_swx_pipeline_port_out_config;
+	rte_swx_pipeline_extern_type_register;
+	rte_swx_pipeline_extern_type_member_func_register;
+	rte_swx_pipeline_extern_object_config;
+	rte_swx_pipeline_extern_func_register;
 	rte_swx_pipeline_struct_type_register;
 	rte_swx_pipeline_packet_header_register;
 	rte_swx_pipeline_packet_metadata_register;
diff --git a/lib/librte_pipeline/rte_swx_extern.h b/lib/librte_pipeline/rte_swx_extern.h
new file mode 100644
index 000000000..e10e963d6
--- /dev/null
+++ b/lib/librte_pipeline/rte_swx_extern.h
@@ -0,0 +1,98 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright(c) 2020 Intel Corporation
+ */
+#ifndef __INCLUDE_RTE_SWX_EXTERN_H__
+#define __INCLUDE_RTE_SWX_EXTERN_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file
+ * RTE SWX Extern objects and functions
+ *
+ * Extern object and extern function interfaces. The extern objects and extern
+ * functions provide the mechanisms to hook external functionality into the
+ * packet processing pipeline.
+ */
+
+#include <stdint.h>
+
+/*
+ * Extern type
+ */
+
+/**
+ * Extern object constructor
+ *
+ * @param[in] args
+ *   Extern object constructor arguments. It may be NULL.
+ * @return
+ *   Extern object handle.
+ */
+typedef void *
+(*rte_swx_extern_type_constructor_t)(const char *args);
+
+/**
+ * Extern object destructor
+ *
+ * @param[in] object
+ *   Extern object handle.
+ */
+typedef void
+(*rte_swx_extern_type_destructor_t)(void *object);
+
+/**
+ * Extern object member function
+ *
+ * The mailbox is used to pass input arguments to the member function and
+ * retrieve the output results. The mailbox mechanism allows for multiple
+ * concurrent executions of the same member function for the same extern object.
+ *
+ * Multiple invocations of the same member function may be required in order for
+ * the associated operation to complete. The completion is flagged by a return
+ * value of 1, in which case the results are available in the mailbox; in case
+ * of a return value of 0, the operation is not yet completed, so the member
+ * function must be invoked again with exactly the same object and mailbox
+ * arguments.
+ *
+ * @param[in] object
+ *   Extern object handle.
+ * @param[in] mailbox
+ *   Extern object mailbox.
+ * @return
+ *   0 when the operation is not yet completed, and 1 when the operation is
+ *   completed. No other return values are allowed.
+ */
+typedef int
+(*rte_swx_extern_type_member_func_t)(void *object, void *mailbox);
+
+/*
+ * Extern function
+ */
+
+/** The mailbox is used to pass input arguments to the extern function and
+ * retrieve the output results. The mailbox mechanism allows for multiple
+ * concurrent executions of the same extern function.
+ *
+ * Multiple invocations of the same extern function may be required in order for
+ * the associated operation to complete. The completion is flagged by a return
+ * value of 1, in which case the results are available in the mailbox; in case
+ * of a return value of 0, the operation is not yet completed, so the extern
+ * function must be invoked again with exactly the same mailbox argument.
+ *
+ * @param[in] mailbox
+ *   Extern object mailbox.
+ * @return
+ *   0 when the operation is not yet completed, and 1 when the operation is
+ *   completed. No other return values are allowed.
+ */
+typedef int
+(*rte_swx_extern_func_t)(void *mailbox);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/lib/librte_pipeline/rte_swx_pipeline.c b/lib/librte_pipeline/rte_swx_pipeline.c
index cb2e32b83..2335831bf 100644
--- a/lib/librte_pipeline/rte_swx_pipeline.c
+++ b/lib/librte_pipeline/rte_swx_pipeline.c
@@ -90,6 +90,70 @@ struct port_out_runtime {
 	void *obj;
 };
 
+/*
+ * Extern object.
+ */
+struct extern_type_member_func {
+	TAILQ_ENTRY(extern_type_member_func) node;
+	char name[RTE_SWX_NAME_SIZE];
+	rte_swx_extern_type_member_func_t func;
+	uint32_t id;
+};
+
+TAILQ_HEAD(extern_type_member_func_tailq, extern_type_member_func);
+
+struct extern_type {
+	TAILQ_ENTRY(extern_type) node;
+	char name[RTE_SWX_NAME_SIZE];
+	struct struct_type *mailbox_struct_type;
+	rte_swx_extern_type_constructor_t constructor;
+	rte_swx_extern_type_destructor_t destructor;
+	struct extern_type_member_func_tailq funcs;
+	uint32_t n_funcs;
+};
+
+TAILQ_HEAD(extern_type_tailq, extern_type);
+
+struct extern_obj {
+	TAILQ_ENTRY(extern_obj) node;
+	char name[RTE_SWX_NAME_SIZE];
+	struct extern_type *type;
+	void *obj;
+	uint32_t struct_id;
+	uint32_t id;
+};
+
+TAILQ_HEAD(extern_obj_tailq, extern_obj);
+
+#ifndef RTE_SWX_EXTERN_TYPE_MEMBER_FUNCS_MAX
+#define RTE_SWX_EXTERN_TYPE_MEMBER_FUNCS_MAX 8
+#endif
+
+struct extern_obj_runtime {
+	void *obj;
+	uint8_t *mailbox;
+	rte_swx_extern_type_member_func_t funcs[RTE_SWX_EXTERN_TYPE_MEMBER_FUNCS_MAX];
+};
+
+/*
+ * Extern function.
+ */
+struct extern_func {
+	TAILQ_ENTRY(extern_func) node;
+	char name[RTE_SWX_NAME_SIZE];
+	struct struct_type *mailbox_struct_type;
+	rte_swx_extern_func_t func;
+	uint32_t struct_id;
+	uint32_t id;
+};
+
+TAILQ_HEAD(extern_func_tailq, extern_func);
+
+struct extern_func_runtime {
+	uint8_t *mailbox;
+	rte_swx_extern_func_t func;
+};
+
 /*
  * Header.
  */
@@ -130,6 +194,10 @@ struct thread {
 
 	/* Packet meta-data. */
 	uint8_t *metadata;
+
+	/* Extern objects and functions. */
+	struct extern_obj_runtime *extern_objs;
+	struct extern_func_runtime *extern_funcs;
 };
 
 #ifndef RTE_SWX_PIPELINE_THREADS_MAX
@@ -142,6 +210,9 @@ struct rte_swx_pipeline {
 	struct port_in_tailq ports_in;
 	struct port_out_type_tailq port_out_types;
 	struct port_out_tailq ports_out;
+	struct extern_type_tailq extern_types;
+	struct extern_obj_tailq extern_objs;
+	struct extern_func_tailq extern_funcs;
 	struct header_tailq headers;
 	struct struct_type *metadata_st;
 	uint32_t metadata_struct_id;
@@ -153,6 +224,8 @@ struct rte_swx_pipeline {
 	uint32_t n_structs;
 	uint32_t n_ports_in;
 	uint32_t n_ports_out;
+	uint32_t n_extern_objs;
+	uint32_t n_extern_funcs;
 	uint32_t n_headers;
 	int build_done;
 	int numa_node;
@@ -606,6 +679,395 @@ port_out_free(struct rte_swx_pipeline *p)
 	}
 }
 
+/*
+ * Extern object.
+ */
+static struct extern_type *
+extern_type_find(struct rte_swx_pipeline *p, const char *name)
+{
+	struct extern_type *elem;
+
+	TAILQ_FOREACH(elem, &p->extern_types, node)
+		if (strcmp(elem->name, name) == 0)
+			return elem;
+
+	return NULL;
+}
+
+static struct extern_type_member_func *
+extern_type_member_func_find(struct extern_type *type, const char *name)
+{
+	struct extern_type_member_func *elem;
+
+	TAILQ_FOREACH(elem, &type->funcs, node)
+		if (strcmp(elem->name, name) == 0)
+			return elem;
+
+	return NULL;
+}
+
+static struct extern_obj *
+extern_obj_find(struct rte_swx_pipeline *p, const char *name)
+{
+	struct extern_obj *elem;
+
+	TAILQ_FOREACH(elem, &p->extern_objs, node)
+		if (strcmp(elem->name, name) == 0)
+			return elem;
+
+	return NULL;
+}
+
+int
+rte_swx_pipeline_extern_type_register(struct rte_swx_pipeline *p,
+	const char *name,
+	const char *mailbox_struct_type_name,
+	rte_swx_extern_type_constructor_t constructor,
+	rte_swx_extern_type_destructor_t destructor)
+{
+	struct extern_type *elem;
+	struct struct_type *mailbox_struct_type;
+
+	CHECK(p, EINVAL);
+
+	CHECK_NAME(name, EINVAL);
+	CHECK(!extern_type_find(p, name), EEXIST);
+
+	CHECK_NAME(mailbox_struct_type_name, EINVAL);
+	mailbox_struct_type = struct_type_find(p, mailbox_struct_type_name);
+	CHECK(mailbox_struct_type, EINVAL);
+
+	CHECK(constructor, EINVAL);
+	CHECK(destructor, EINVAL);
+
+	/* Node allocation. */
+	elem = calloc(1, sizeof(struct extern_type));
+	CHECK(elem, ENOMEM);
+
+	/* Node initialization. */
+	strcpy(elem->name, name);
+	elem->mailbox_struct_type = mailbox_struct_type;
+	elem->constructor = constructor;
+	elem->destructor = destructor;
+	TAILQ_INIT(&elem->funcs);
+
+	/* Node add to tailq. */
+	TAILQ_INSERT_TAIL(&p->extern_types, elem, node);
+
+	return 0;
+}
+
+int
+rte_swx_pipeline_extern_type_member_func_register(struct rte_swx_pipeline *p,
+	const char *extern_type_name,
+	const char *name,
+	rte_swx_extern_type_member_func_t member_func)
+{
+	struct extern_type *type;
+	struct extern_type_member_func *type_member;
+
+	CHECK(p, EINVAL);
+
+	CHECK(extern_type_name, EINVAL);
+	type = extern_type_find(p, extern_type_name);
+	CHECK(type, EINVAL);
+	CHECK(type->n_funcs < RTE_SWX_EXTERN_TYPE_MEMBER_FUNCS_MAX, ENOSPC);
+
+	CHECK(name, EINVAL);
+	CHECK(!extern_type_member_func_find(type, name), EEXIST);
+
+	CHECK(member_func, EINVAL);
+
+	/* Node allocation. */
+	type_member = calloc(1, sizeof(struct extern_type_member_func));
+	CHECK(type_member, ENOMEM);
+
+	/* Node initialization. */
+	strcpy(type_member->name, name);
+	type_member->func = member_func;
+	type_member->id = type->n_funcs;
+
+	/* Node add to tailq. */
+	TAILQ_INSERT_TAIL(&type->funcs, type_member, node);
+	type->n_funcs++;
+
+	return 0;
+}
+
+int
+rte_swx_pipeline_extern_object_config(struct rte_swx_pipeline *p,
+				      const char *extern_type_name,
+				      const char *name,
+				      const char *args)
+{
+	struct extern_type *type;
+	struct extern_obj *obj;
+	void *obj_handle;
+
+	CHECK(p, EINVAL);
+
+	CHECK_NAME(extern_type_name, EINVAL);
+	type = extern_type_find(p, extern_type_name);
+	CHECK(type, EINVAL);
+
+	CHECK_NAME(name, EINVAL);
+	CHECK(!extern_obj_find(p, name), EEXIST);
+
+	/* Node allocation. */
+	obj = calloc(1, sizeof(struct extern_obj));
+	CHECK(obj, ENOMEM);
+
+	/* Object construction. */
+	obj_handle = type->constructor(args);
+	if (!obj_handle) {
+		free(obj);
+		CHECK(0, ENODEV);
+	}
+
+	/* Node initialization. */
+	strcpy(obj->name, name);
+	obj->type = type;
+	obj->obj = obj_handle;
+	obj->struct_id = p->n_structs;
+	obj->id = p->n_extern_objs;
+
+	/* Node add to tailq. */
+	TAILQ_INSERT_TAIL(&p->extern_objs, obj, node);
+	p->n_extern_objs++;
+	p->n_structs++;
+
+	return 0;
+}
+
+static int
+extern_obj_build(struct rte_swx_pipeline *p)
+{
+	uint32_t i;
+
+	for (i = 0; i < RTE_SWX_PIPELINE_THREADS_MAX; i++) {
+		struct thread *t = &p->threads[i];
+		struct extern_obj *obj;
+
+		t->extern_objs = calloc(p->n_extern_objs,
+					sizeof(struct extern_obj_runtime));
+		CHECK(t->extern_objs, ENOMEM);
+
+		TAILQ_FOREACH(obj, &p->extern_objs, node) {
+			struct extern_obj_runtime *r =
+				&t->extern_objs[obj->id];
+			struct extern_type_member_func *func;
+			uint32_t mailbox_size =
+				obj->type->mailbox_struct_type->n_bits / 8;
+
+			r->obj = obj->obj;
+
+			r->mailbox = calloc(1, mailbox_size);
+			CHECK(r->mailbox, ENOMEM);
+
+			TAILQ_FOREACH(func, &obj->type->funcs, node)
+				r->funcs[func->id] = func->func;
+
+			t->structs[obj->struct_id] = r->mailbox;
+		}
+	}
+
+	return 0;
+}
+
+static void
+extern_obj_build_free(struct rte_swx_pipeline *p)
+{
+	uint32_t i;
+
+	for (i = 0; i < RTE_SWX_PIPELINE_THREADS_MAX; i++) {
+		struct thread *t = &p->threads[i];
+		uint32_t j;
+
+		if (!t->extern_objs)
+			continue;
+
+		for (j = 0; j < p->n_extern_objs; j++) {
+			struct extern_obj_runtime *r = &t->extern_objs[j];
+
+			free(r->mailbox);
+		}
+
+		free(t->extern_objs);
+		t->extern_objs = NULL;
+	}
+}
+
+static void
+extern_obj_free(struct rte_swx_pipeline *p)
+{
+	extern_obj_build_free(p);
+
+	/* Extern objects. */
+	for ( ; ; ) {
+		struct extern_obj *elem;
+
+		elem = TAILQ_FIRST(&p->extern_objs);
+		if (!elem)
+			break;
+
+		TAILQ_REMOVE(&p->extern_objs, elem, node);
+		if (elem->obj)
+			elem->type->destructor(elem->obj);
+		free(elem);
+	}
+
+	/* Extern types. */
+	for ( ; ; ) {
+		struct extern_type *elem;
+
+		elem = TAILQ_FIRST(&p->extern_types);
+		if (!elem)
+			break;
+
+		TAILQ_REMOVE(&p->extern_types, elem, node);
+
+		for ( ; ; ) {
+			struct extern_type_member_func *func;
+
+			func = TAILQ_FIRST(&elem->funcs);
+			if (!func)
+				break;
+
+			TAILQ_REMOVE(&elem->funcs, func, node);
+			free(func);
+		}
+
+		free(elem);
+	}
+}
+
+/*
+ * Extern function.
+ */
+static struct extern_func *
+extern_func_find(struct rte_swx_pipeline *p, const char *name)
+{
+	struct extern_func *elem;
+
+	TAILQ_FOREACH(elem, &p->extern_funcs, node)
+		if (strcmp(elem->name, name) == 0)
+			return elem;
+
+	return NULL;
+}
+
+int
+rte_swx_pipeline_extern_func_register(struct rte_swx_pipeline *p,
+				      const char *name,
+				      const char *mailbox_struct_type_name,
+				      rte_swx_extern_func_t func)
+{
+	struct extern_func *f;
+	struct struct_type *mailbox_struct_type;
+
+	CHECK(p, EINVAL);
+
+	CHECK_NAME(name, EINVAL);
+	CHECK(!extern_func_find(p, name), EEXIST);
+
+	CHECK_NAME(mailbox_struct_type_name, EINVAL);
+	mailbox_struct_type = struct_type_find(p, mailbox_struct_type_name);
+	CHECK(mailbox_struct_type, EINVAL);
+
+	CHECK(func, EINVAL);
+
+	/* Node allocation. */
+	f = calloc(1, sizeof(struct extern_func));
+	CHECK(func, ENOMEM);
+
+	/* Node initialization. */
+	strcpy(f->name, name);
+	f->mailbox_struct_type = mailbox_struct_type;
+	f->func = func;
+	f->struct_id = p->n_structs;
+	f->id = p->n_extern_funcs;
+
+	/* Node add to tailq. */
+	TAILQ_INSERT_TAIL(&p->extern_funcs, f, node);
+	p->n_extern_funcs++;
+	p->n_structs++;
+
+	return 0;
+}
+
+static int
+extern_func_build(struct rte_swx_pipeline *p)
+{
+	uint32_t i;
+
+	for (i = 0; i < RTE_SWX_PIPELINE_THREADS_MAX; i++) {
+		struct thread *t = &p->threads[i];
+		struct extern_func *func;
+
+		/* Memory allocation. */
+		t->extern_funcs = calloc(p->n_extern_funcs,
+					 sizeof(struct extern_func_runtime));
+		CHECK(t->extern_funcs, ENOMEM);
+
+		/* Extern function. */
+		TAILQ_FOREACH(func, &p->extern_funcs, node) {
+			struct extern_func_runtime *r =
+				&t->extern_funcs[func->id];
+			uint32_t mailbox_size =
+				func->mailbox_struct_type->n_bits / 8;
+
+			r->func = func->func;
+
+			r->mailbox = calloc(1, mailbox_size);
+			CHECK(r->mailbox, ENOMEM);
+
+			t->structs[func->struct_id] = r->mailbox;
+		}
+	}
+
+	return 0;
+}
+
+static void
+extern_func_build_free(struct rte_swx_pipeline *p)
+{
+	uint32_t i;
+
+	for (i = 0; i < RTE_SWX_PIPELINE_THREADS_MAX; i++) {
+		struct thread *t = &p->threads[i];
+		uint32_t j;
+
+		if (!t->extern_funcs)
+			continue;
+
+		for (j = 0; j < p->n_extern_funcs; j++) {
+			struct extern_func_runtime *r = &t->extern_funcs[j];
+
+			free(r->mailbox);
+		}
+
+		free(t->extern_funcs);
+		t->extern_funcs = NULL;
+	}
+}
+
+static void
+extern_func_free(struct rte_swx_pipeline *p)
+{
+	extern_func_build_free(p);
+
+	for ( ; ; ) {
+		struct extern_func *elem;
+
+		elem = TAILQ_FIRST(&p->extern_funcs);
+		if (!elem)
+			break;
+
+		TAILQ_REMOVE(&p->extern_funcs, elem, node);
+		free(elem);
+	}
+}
+
 /*
  * Header.
  */
@@ -826,6 +1288,9 @@ rte_swx_pipeline_config(struct rte_swx_pipeline **p, int numa_node)
 	TAILQ_INIT(&pipeline->ports_in);
 	TAILQ_INIT(&pipeline->port_out_types);
 	TAILQ_INIT(&pipeline->ports_out);
+	TAILQ_INIT(&pipeline->extern_types);
+	TAILQ_INIT(&pipeline->extern_objs);
+	TAILQ_INIT(&pipeline->extern_funcs);
 	TAILQ_INIT(&pipeline->headers);
 
 	pipeline->n_structs = 1; /* Struct 0 is reserved for action_data. */
@@ -843,6 +1308,8 @@ rte_swx_pipeline_free(struct rte_swx_pipeline *p)
 
 	metadata_free(p);
 	header_free(p);
+	extern_func_free(p);
+	extern_obj_free(p);
 	port_out_free(p);
 	port_in_free(p);
 	struct_free(p);
@@ -870,6 +1337,14 @@ rte_swx_pipeline_build(struct rte_swx_pipeline *p)
 	if (status)
 		goto error;
 
+	status = extern_obj_build(p);
+	if (status)
+		goto error;
+
+	status = extern_func_build(p);
+	if (status)
+		goto error;
+
 	status = header_build(p);
 	if (status)
 		goto error;
@@ -884,6 +1359,8 @@ rte_swx_pipeline_build(struct rte_swx_pipeline *p)
 error:
 	metadata_build_free(p);
 	header_build_free(p);
+	extern_func_build_free(p);
+	extern_obj_build_free(p);
 	port_out_build_free(p);
 	port_in_build_free(p);
 	struct_build_free(p);
diff --git a/lib/librte_pipeline/rte_swx_pipeline.h b/lib/librte_pipeline/rte_swx_pipeline.h
index 4a7b679a4..2e8a6cdf8 100644
--- a/lib/librte_pipeline/rte_swx_pipeline.h
+++ b/lib/librte_pipeline/rte_swx_pipeline.h
@@ -19,6 +19,7 @@ extern "C" {
 #include <rte_compat.h>
 
 #include "rte_swx_port.h"
+#include "rte_swx_extern.h"
 
 /** Name size. */
 #ifndef RTE_SWX_NAME_SIZE
@@ -147,6 +148,118 @@ rte_swx_pipeline_port_out_config(struct rte_swx_pipeline *p,
 				 const char *port_type_name,
 				 void *args);
 
+/*
+ * Extern objects and functions
+ */
+
+/**
+ * Pipeline extern type register
+ *
+ * @param[in] p
+ *   Pipeline handle.
+ * @param[in] name
+ *   Extern type name.
+ * @param[in] mailbox_struct_type_name
+ *   Name of existing struct type used to define the mailbox size and layout for
+ *   the extern objects that are instances of this type. Each extern object gets
+ *   its own mailbox, which is used to pass the input arguments to the member
+ *   functions and retrieve the output results.
+ * @param[in] constructor
+ *   Function used to create the extern objects that are instances of this type.
+ * @param[in] destructor
+ *   Function used to free the extern objects that are instances of  this type.
+ * @return
+ *   0 on success or the following error codes otherwise:
+ *   -EINVAL: Invalid argument;
+ *   -ENOMEM: Not enough space/cannot allocate memory;
+ *   -EEXIST: Extern type with this name already exists.
+ */
+__rte_experimental
+int
+rte_swx_pipeline_extern_type_register(struct rte_swx_pipeline *p,
+	const char *name,
+	const char *mailbox_struct_type_name,
+	rte_swx_extern_type_constructor_t constructor,
+	rte_swx_extern_type_destructor_t destructor);
+
+/**
+ * Pipeline extern type member function register
+ *
+ * @param[in] p
+ *   Pipeline handle.
+ * @param[in] extern_type_name
+ *   Existing extern type name.
+ * @param[in] name
+ *   Name for the new member function to be added to the extern type.
+ * @param[in] member_func
+ *   The new member function.
+ * @return
+ *   0 on success or the following error codes otherwise:
+ *   -EINVAL: Invalid argument;
+ *   -ENOMEM: Not enough space/cannot allocate memory;
+ *   -EEXIST: Member function with this name already exists for this type;
+ *   -ENOSPC: Maximum number of member functions reached for this type.
+ */
+__rte_experimental
+int
+rte_swx_pipeline_extern_type_member_func_register(struct rte_swx_pipeline *p,
+	const char *extern_type_name,
+	const char *name,
+	rte_swx_extern_type_member_func_t member_func);
+
+/**
+ * Pipeline extern object configure
+ *
+ * Instantiate a given extern type to create new extern object.
+ *
+ * @param[in] p
+ *   Pipeline handle.
+ * @param[in] extern_type_name
+ *   Existing extern type name.
+ * @param[in] name
+ *   Name for the new object instantiating the extern type.
+ * @param[in] args
+ *   Extern object constructor arguments.
+ * @return
+ *   0 on success or the following error codes otherwise:
+ *   -EINVAL: Invalid argument;
+ *   -ENOMEM: Not enough space/cannot allocate memory;
+ *   -EEXIST: Extern object with this name already exists;
+ *   -ENODEV: Extern object constructor error.
+ */
+__rte_experimental
+int
+rte_swx_pipeline_extern_object_config(struct rte_swx_pipeline *p,
+				      const char *extern_type_name,
+				      const char *name,
+				      const char *args);
+
+/**
+ * Pipeline extern function register
+ *
+ * @param[in] p
+ *   Pipeline handle.
+ * @param[in] name
+ *   Extern function name.
+ * @param[in] mailbox_struct_type_name
+ *   Name of existing struct type used to define the mailbox size and layout for
+ *   this extern function. The mailbox is used to pass the input arguments to
+ *   the extern function and retrieve the output results.
+ * @param[in] func
+ *   The extern function.
+ * @return
+ *   0 on success or the following error codes otherwise:
+ *   -EINVAL: Invalid argument;
+ *   -ENOMEM: Not enough space/cannot allocate memory;
+ *   -EEXIST: Extern function with this name already exists.
+ */
+__rte_experimental
+int
+rte_swx_pipeline_extern_func_register(struct rte_swx_pipeline *p,
+				      const char *name,
+				      const char *mailbox_struct_type_name,
+				      rte_swx_extern_func_t func);
+
 /*
  * Packet headers and meta-data
  */
-- 
2.17.1


  parent reply	other threads:[~2020-08-26 15:16 UTC|newest]

Thread overview: 329+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-08-26 15:14 [dpdk-dev] [PATCH 00/40] Pipeline alignment with the P4 language Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 01/40] pipeline: add pipeline Cristian Dumitrescu
2020-09-07 21:39   ` [dpdk-dev] [PATCH v2 00/41] Pipeline alignment with the P4 language Cristian Dumitrescu
2020-09-07 21:39     ` [dpdk-dev] [PATCH v2 01/41] pipeline: add new SWX pipeline type Cristian Dumitrescu
2020-09-08 20:17       ` [dpdk-dev] [PATCH v3 00/41] Pipeline alignment with the P4 language Cristian Dumitrescu
2020-09-08 20:17         ` [dpdk-dev] [PATCH v3 01/41] pipeline: add new SWX pipeline type Cristian Dumitrescu
2020-09-09 19:05           ` Stephen Hemminger
2020-09-09 19:52             ` Dumitrescu, Cristian
2020-09-10  8:42               ` Bruce Richardson
2020-09-10 15:26           ` [dpdk-dev] [PATCH v4 00/41] Pipeline alignment with the P4 language Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 01/41] pipeline: add new SWX pipeline type Cristian Dumitrescu
2020-09-23 18:06               ` [dpdk-dev] [PATCH v5 00/41] Pipeline alignment with the P4 language Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 01/41] pipeline: add new SWX pipeline type Cristian Dumitrescu
2020-09-23 18:24                   ` Stephen Hemminger
2020-09-23 18:37                     ` Dumitrescu, Cristian
2020-09-23 20:23                       ` Stephen Hemminger
2020-09-30  6:33                   ` [dpdk-dev] [PATCH v6 00/42] Pipeline alignment with the P4 language Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 01/42] pipeline: add new SWX pipeline type Cristian Dumitrescu
2020-10-01 10:19                       ` [dpdk-dev] [PATCH v7 00/42] Pipeline alignment with the P4 language Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 01/42] pipeline: add new SWX pipeline type Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 02/42] pipeline: add SWX pipeline input port Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 03/42] pipeline: add SWX pipeline output port Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 04/42] pipeline: add SWX headers and meta-data Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 05/42] pipeline: add SWX extern objects and funcs Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 06/42] pipeline: add SWX pipeline action Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 07/42] pipeline: add SWX pipeline tables Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 08/42] pipeline: add SWX pipeline instructions Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 09/42] pipeline: add SWX Rx and extract instructions Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 10/42] pipeline: add SWX Tx and emit instructions Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 11/42] pipeline: add header validate and invalidate SWX instructions Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 12/42] pipeline: add SWX move instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 13/42] pipeline: add SWX DMA instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 14/42] pipeline: introduce SWX add instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 15/42] pipeline: introduce SWX subtract instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 16/42] pipeline: introduce SWX ckadd instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 17/42] pipeline: introduce SWX cksub instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 18/42] pipeline: introduce SWX and instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 19/42] pipeline: introduce SWX or instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 20/42] pipeline: introduce SWX XOR instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 21/42] pipeline: introduce SWX SHL instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 22/42] pipeline: introduce SWX SHR instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 23/42] pipeline: introduce SWX table instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 24/42] pipeline: introduce SWX extern instruction Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 25/42] pipeline: introduce SWX jump and return instructions Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 26/42] pipeline: add SWX instruction description Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 27/42] pipeline: add SWX instruction verifier Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 28/42] pipeline: add SWX instruction optimizer Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 29/42] pipeline: add SWX pipeline query API Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 30/42] pipeline: add SWX pipeline flush Cristian Dumitrescu
2020-10-01 10:19                         ` [dpdk-dev] [PATCH v7 31/42] pipeline: add SWX table update high level API Cristian Dumitrescu
2020-10-01 12:03                           ` David Marchand
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 32/42] pipeline: add SWX pipeline specification file Cristian Dumitrescu
2020-10-04  7:50                           ` Raslan Darawsheh
2020-10-04  9:01                             ` David Marchand
2020-10-04 10:47                               ` Raslan Darawsheh
2020-10-04 18:28                             ` Dumitrescu, Cristian
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 33/42] port: add ethernet device SWX port Cristian Dumitrescu
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 34/42] port: add source and sink SWX ports Cristian Dumitrescu
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 35/42] table: add exact match SWX table Cristian Dumitrescu
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 36/42] examples/pipeline: add new example application Cristian Dumitrescu
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 37/42] examples/pipeline: add message passing mechanism Cristian Dumitrescu
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 38/42] examples/pipeline: add configuration commands Cristian Dumitrescu
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 39/42] examples/pipeline: add l2fwd example Cristian Dumitrescu
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 40/42] examples/pipeline: add l2fwd with MAC swap example Cristian Dumitrescu
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 41/42] examples/pipeline: add VXLAN encapsulation example Cristian Dumitrescu
2020-10-01 10:20                         ` [dpdk-dev] [PATCH v7 42/42] doc: add new SWX pipeline type to release notes Cristian Dumitrescu
2020-10-01 17:15                         ` [dpdk-dev] [PATCH v7 00/42] Pipeline alignment with the P4 language David Marchand
2020-10-01 17:22                           ` Dumitrescu, Cristian
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 02/42] pipeline: add SWX pipeline input port Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 03/42] pipeline: add SWX pipeline output port Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 04/42] pipeline: add SWX headers and meta-data Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 05/42] pipeline: add SWX extern objects and funcs Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 06/42] pipeline: add SWX pipeline action Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 07/42] pipeline: add SWX pipeline tables Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 08/42] pipeline: add SWX pipeline instructions Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 09/42] pipeline: add SWX Rx and extract instructions Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 10/42] pipeline: add SWX Tx and emit instructions Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 11/42] pipeline: add header validate and invalidate SWX instructions Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 12/42] pipeline: add SWX move instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 13/42] pipeline: add SWX DMA instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 14/42] pipeline: introduce SWX add instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 15/42] pipeline: introduce SWX subtract instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 16/42] pipeline: introduce SWX ckadd instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 17/42] pipeline: introduce SWX cksub instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 18/42] pipeline: introduce SWX and instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 19/42] pipeline: introduce SWX or instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 20/42] pipeline: introduce SWX XOR instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 21/42] pipeline: introduce SWX SHL instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 22/42] pipeline: introduce SWX SHR instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 23/42] pipeline: introduce SWX table instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 24/42] pipeline: introduce SWX extern instruction Cristian Dumitrescu
2020-09-30  6:33                     ` [dpdk-dev] [PATCH v6 25/42] pipeline: introduce SWX jump and return instructions Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 26/42] pipeline: add SWX instruction description Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 27/42] pipeline: add SWX instruction verifier Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 28/42] pipeline: add SWX instruction optimizer Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 29/42] pipeline: add SWX pipeline query API Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 30/42] pipeline: add SWX pipeline flush Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 31/42] pipeline: add SWX table update high level API Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 32/42] pipeline: add SWX pipeline specification file Cristian Dumitrescu
2020-10-04  7:48                       ` Raslan Darawsheh
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 33/42] port: add ethernet device SWX port Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 34/42] port: add source and sink SWX ports Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 35/42] table: add exact match SWX table Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 36/42] examples/pipeline: add new example application Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 37/42] examples/pipeline: add message passing mechanism Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 38/42] examples/pipeline: add configuration commands Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 39/42] examples/pipeline: add l2fwd example Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 40/42] examples/pipeline: add l2fwd with MAC swap example Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 41/42] examples/pipeline: add VXLAN encapsulation example Cristian Dumitrescu
2020-09-30  6:34                     ` [dpdk-dev] [PATCH v6 42/42] doc: add new SWX pipeline type to release notes Cristian Dumitrescu
2020-09-30 19:34                     ` [dpdk-dev] [PATCH v6 00/42] Pipeline alignment with the P4 language David Marchand
2020-10-01 10:45                       ` Dumitrescu, Cristian
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 02/41] pipeline: add SWX pipeline input port Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 03/41] pipeline: add SWX pipeline output port Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 04/41] pipeline: add SWX headers and meta-data Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 05/41] pipeline: add SWX extern objects and funcs Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 06/41] pipeline: add SWX pipeline action Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 07/41] pipeline: add SWX pipeline tables Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 08/41] pipeline: add SWX pipeline instructions Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 09/41] pipeline: add SWX Rx and extract instructions Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 10/41] pipeline: add SWX Tx and emit instructions Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 11/41] pipeline: add header validate and invalidate SWX instructions Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 12/41] pipeline: add SWX move instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 13/41] pipeline: add SWX DMA instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 14/41] pipeline: introduce SWX add instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 15/41] pipeline: introduce SWX subtract instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 16/41] pipeline: introduce SWX ckadd instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 17/41] pipeline: introduce SWX cksub instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 18/41] pipeline: introduce SWX and instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 19/41] pipeline: introduce SWX or instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 20/41] pipeline: introduce SWX XOR instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 21/41] pipeline: introduce SWX SHL instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 22/41] pipeline: introduce SWX SHR instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 23/41] pipeline: introduce SWX table instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 24/41] pipeline: introduce SWX extern instruction Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 25/41] pipeline: introduce SWX jump and return instructions Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 26/41] pipeline: add SWX instruction description Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 27/41] pipeline: add SWX instruction verifier Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 28/41] pipeline: add SWX instruction optimizer Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 29/41] pipeline: add SWX pipeline query API Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 30/41] pipeline: add SWX pipeline flush Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 31/41] pipeline: add SWX table update high level API Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 32/41] pipeline: add SWX pipeline specification file Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 33/41] port: add ethernet device SWX port Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 34/41] port: add source and sink SWX ports Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 35/41] table: add exact match SWX table Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 36/41] examples/pipeline: add new example application Cristian Dumitrescu
2020-09-23 18:26                   ` Stephen Hemminger
2020-09-23 18:30                     ` Dumitrescu, Cristian
2020-09-29 13:51                   ` David Marchand
2020-09-30  6:50                     ` Dumitrescu, Cristian
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 37/41] examples/pipeline: add message passing mechanism Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 38/41] examples/pipeline: add configuration commands Cristian Dumitrescu
2020-09-29 13:51                   ` David Marchand
2020-09-30  6:50                     ` Dumitrescu, Cristian
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 39/41] examples/pipeline: add l2fwd example Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 40/41] examples/pipeline: add l2fwd with MAC swap example Cristian Dumitrescu
2020-09-23 18:06                 ` [dpdk-dev] [PATCH v5 41/41] examples/pipeline: add VXLAN encapsulation example Cristian Dumitrescu
2020-09-29 14:08                 ` [dpdk-dev] [PATCH v5 00/41] Pipeline alignment with the P4 language David Marchand
2020-09-30  6:50                   ` Dumitrescu, Cristian
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 02/41] pipeline: add SWX pipeline input port Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 03/41] pipeline: add SWX pipeline output port Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 04/41] pipeline: add SWX headers and meta-data Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 05/41] pipeline: add SWX extern objects and funcs Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 06/41] pipeline: add SWX pipeline action Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 07/41] pipeline: add SWX pipeline tables Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 08/41] pipeline: add SWX pipeline instructions Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 09/41] pipeline: add SWX rx and extract instructions Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 10/41] pipeline: add SWX tx and emit instructions Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 11/41] pipeline: add header validate and invalidate SWX instructions Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 12/41] pipeline: add SWX mov instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 13/41] pipeline: add SWX dma instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 14/41] pipeline: introduce SWX add instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 15/41] pipeline: introduce SWX sub instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 16/41] pipeline: introduce SWX ckadd instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 17/41] pipeline: introduce SWX cksub instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 18/41] pipeline: introduce SWX and instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 19/41] pipeline: introduce SWX or instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 20/41] pipeline: introduce SWX xor instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 21/41] pipeline: introduce SWX shl instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 22/41] pipeline: introduce SWX shr instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 23/41] pipeline: introduce SWX table instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 24/41] pipeline: introduce SWX extern instruction Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 25/41] pipeline: introduce SWX jmp and return instructions Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 26/41] pipeline: add SWX instruction description Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 27/41] pipeline: add SWX instruction verifier Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 28/41] pipeline: add SWX instruction optimizer Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 29/41] pipeline: add SWX pipeline query API Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 30/41] pipeline: add SWX pipeline flush Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 31/41] pipeline: add SWX table update high level API Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 32/41] pipeline: add SWX pipeline specification file Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 33/41] port: add ethernet device SWX port Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 34/41] port: add source and sink SWX ports Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 35/41] table: add exact match SWX table Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 36/41] examples/pipeline: add new example application Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 37/41] examples/pipeline: add message passing mechanism Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 38/41] examples/pipeline: add configuration commands Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 39/41] examples/pipeline: add l2fwd example Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 40/41] examples/pipeline: add l2fwd with MAC swap example Cristian Dumitrescu
2020-09-10 15:26             ` [dpdk-dev] [PATCH v4 41/41] examples/pipeline: add VXLAN encapsulation example Cristian Dumitrescu
2020-09-22 20:05             ` [dpdk-dev] [PATCH v4 00/41] Pipeline alignment with the P4 language Wang, Han2
2020-09-22 20:08               ` Dumitrescu, Cristian
2020-09-23 11:45             ` David Marchand
2020-09-23 16:07               ` Dumitrescu, Cristian
2020-09-23 16:28                 ` David Marchand
2020-09-23 16:40                   ` Thomas Monjalon
2020-09-23 16:49                     ` Dumitrescu, Cristian
2020-09-23 19:02                       ` Dumitrescu, Cristian
2020-09-08 20:17         ` [dpdk-dev] [PATCH v3 02/41] pipeline: add SWX pipeline input port Cristian Dumitrescu
2020-09-08 20:17         ` [dpdk-dev] [PATCH v3 03/41] pipeline: add SWX pipeline output port Cristian Dumitrescu
2020-09-08 20:17         ` [dpdk-dev] [PATCH v3 04/41] pipeline: add SWX headers and meta-data Cristian Dumitrescu
2020-09-08 20:17         ` [dpdk-dev] [PATCH v3 05/41] pipeline: add SWX extern objects and funcs Cristian Dumitrescu
2020-09-08 20:17         ` [dpdk-dev] [PATCH v3 06/41] pipeline: add SWX pipeline action Cristian Dumitrescu
2020-09-08 20:17         ` [dpdk-dev] [PATCH v3 07/41] pipeline: add SWX pipeline tables Cristian Dumitrescu
2020-09-08 20:17         ` [dpdk-dev] [PATCH v3 08/41] pipeline: add SWX pipeline instructions Cristian Dumitrescu
2020-09-08 20:17         ` [dpdk-dev] [PATCH v3 09/41] pipeline: add SWX rx and extract instructions Cristian Dumitrescu
2020-09-08 20:17         ` [dpdk-dev] [PATCH v3 10/41] pipeline: add SWX tx and emit instructions Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 11/41] pipeline: add header validate and invalidate SWX instructions Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 12/41] pipeline: add SWX mov instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 13/41] pipeline: add SWX dma instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 14/41] pipeline: introduce SWX add instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 15/41] pipeline: introduce SWX sub instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 16/41] pipeline: introduce SWX ckadd instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 17/41] pipeline: introduce SWX cksub instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 18/41] pipeline: introduce SWX and instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 19/41] pipeline: introduce SWX or instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 20/41] pipeline: introduce SWX xor instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 21/41] pipeline: introduce SWX shl instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 22/41] pipeline: introduce SWX shr instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 23/41] pipeline: introduce SWX table instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 24/41] pipeline: introduce SWX extern instruction Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 25/41] pipeline: introduce SWX jmp and return instructions Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 26/41] pipeline: add SWX instruction description Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 27/41] pipeline: add SWX instruction verifier Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 28/41] pipeline: add SWX instruction optimizer Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 29/41] pipeline: add SWX pipeline query API Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 30/41] pipeline: add SWX pipeline flush Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 31/41] pipeline: add SWX table update high level API Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 32/41] pipeline: add SWX pipeline specification file Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 33/41] port: add ethernet device SWX port Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 34/41] port: add source and sink SWX ports Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 35/41] table: add exact match SWX table Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 36/41] examples/pipeline: add new example application Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 37/41] examples/pipeline: add message passing mechanism Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 38/41] examples/pipeline: add configuration commands Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 39/41] examples/pipeline: add l2fwd example Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 40/41] examples/pipeline: add l2fwd with MAC swap example Cristian Dumitrescu
2020-09-08 20:18         ` [dpdk-dev] [PATCH v3 41/41] examples/pipeline: add VXLAN encapsulation example Cristian Dumitrescu
2020-09-07 21:39     ` [dpdk-dev] [PATCH v2 02/41] pipeline: add SWX pipeline input port Cristian Dumitrescu
2020-09-07 21:39     ` [dpdk-dev] [PATCH v2 03/41] pipeline: add SWX pipeline output port Cristian Dumitrescu
2020-09-07 21:39     ` [dpdk-dev] [PATCH v2 04/41] pipeline: add SWX headers and meta-data Cristian Dumitrescu
2020-09-07 21:39     ` [dpdk-dev] [PATCH v2 05/41] pipeline: add SWX extern objects and funcs Cristian Dumitrescu
2020-09-07 21:39     ` [dpdk-dev] [PATCH v2 06/41] pipeline: add SWX pipeline action Cristian Dumitrescu
2020-09-07 21:39     ` [dpdk-dev] [PATCH v2 07/41] pipeline: add SWX pipeline tables Cristian Dumitrescu
2020-09-07 21:39     ` [dpdk-dev] [PATCH v2 08/41] pipeline: add SWX pipeline instructions Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 09/41] pipeline: add SWX rx and extract instructions Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 10/41] pipeline: add SWX tx and emit instructions Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 11/41] pipeline: add header validate and invalidate SWX instructions Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 12/41] pipeline: add SWX mov instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 13/41] pipeline: add SWX dma instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 14/41] pipeline: introduce SWX add instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 15/41] pipeline: introduce SWX sub instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 16/41] pipeline: introduce SWX ckadd instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 17/41] pipeline: introduce SWX cksub instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 18/41] pipeline: introduce SWX and instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 19/41] pipeline: introduce SWX or instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 20/41] pipeline: introduce SWX xor instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 21/41] pipeline: introduce SWX shl instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 22/41] pipeline: introduce SWX shr instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 23/41] pipeline: introduce SWX table instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 24/41] pipeline: introduce SWX extern instruction Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 25/41] pipeline: introduce SWX jmp and return instructions Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 26/41] pipeline: add SWX instruction description Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 27/41] pipeline: add SWX instruction verifier Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 28/41] pipeline: add SWX instruction optimizer Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 29/41] pipeline: add SWX pipeline query API Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 30/41] pipeline: add SWX pipeline flush Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 31/41] pipeline: add SWX table update high level API Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 32/41] pipeline: add SWX pipeline specification file Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 33/41] port: add ethernet device SWX port Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 34/41] port: add source and sink SWX ports Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 35/41] table: add exact match SWX table Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 36/41] examples/pipeline: add new example application Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 37/41] examples/pipeline: add message passing mechanism Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 38/41] examples/pipeline: add configuration commands Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 39/41] examples/pipeline: add l2fwd example Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 40/41] examples/pipeline: add l2fwd with MAC swap example Cristian Dumitrescu
2020-09-07 21:40     ` [dpdk-dev] [PATCH v2 41/41] examples/pipeline: add VXLAN encapsulation example Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 02/40] pipeline: add input port Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 03/40] pipeline: add output port Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 04/40] pipeline: add headers and meta-data Cristian Dumitrescu
2020-08-26 15:14 ` Cristian Dumitrescu [this message]
2020-08-26 15:14 ` [dpdk-dev] [PATCH 06/40] pipeline: add action Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 07/40] pipeline: add tables Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 08/40] pipeline: add pipeline instructions Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 09/40] pipeline: add rx and extract instructions Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 10/40] pipeline: add tx and emit instructions Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 11/40] pipeline: add header validate and invalidate instructions Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 12/40] pipeline: add mov instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 13/40] pipeline: add dma instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 14/40] pipeline: introduce add instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 15/40] pipeline: introduce sub instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 16/40] pipeline: introduce ckadd instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 17/40] pipeline: introduce cksub instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 18/40] pipeline: introduce and instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 19/40] pipeline: introduce or instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 20/40] pipeline: introduce xor instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 21/40] pipeline: introduce shl instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 22/40] pipeline: introduce shr instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 23/40] pipeline: introduce table instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 24/40] pipeline: introduce extern instruction Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 25/40] pipeline: introduce jmp and return instructions Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 26/40] pipeline: add instruction verifier Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 27/40] pipeline: add instruction optimizer Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 28/40] pipeline: add pipeline query API Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 29/40] pipeline: add pipeline flush Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 30/40] pipeline: add instruction description Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 31/40] pipeline: add table update high level API Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 32/40] port: add ethernet device port Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 33/40] port: add source and sink ports Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 34/40] table: add exact match table Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 35/40] examples/pipeline: add new example application Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 36/40] examples/pipeline: add message passing mechanism Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 37/40] examples/pipeline: add configuration commands Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 38/40] examples/pipeline: add l2fwd example Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 39/40] examples/pipeline: add l2fwd with MAC swap example Cristian Dumitrescu
2020-08-26 15:14 ` [dpdk-dev] [PATCH 40/40] examples/pipeline: add VXLAN encap example Cristian Dumitrescu
2020-08-26 17:05   ` Stephen Hemminger
2020-09-07 21:49     ` Dumitrescu, Cristian

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200826151445.51500-6-cristian.dumitrescu@intel.com \
    --to=cristian.dumitrescu@intel.com \
    --cc=dev@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.