]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: initialize hw via DPDK
authorAnuradha Karuppiah <anuradhak@nvidia.com>
Thu, 30 Dec 2021 22:49:19 +0000 (14:49 -0800)
committerDonald Sharp <sharpd@nvidia.com>
Mon, 27 Jun 2022 11:56:55 +0000 (07:56 -0400)
Signed-off-by: Anuradha Karuppiah <anuradhak@nvidia.com>
zebra/dpdk/zebra_dplane_dpdk.c
zebra/dpdk/zebra_dplane_dpdk_private.h

index a8dfdf86d5e841af7e738586d64b763701d42d3c..44c6bac94d8e7b381815ed94f4b2445447995fea 100644 (file)
@@ -35,6 +35,8 @@
 
 static const char *plugin_name = "zebra_dplane_dpdk";
 
+extern struct zebra_privs_t zserv_privs;
+
 static struct zd_dpdk_ctx dpdk_ctx_buf, *dpdk_ctx = &dpdk_ctx_buf;
 #define dpdk_stat (&dpdk_ctx->stats)
 
@@ -159,19 +161,37 @@ static int zd_dpdk_process(struct zebra_dplane_provider *prov)
        return 0;
 }
 
+static int zd_dpdk_init(void)
+{
+       int rc;
+       char *argv[] = {(char *)"/usr/lib/frr/zebra", (char *)"--"};
+
+       zd_dpdk_vty_init();
+
+       frr_with_privs (&zserv_privs) {
+               rc = rte_eal_init(sizeof(argv) / sizeof(argv[0]), argv);
+       }
+       if (rc < 0) {
+               zlog_warn("EAL init failed %s", rte_strerror(rte_errno));
+               return -1;
+       }
+
+       return 0;
+}
 
 static int zd_dpdk_start(struct zebra_dplane_provider *prov)
 {
        if (IS_ZEBRA_DEBUG_DPLANE_DPDK)
                zlog_debug("%s start", dplane_provider_get_name(prov));
 
-       /* XXX - place holder */
-       return 0;
+       return zd_dpdk_init();
 }
 
 
 static int zd_dpdk_finish(struct zebra_dplane_provider *prov, bool early)
 {
+       int rc;
+
        if (early) {
                if (IS_ZEBRA_DEBUG_DPLANE_DPDK)
                        zlog_debug("%s early finish",
@@ -184,7 +204,12 @@ static int zd_dpdk_finish(struct zebra_dplane_provider *prov, bool early)
                zlog_debug("%s finish", dplane_provider_get_name(prov));
 
 
-       /* XXX - place holder */
+       frr_with_privs (&zserv_privs) {
+               rc = rte_eal_cleanup();
+       }
+       if (rc < 0)
+               zlog_warn("EAL cleanup failed %s", rte_strerror(rte_errno));
+
        return 0;
 }
 
index 24b943dddd55cb22c86116a89ebb3b8bf0a840da..8f502960849c71c936ca7f608d04fdbbd7d46fb7 100644 (file)
@@ -24,6 +24,8 @@
 
 #include <zebra.h>
 
+#include <rte_ethdev.h>
+
 #include "zebra_dplane_dpdk.h"