Signed-off-by: Bogdan Pricope <[email protected]>
---
example/Makefile.am | 4 +-
example/ddf_app/Makefile.am | 10 ++++
example/ddf_app/odp_ddf_app.c | 49 +++++++++++++++++++
example/ddf_ifs/Makefile.am | 26 ++++++++++
example/ddf_ifs/ddf_ifs.c | 28 +++++++++++
example/ddf_ifs/ddf_ifs.h | 18 +++++++
example/ddf_ifs/ddf_ifs_api.h | 25 ++++++++++
example/ddf_ifs/ddf_ifs_dev_dpdk.c | 25 ++++++++++
example/ddf_ifs/ddf_ifs_dev_dpdk.h | 24 +++++++++
example/ddf_ifs/ddf_ifs_devio_direct.c | 51 +++++++++++++++++++
example/ddf_ifs/ddf_ifs_devio_direct.h | 20 ++++++++
example/ddf_ifs/ddf_ifs_driver.c | 69 ++++++++++++++++++++++++++
example/ddf_ifs/ddf_ifs_driver.h | 20 ++++++++
example/ddf_ifs/ddf_ifs_enumr_class.c | 47 ++++++++++++++++++
example/ddf_ifs/ddf_ifs_enumr_class.h | 20 ++++++++
example/ddf_ifs/ddf_ifs_enumr_dpdk.c | 86 +++++++++++++++++++++++++++++++++
example/ddf_ifs/ddf_ifs_enumr_dpdk.h | 20 ++++++++
example/ddf_ifs/ddf_ifs_enumr_generic.c | 57 ++++++++++++++++++++++
example/ddf_ifs/ddf_ifs_enumr_generic.h | 20 ++++++++
example/ddf_ifs/odp.conf | 4 ++
example/m4/configure.m4 | 2 +
21 files changed, 624 insertions(+), 1 deletion(-)
create mode 100644 example/ddf_app/Makefile.am
create mode 100644 example/ddf_app/odp_ddf_app.c
create mode 100644 example/ddf_ifs/Makefile.am
create mode 100644 example/ddf_ifs/ddf_ifs.c
create mode 100644 example/ddf_ifs/ddf_ifs.h
create mode 100644 example/ddf_ifs/ddf_ifs_api.h
create mode 100644 example/ddf_ifs/ddf_ifs_dev_dpdk.c
create mode 100644 example/ddf_ifs/ddf_ifs_dev_dpdk.h
create mode 100644 example/ddf_ifs/ddf_ifs_devio_direct.c
create mode 100644 example/ddf_ifs/ddf_ifs_devio_direct.h
create mode 100644 example/ddf_ifs/ddf_ifs_driver.c
create mode 100644 example/ddf_ifs/ddf_ifs_driver.h
create mode 100644 example/ddf_ifs/ddf_ifs_enumr_class.c
create mode 100644 example/ddf_ifs/ddf_ifs_enumr_class.h
create mode 100644 example/ddf_ifs/ddf_ifs_enumr_dpdk.c
create mode 100644 example/ddf_ifs/ddf_ifs_enumr_dpdk.h
create mode 100644 example/ddf_ifs/ddf_ifs_enumr_generic.c
create mode 100644 example/ddf_ifs/ddf_ifs_enumr_generic.h
create mode 100644 example/ddf_ifs/odp.conf
diff --git a/example/Makefile.am b/example/Makefile.am
index dfc07b6..b209585 100644
--- a/example/Makefile.am
+++ b/example/Makefile.am
@@ -8,4 +8,6 @@ SUBDIRS = classifier \
switch \
time \
timer \
- traffic_mgmt
+ traffic_mgmt \
+ ddf_ifs \
+ ddf_app
diff --git a/example/ddf_app/Makefile.am b/example/ddf_app/Makefile.am
new file mode 100644
index 0000000..e654202
--- /dev/null
+++ b/example/ddf_app/Makefile.am
@@ -0,0 +1,10 @@
+include $(top_srcdir)/example/Makefile.inc
+
+bin_PROGRAMS = odp_ddf_app$(EXEEXT)
+odp_ddf_app_LDFLAGS = $(AM_LDFLAGS) -shared
+odp_ddf_app_CFLAGS = $(AM_CFLAGS) -I${top_srcdir}/example
+
+noinst_HEADERS = \
+ $(top_srcdir)/example/example_debug.h
+
+dist_odp_ddf_app_SOURCES = odp_ddf_app.c
diff --git a/example/ddf_app/odp_ddf_app.c b/example/ddf_app/odp_ddf_app.c
new file mode 100644
index 0000000..c2d7abf
--- /dev/null
+++ b/example/ddf_app/odp_ddf_app.c
@@ -0,0 +1,49 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+/** enable strtok */
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+
+#include <example_debug.h>
+#include <odp_api.h>
+#include <odp_drv.h>
+#include <odp/helper/odph_api.h>
+
+int main(int argc, char *argv[])
+{
+ odp_instance_t instance;
+
+ (void)argc;
+ (void)argv;
+
+ EXAMPLE_DBG("Start DDF Application...\n");
+
+ /* Initialize ODP before calling anything else */
+ if (odp_init_global(&instance, NULL, NULL)) {
+ EXAMPLE_ERR("Error: ODP global init failed.\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if (odp_init_local(instance, ODP_THREAD_CONTROL)) {
+ EXAMPLE_ERR("Error: ODP local init failed.\n");
+ exit(EXIT_FAILURE);
+ }
+
+ /* Print ddf objects*/
+ odpdrv_print_all();
+
+ /* Terminate ODP */
+ odp_term_local();
+ odp_term_global(instance);
+
+ EXAMPLE_DBG("Exit DDF Application.\n");
+ return 0;
+}
diff --git a/example/ddf_ifs/Makefile.am b/example/ddf_ifs/Makefile.am
new file mode 100644
index 0000000..b11cf3d
--- /dev/null
+++ b/example/ddf_ifs/Makefile.am
@@ -0,0 +1,26 @@
+LIB = $(top_builddir)/lib
+
+AM_CPPFLAGS += -I$(srcdir) \
+ -I$(top_srcdir)/include \
+ -I$(top_srcdir)/platform/@with_platform@/include \
+ -I$(top_srcdir)/platform/@with_platform@/arch/@ARCH_DIR@
+
+lib_LTLIBRARIES = $(LIB)/libddf_ifs.la
+
+noinst_HEADERS = \
+ $(srcdir)/ddf_ifs.h \
+ $(srcdir)/ddf_ifs_enumr_class.h \
+ $(srcdir)/ddf_ifs_enumr_dpdk.h \
+ $(srcdir)/ddf_ifs_enumr_generic.h \
+ $(srcdir)/ddf_ifs_dev_dpdk.h \
+ $(srcdir)/ddf_ifs_devio_direct.h \
+ $(srcdir)/ddf_ifs_driver.h
+
+__LIB__libddf_ifs_la_SOURCES = \
+ ddf_ifs.c \
+ ddf_ifs_enumr_class.c \
+ ddf_ifs_enumr_dpdk.c \
+ ddf_ifs_enumr_generic.c \
+ ddf_ifs_dev_dpdk.c \
+ ddf_ifs_devio_direct.c \
+ ddf_ifs_driver.c
diff --git a/example/ddf_ifs/ddf_ifs.c b/example/ddf_ifs/ddf_ifs.c
new file mode 100644
index 0000000..cd4e48b
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs.c
@@ -0,0 +1,28 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include "odp_drv.h"
+#include "ddf_ifs.h"
+#include "ddf_ifs_enumr_class.h"
+#include "ddf_ifs_devio_direct.h"
+#include "ddf_ifs_driver.h"
+
+static ODPDRV_CONSTRUCTOR void ddf_ifs_construct(void)
+{
+ printf("%s()\n", __func__);
+
+ register_enumerator_class();
+
+ register_devio_direct();
+
+ register_driver();
+}
+
+static __attribute__((destructor)) void ddf_ifs_destruct(void)
+{
+ printf("%s()\n", __func__);
+}
diff --git a/example/ddf_ifs/ddf_ifs.h b/example/ddf_ifs/ddf_ifs.h
new file mode 100644
index 0000000..980b520
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs.h
@@ -0,0 +1,18 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_H_
+#define _ODP_DDF_IFS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_api.h b/example/ddf_ifs/ddf_ifs_api.h
new file mode 100644
index 0000000..757658e
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_api.h
@@ -0,0 +1,25 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_API_H_
+#define _ODP_DDF_IFS_API_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define DDF_IFS_DEV_API_NAME "ifs_api"
+#define DDF_IFS_DEV_API_VER 0
+#define DDF_IFS_DEVIO_API_NAME "devio_api"
+#define DDF_IFS_DEVIO_API_VER 0
+
+#define DDF_IFS_DRV_NAME "ddf_ifs_drv"
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_API_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_dev_dpdk.c
b/example/ddf_ifs/ddf_ifs_dev_dpdk.c
new file mode 100644
index 0000000..d66a15c
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_dev_dpdk.c
@@ -0,0 +1,25 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "odp_drv.h"
+#include "ddf_ifs_dev_dpdk.h"
+
+odpdrv_device_t dpdk_device_create(odpdrv_enumr_t enumr,
+ const char *dev_addr,
+ void *enum_data)
+{
+ odpdrv_device_param_t param;
+
+ printf("\t%s(%s)\n", __func__, dev_addr);
+
+ param.enumerator = enumr;
+ strcpy(param.address, dev_addr);
+ param.enum_dev = enum_data;
+
+ return odpdrv_device_create(¶m);
+}
diff --git a/example/ddf_ifs/ddf_ifs_dev_dpdk.h
b/example/ddf_ifs/ddf_ifs_dev_dpdk.h
new file mode 100644
index 0000000..2a81f6a
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_dev_dpdk.h
@@ -0,0 +1,24 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_DEV_DPDK_H_
+#define _ODP_DDF_IFS_DEV_DPDK_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "odp_drv.h"
+
+odpdrv_device_t dpdk_device_create(odpdrv_enumr_t enumr,
+ const char *dev_addr,
+ void *enum_data);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_DEV_DPDK_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_devio_direct.c
b/example/ddf_ifs/ddf_ifs_devio_direct.c
new file mode 100644
index 0000000..ea508a0
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_devio_direct.c
@@ -0,0 +1,51 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include "odp_drv.h"
+#include "ddf_ifs_api.h"
+#include "ddf_ifs_devio_direct.h"
+
+static odpdrv_devio_t devio_direct;
+
+static int devio_direct_probe(odpdrv_device_t dev)
+{
+ (void)dev;
+
+ printf("%s()\n", __func__);
+
+ return 0;
+}
+
+static int devio_direct_remove(void)
+{
+ printf("%s()\n", __func__);
+
+ return 0;
+}
+
+int register_devio_direct(void)
+{
+ odpdrv_devio_param_t param = {
+ .api_name = DDF_IFS_DEVIO_API_NAME,
+ .api_version = DDF_IFS_DEVIO_API_VER,
+ .enumr_api_name = DDF_IFS_DEV_API_NAME,
+ .enumr_api_version = DDF_IFS_DEV_API_VER,
+ .probe = devio_direct_probe,
+ .remove = devio_direct_remove,
+ .ops = NULL
+ };
+
+ printf("\t%s()\n", __func__);
+
+ devio_direct = odpdrv_devio_register(¶m);
+ if (ODPDRV_DEVIO_INVALID == devio_direct) {
+ printf("\tError: failed to %s()\n", __func__);
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/example/ddf_ifs/ddf_ifs_devio_direct.h
b/example/ddf_ifs/ddf_ifs_devio_direct.h
new file mode 100644
index 0000000..28c549d
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_devio_direct.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_DEVIO_DIRECT_H_
+#define _ODP_DDF_IFS_DEVIO_DIRECT_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int register_devio_direct(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_DEVIO_DIRECT_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_driver.c b/example/ddf_ifs/ddf_ifs_driver.c
new file mode 100644
index 0000000..2dc5870
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_driver.c
@@ -0,0 +1,69 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "odp_drv.h"
+#include "ddf_ifs_api.h"
+#include "ddf_ifs_driver.h"
+
+static odpdrv_driver_t ddf_ifs_driver;
+static int drv_data = 12;
+
+static int ddf_ifs_driver_probe(odpdrv_device_t dev, odpdrv_devio_t devio,
+ int devio_idx)
+{
+ printf("%s(dev, devio, devio_idx = %d)\n", __func__, devio_idx);
+
+ (void)devio;
+
+ odpdrv_device_set_data(dev, (void *)&drv_data);
+
+ return 0;
+}
+
+static int ddf_ifs_driver_unbind(odpdrv_device_t dev,
+ void (*callback)(odpdrv_device_t dev),
+ uint32_t flags)
+{
+ printf("%s()\n", __func__);
+
+ if (!(flags & ODPDRV_DRV_UNBIND_IMMEDIATE))
+ return -1; /* unsupported*/
+
+ callback(dev);
+
+ return 0;
+}
+
+static int ddf_ifs_driver_remove(void)
+{
+ printf("%s()\n", __func__);
+
+ return 0;
+}
+
+int register_driver(void)
+{
+ odpdrv_driver_param_t param = {
+ .name = DDF_IFS_DRV_NAME,
+ .devios = {{DDF_IFS_DEVIO_API_NAME, DDF_IFS_DEVIO_API_VER},
+ {"", 0}, {"", 0} },
+ .probe = ddf_ifs_driver_probe,
+ .unbind = ddf_ifs_driver_unbind,
+ .remove = ddf_ifs_driver_remove,
+ };
+
+ printf("\t%s()\n", __func__);
+
+ ddf_ifs_driver = odpdrv_driver_register(¶m);
+ if (ODPDRV_DRIVER_INVALID == ddf_ifs_driver) {
+ printf("Error: Failed to %s()\n", __func__);
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/example/ddf_ifs/ddf_ifs_driver.h b/example/ddf_ifs/ddf_ifs_driver.h
new file mode 100644
index 0000000..4954c5a
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_driver.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_DRIVER_H_
+#define _ODP_DDF_IFS_DRIVER_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int register_driver(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_DRIVER_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_enumr_class.c
b/example/ddf_ifs/ddf_ifs_enumr_class.c
new file mode 100644
index 0000000..a7b5d51
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_class.c
@@ -0,0 +1,47 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include "odp_drv.h"
+#include "ddf_ifs_enumr_class.h"
+#include "ddf_ifs_enumr_dpdk.h"
+#include "ddf_ifs_enumr_generic.h"
+
+static odpdrv_enumr_class_t enumr_class;
+
+static int enumr_class_ifs_probe(void)
+{
+ printf("%s()\n", __func__);
+
+ if (register_enumerator_dpdk(enumr_class))
+ return -1;
+
+ if (register_enumerator_generic(enumr_class))
+ return -1;
+
+ return 0;
+}
+
+static int enumr_class_ifs_remove(void)
+{
+ printf("%s()\n", __func__);
+
+ return 0;
+}
+
+int register_enumerator_class(void)
+{
+ odpdrv_enumr_class_param_t param = {
+ .name = "enumr_class_ifs",
+ .probe = enumr_class_ifs_probe,
+ .remove = enumr_class_ifs_remove
+ };
+
+ printf("\t%s()\n", __func__);
+ enumr_class = odpdrv_enumr_class_register(¶m);
+
+ return 0;
+}
diff --git a/example/ddf_ifs/ddf_ifs_enumr_class.h
b/example/ddf_ifs/ddf_ifs_enumr_class.h
new file mode 100644
index 0000000..42c02fc
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_class.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_ENUMR_CLASS_H_
+#define _ODP_DDF_IFS_ENUMR_CLASS_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int register_enumerator_class(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_ENUMR_CLASS_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_enumr_dpdk.c
b/example/ddf_ifs/ddf_ifs_enumr_dpdk.c
new file mode 100644
index 0000000..cc97e36
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_dpdk.c
@@ -0,0 +1,86 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include "odp_drv.h"
+#include "ddf_ifs_api.h"
+#include "ddf_ifs_enumr_dpdk.h"
+#include "ddf_ifs_dev_dpdk.h"
+
+static odpdrv_enumr_t dpdk_enumr;
+
+#define TEST_DPDK_DEV_CNT 3
+#define DDF_DPDK_DEV_MAX 10
+
+static odpdrv_device_t dpdk_dev[DDF_DPDK_DEV_MAX];
+static int dpdk_dev_cnt;
+static int dpdk_enumr_probe(void)
+{
+ int dpdk_dev_cnt_detected = TEST_DPDK_DEV_CNT; /* detected with
+ dpdk APIs*/
+ char dev_addr[ODPDRV_NAME_ADDR_SZ];
+ int i;
+
+ printf("%s() - %d devices found\n", __func__, dpdk_dev_cnt_detected);
+
+ if (dpdk_dev_cnt_detected > DDF_DPDK_DEV_MAX) {
+ dpdk_dev_cnt_detected = DDF_DPDK_DEV_MAX;
+ printf("\tWarning: dpdk device count scaled down to %d\n",
+ dpdk_dev_cnt_detected);
+ }
+ for (i = 0; i < dpdk_dev_cnt_detected; i++) {
+ sprintf(dev_addr, "0000:01:00.%d", i);
+ dpdk_dev[dpdk_dev_cnt] = dpdk_device_create(dpdk_enumr,
+ dev_addr,
+ NULL);
+ if (dpdk_dev[dpdk_dev_cnt] == ODPDRV_DEVICE_INVALID)
+ printf("\tError: unable to create device: %s\n",
+ dev_addr);
+ else
+ dpdk_dev_cnt++;
+ }
+
+ return 0;
+}
+
+static int dpdk_enumr_remove(void)
+{
+ printf("%s()\n", __func__);
+ return 0;
+}
+
+static int dpdk_enumr_register_notif(void (*event_handler) (uint64_t event),
+ int64_t event_mask)
+{
+ (void)event_handler;
+ (void)event_mask;
+
+ printf("%s()\n", __func__);
+
+ return 0;
+}
+
+int register_enumerator_dpdk(odpdrv_enumr_class_t enumr_class)
+{
+ struct odpdrv_enumr_param_t param = {
+ .enumr_class = enumr_class,
+ .api_name = DDF_IFS_DEV_API_NAME,
+ .api_version = DDF_IFS_DEV_API_VER,
+ .probe = dpdk_enumr_probe,
+ .remove = dpdk_enumr_remove,
+ .register_notifier = dpdk_enumr_register_notif
+ };
+
+ printf("\t%s()\n", __func__);
+
+ dpdk_enumr = odpdrv_enumr_register(¶m);
+ if (ODPDRV_ENUMR_INVALID == dpdk_enumr) {
+ printf("\tError: failed to register_enumerator_dpdk()\n");
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/example/ddf_ifs/ddf_ifs_enumr_dpdk.h
b/example/ddf_ifs/ddf_ifs_enumr_dpdk.h
new file mode 100644
index 0000000..516d9e3
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_dpdk.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_ENUMR_DPDK_H_
+#define _ODP_DDF_IFS_ENUMR_DPDK_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int register_enumerator_dpdk(odpdrv_enumr_class_t enumr_class);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_ENUMR_DPDK_H_*/
diff --git a/example/ddf_ifs/ddf_ifs_enumr_generic.c
b/example/ddf_ifs/ddf_ifs_enumr_generic.c
new file mode 100644
index 0000000..34a59a8
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_generic.c
@@ -0,0 +1,57 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <stdio.h>
+#include "odp_drv.h"
+#include "ddf_ifs_api.h"
+#include "ddf_ifs_enumr_generic.h"
+
+static odpdrv_enumr_t gen_enumr;
+
+static int gen_enumr_probe(void)
+{
+ printf("%s() - no devices found\n", __func__);
+ return 0;
+}
+
+static int gen_enumr_remove(void)
+{
+ printf("%s()\n", __func__);
+ return 0;
+}
+
+static int gen_enumr_register_notif(void (*event_handler) (uint64_t event),
+ int64_t event_mask)
+{
+ (void)event_handler;
+ (void)event_mask;
+
+ printf("%s()\n", __func__);
+
+ return 0;
+}
+
+int register_enumerator_generic(odpdrv_enumr_class_t enumr_class)
+{
+ struct odpdrv_enumr_param_t param = {
+ .enumr_class = enumr_class,
+ .api_name = DDF_IFS_DEV_API_NAME,
+ .api_version = DDF_IFS_DEV_API_VER,
+ .probe = gen_enumr_probe,
+ .remove = gen_enumr_remove,
+ .register_notifier = gen_enumr_register_notif
+ };
+
+ printf("\t%s()\n", __func__);
+
+ gen_enumr = odpdrv_enumr_register(¶m);
+ if (ODPDRV_ENUMR_INVALID == gen_enumr) {
+ printf("\tError:failed to %s()\n", __func__);
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/example/ddf_ifs/ddf_ifs_enumr_generic.h
b/example/ddf_ifs/ddf_ifs_enumr_generic.h
new file mode 100644
index 0000000..2f0b8b8
--- /dev/null
+++ b/example/ddf_ifs/ddf_ifs_enumr_generic.h
@@ -0,0 +1,20 @@
+/* Copyright (c) 2014, Linaro Limited
+ * All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef _ODP_DDF_IFS_ENUMR_GENERIC_H_
+#define _ODP_DDF_IFS_ENUMR_GENERIC_H_
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int register_enumerator_generic(odpdrv_enumr_class_t enumr_class);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /*_ODP_DDF_IFS_ENUMR_GENERIC_H_*/
diff --git a/example/ddf_ifs/odp.conf b/example/ddf_ifs/odp.conf
new file mode 100644
index 0000000..14968a7
--- /dev/null
+++ b/example/ddf_ifs/odp.conf
@@ -0,0 +1,4 @@
+module:
+{
+ modules = ("libddf_ifs.so.0");
+};
diff --git a/example/m4/configure.m4 b/example/m4/configure.m4
index 620db04..9e7973b 100644
--- a/example/m4/configure.m4
+++ b/example/m4/configure.m4
@@ -21,4 +21,6 @@ AC_CONFIG_FILES([example/classifier/Makefile
example/time/Makefile
example/timer/Makefile
example/traffic_mgmt/Makefile
+ example/ddf_ifs/Makefile
+ example/ddf_app/Makefile
example/Makefile])
--
1.9.1