aboutsummaryrefslogtreecommitdiffstats
path: root/ctrl/sysrepo-plugins/hicn-plugin/plugin/hicn_vpp_comm.h
diff options
context:
space:
mode:
Diffstat (limited to 'ctrl/sysrepo-plugins/hicn-plugin/plugin/hicn_vpp_comm.h')
-rw-r--r--ctrl/sysrepo-plugins/hicn-plugin/plugin/hicn_vpp_comm.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/ctrl/sysrepo-plugins/hicn-plugin/plugin/hicn_vpp_comm.h b/ctrl/sysrepo-plugins/hicn-plugin/plugin/hicn_vpp_comm.h
new file mode 100644
index 000000000..fd71dbaf2
--- /dev/null
+++ b/ctrl/sysrepo-plugins/hicn-plugin/plugin/hicn_vpp_comm.h
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2019 Cisco and/or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at:
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __HICN_VPP_COMMM_H__
+#define __HICN_VPP_COMMM_H__
+#include <sysrepo.h>
+#include <sysrepo/plugins.h> //for HICN_LOG_DBG
+#include <sysrepo/values.h>
+#include <vapi/vapi.h>
+
+#ifndef HICN_THIS_FUNC
+#ifdef __FUNCTION__
+#define HICN_THIS_FUNC __FUNCTION__
+#else
+#define HICN_THIS_FUNC __func__
+#endif
+#endif
+
+#ifndef _NOLOG
+#define HICN_LOG_DBG SRP_LOG_DBG
+#define HICN_LOG_ERR SRP_LOG_ERR
+#define HICN_LOG_DBG_MSG SRP_LOG_DBG_MSG
+#define HICN_LOG_ERR_MSG SRP_LOG_ERR_MSG
+#else
+#define HICN_LOG_DBG // printf
+#define HICN_LOG_DBG // SRP_LOG_DBG
+#define HICN_LOG_ERR // SRP_LOG_ERR
+#define HICN_LOG_DBG_MSG // SRP_LOG_DBG_MSG
+#define HICN_LOG_ERR_MSG // SRP_LOG_ERR_MSG
+#endif
+
+
+// ctx vpp connect
+extern vapi_ctx_t g_vapi_ctx_instance;
+
+//Here it is the definition
+
+#define VPP_INTFC_NAME_LEN 64
+#define VPP_MAC_ADDRESS_LEN 8
+#define VPP_IP6_ADDRESS_LEN 16
+#define HICN_INVOKE_BEGIN HICN_LOG_DBG("inovke %s bein.", HICN_THIS_FUNC);
+#define HICN_INVOKE_END \
+ HICN_LOG_DBG("inovke %s end,with return OK.", HICN_THIS_FUNC);
+#define HICN_INVOKE_ENDX(...) \
+ HICN_LOG_DBG("inovke %s end,with %s.", HICN_THIS_FUNC, ##__VA_ARGS__)
+
+#define ARG_CHECK(retval, arg) \
+ do { \
+ if (NULL == (arg)) { \
+ HICN_LOG_ERR_MSG(#arg ":NULL pointer passed."); \
+ return (retval); \
+ } \
+ } while (0)
+
+
+
+#define ARG_CHECK2(retval, arg1, arg2) \
+ ARG_CHECK(retval, arg1); \
+ ARG_CHECK(retval, arg2)
+
+#define ARG_CHECK6(retval, arg1, arg2, arg3, arg4, arg5, arg6) \
+ ARG_CHECK(retval, arg1); \
+ ARG_CHECK(retval, arg2); \
+ ARG_CHECK(retval, arg3); \
+ ARG_CHECK(retval, arg4); \
+ ARG_CHECK(retval, arg5); \
+ ARG_CHECK(retval, arg6)
+
+
+/**
+ * when use tihs must fist DEFINE_VAPI_MSG_IDS_VXLAN_API_JSON
+ */
+#define HICN_VPP_VAPI_RECV \
+ do { \
+ size_t size; \
+ int recv_vapimsgid = -1; \
+ vapi_recv(g_vapi_ctx_instance, (void *)&resp, &size, 0, 0); \
+ recv_vapimsgid = vapi_lookup_vapi_msg_id_t( \
+ g_vapi_ctx_instance, ntohs(resp->header._vl_msg_id)); \
+ if (recv_vapimsgid <= vapi_msg_id_get_next_index_reply || \
+ recv_vapimsgid >= vapi_get_message_count()) { \
+ HICN_LOG_DBG("***recv error msgid[%d] not in [0-%d) ,try again!***\n", \
+ recv_vapimsgid, vapi_get_message_count()); \
+ } else { \
+ HICN_LOG_DBG("recv msgid [%d]\n", recv_vapimsgid); \
+ break; \
+ } \
+ } while (1);
+
+#define HICN_REGISTER_RPC_EVT_HANDLER(rpc_evt_handle) \
+ do { \
+ sr_error_t rc = rpc_evt_handle(session, &subscription); \
+ if (SR_ERR_OK != rc) { \
+ HICN_LOG_ERR("load plugin failed: %s", sr_strerror(rc)); \
+ sr_unsubscribe(session, subscription); \
+ HICN_INVOKE_ENDX(sr_strerror(rc)); \
+ return rc; \
+ } \
+ } while (0);
+
+
+// define the error list
+typedef enum {
+ HICN_OK = 0, /* Success */
+ HICN_EINVAL, /* Invalid value encountered */
+ HICN_EAGAIN, /* Operation would block */
+ HICN_ENOTSUP, /* Operation not supported */
+ HICN_ENOMEM, /* Out of memory */
+ HICN_NOT_FOUND, /* Required element can not be found */
+} hicn_error_e;
+
+
+int hicn_connect_vpp();
+int hicn_disconnect_vpp();
+
+#endif //__HICN_VPP_COMMM_H__ \ No newline at end of file