summaryrefslogtreecommitdiffstats
path: root/adapter/vppapiclient/vppapiclient_wrapper.h
diff options
context:
space:
mode:
Diffstat (limited to 'adapter/vppapiclient/vppapiclient_wrapper.h')
-rw-r--r--adapter/vppapiclient/vppapiclient_wrapper.h71
1 files changed, 71 insertions, 0 deletions
diff --git a/adapter/vppapiclient/vppapiclient_wrapper.h b/adapter/vppapiclient/vppapiclient_wrapper.h
new file mode 100644
index 0000000..691c782
--- /dev/null
+++ b/adapter/vppapiclient/vppapiclient_wrapper.h
@@ -0,0 +1,71 @@
+// Copyright (c) 2018 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 included_vppapiclient_wrapper_h
+#define included_vppapiclient_wrapper_h
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <arpa/inet.h>
+
+#include <vpp-api/client/vppapiclient.h> // VPP has to be installed!
+
+// function go_msg_callback is defined in vppapiclient.go
+extern void go_msg_callback(uint16_t msg_id, void* data, size_t size);
+
+typedef struct __attribute__((__packed__)) _req_header {
+ uint16_t msg_id;
+ uint32_t client_index;
+ uint32_t context;
+} req_header_t;
+
+typedef struct __attribute__((__packed__)) _reply_header {
+ uint16_t msg_id;
+} reply_header_t;
+
+static void
+govpp_msg_callback(unsigned char *data, int size)
+{
+ reply_header_t *header = ((reply_header_t *)data);
+ go_msg_callback(ntohs(header->msg_id), data, size);
+}
+
+static int
+govpp_send(uint32_t context, void *data, size_t size)
+{
+ req_header_t *header = ((req_header_t *)data);
+ header->context = htonl(context);
+ return vac_write(data, size);
+}
+
+static int
+govpp_connect(char *shm, int rx_qlen)
+{
+ return vac_connect("govpp", shm, govpp_msg_callback, rx_qlen);
+}
+
+static int
+govpp_disconnect()
+{
+ return vac_disconnect();
+}
+
+static uint32_t
+govpp_get_msg_index(char *name_and_crc)
+{
+ return vac_get_msg_index(name_and_crc);
+}
+
+#endif /* included_vppapiclient_wrapper_h */