vapi_internal.h revision 8f2a4eaf
18f2a4eafSKlement Sekera/*
28f2a4eafSKlement Sekera *------------------------------------------------------------------
38f2a4eafSKlement Sekera * Copyright (c) 2017 Cisco and/or its affiliates.
48f2a4eafSKlement Sekera * Licensed under the Apache License, Version 2.0 (the "License");
58f2a4eafSKlement Sekera * you may not use this file except in compliance with the License.
68f2a4eafSKlement Sekera * You may obtain a copy of the License at:
78f2a4eafSKlement Sekera *
88f2a4eafSKlement Sekera *     http://www.apache.org/licenses/LICENSE-2.0
98f2a4eafSKlement Sekera *
108f2a4eafSKlement Sekera * Unless required by applicable law or agreed to in writing, software
118f2a4eafSKlement Sekera * distributed under the License is distributed on an "AS IS" BASIS,
128f2a4eafSKlement Sekera * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138f2a4eafSKlement Sekera * See the License for the specific language governing permissions and
148f2a4eafSKlement Sekera * limitations under the License.
158f2a4eafSKlement Sekera *------------------------------------------------------------------
168f2a4eafSKlement Sekera */
178f2a4eafSKlement Sekera
188f2a4eafSKlement Sekera#ifndef VAPI_INTERNAL_H
198f2a4eafSKlement Sekera#define VAPI_INTERNAL_H
208f2a4eafSKlement Sekera
218f2a4eafSKlement Sekera#include <string.h>
228f2a4eafSKlement Sekera#include <vppinfra/types.h>
238f2a4eafSKlement Sekera
248f2a4eafSKlement Sekera/**
258f2a4eafSKlement Sekera * @file vapi_internal.h
268f2a4eafSKlement Sekera *
278f2a4eafSKlement Sekera * internal vpp api C declarations
288f2a4eafSKlement Sekera *
298f2a4eafSKlement Sekera * This file contains internal vpp api C declarations. It's not intended to be
308f2a4eafSKlement Sekera * used by the client programmer and the API defined here might change at any
318f2a4eafSKlement Sekera * time..
328f2a4eafSKlement Sekera */
338f2a4eafSKlement Sekera
348f2a4eafSKlement Sekerastruct vapi_ctx_s;
358f2a4eafSKlement Sekera
368f2a4eafSKlement Sekeratypedef struct __attribute__ ((__packed__))
378f2a4eafSKlement Sekera{
388f2a4eafSKlement Sekera  u16 _vl_msg_id;
398f2a4eafSKlement Sekera  u32 context;
408f2a4eafSKlement Sekera} vapi_type_msg_header1_t;
418f2a4eafSKlement Sekera
428f2a4eafSKlement Sekeratypedef struct __attribute__ ((__packed__))
438f2a4eafSKlement Sekera{
448f2a4eafSKlement Sekera  u16 _vl_msg_id;
458f2a4eafSKlement Sekera  u32 client_index;
468f2a4eafSKlement Sekera  u32 context;
478f2a4eafSKlement Sekera} vapi_type_msg_header2_t;
488f2a4eafSKlement Sekera
498f2a4eafSKlement Sekerastatic inline void
508f2a4eafSKlement Sekeravapi_type_msg_header1_t_hton (vapi_type_msg_header1_t * h)
518f2a4eafSKlement Sekera{
528f2a4eafSKlement Sekera  h->_vl_msg_id = htobe16 (h->_vl_msg_id);
538f2a4eafSKlement Sekera}
548f2a4eafSKlement Sekera
558f2a4eafSKlement Sekerastatic inline void
568f2a4eafSKlement Sekeravapi_type_msg_header1_t_ntoh (vapi_type_msg_header1_t * h)
578f2a4eafSKlement Sekera{
588f2a4eafSKlement Sekera  h->_vl_msg_id = be16toh (h->_vl_msg_id);
598f2a4eafSKlement Sekera}
608f2a4eafSKlement Sekera
618f2a4eafSKlement Sekerastatic inline void
628f2a4eafSKlement Sekeravapi_type_msg_header2_t_hton (vapi_type_msg_header2_t * h)
638f2a4eafSKlement Sekera{
648f2a4eafSKlement Sekera  h->_vl_msg_id = htobe16 (h->_vl_msg_id);
658f2a4eafSKlement Sekera}
668f2a4eafSKlement Sekera
678f2a4eafSKlement Sekerastatic inline void
688f2a4eafSKlement Sekeravapi_type_msg_header2_t_ntoh (vapi_type_msg_header2_t * h)
698f2a4eafSKlement Sekera{
708f2a4eafSKlement Sekera  h->_vl_msg_id = be16toh (h->_vl_msg_id);
718f2a4eafSKlement Sekera}
728f2a4eafSKlement Sekera
738f2a4eafSKlement Sekera
748f2a4eafSKlement Sekera#include <vapi.h>
758f2a4eafSKlement Sekera
768f2a4eafSKlement Sekeratypedef vapi_error_e (*vapi_cb_t) (struct vapi_ctx_s *, void *, vapi_error_e,
778f2a4eafSKlement Sekera				   bool, void *);
788f2a4eafSKlement Sekera
798f2a4eafSKlement Sekeratypedef void (*generic_swap_fn_t) (void *payload);
808f2a4eafSKlement Sekera
818f2a4eafSKlement Sekeratypedef struct
828f2a4eafSKlement Sekera{
838f2a4eafSKlement Sekera  const char *name;
848f2a4eafSKlement Sekera  size_t name_len;
858f2a4eafSKlement Sekera  const char *name_with_crc;
868f2a4eafSKlement Sekera  size_t name_with_crc_len;
878f2a4eafSKlement Sekera  bool has_context;
888f2a4eafSKlement Sekera  size_t context_offset;
898f2a4eafSKlement Sekera  size_t payload_offset;
908f2a4eafSKlement Sekera  size_t size;
918f2a4eafSKlement Sekera  generic_swap_fn_t swap_to_be;
928f2a4eafSKlement Sekera  generic_swap_fn_t swap_to_host;
938f2a4eafSKlement Sekera  vapi_msg_id_t id;		/* assigned at run-time */
948f2a4eafSKlement Sekera} vapi_message_desc_t;
958f2a4eafSKlement Sekera
968f2a4eafSKlement Sekeratypedef struct
978f2a4eafSKlement Sekera{
988f2a4eafSKlement Sekera  const char *name;
998f2a4eafSKlement Sekera  int payload_offset;
1008f2a4eafSKlement Sekera  size_t size;
1018f2a4eafSKlement Sekera  void (*swap_to_be) (void *payload);
1028f2a4eafSKlement Sekera  void (*swap_to_host) (void *payload);
1038f2a4eafSKlement Sekera} vapi_event_desc_t;
1048f2a4eafSKlement Sekera
1058f2a4eafSKlement Sekeraextern bool *__vapi_msg_is_with_context;
1068f2a4eafSKlement Sekera
1078f2a4eafSKlement Sekeravapi_msg_id_t vapi_register_msg (vapi_message_desc_t * msg);
1088f2a4eafSKlement Sekerau16 vapi_lookup_vl_msg_id (vapi_ctx_t ctx, vapi_msg_id_t id);
1098f2a4eafSKlement Sekeraint vapi_get_client_index (vapi_ctx_t ctx);
1108f2a4eafSKlement Sekerabool vapi_is_nonblocking (vapi_ctx_t ctx);
1118f2a4eafSKlement Sekerabool vapi_requests_full (vapi_ctx_t ctx);
1128f2a4eafSKlement Sekerasize_t vapi_get_request_count (vapi_ctx_t ctx);
1138f2a4eafSKlement Sekerasize_t vapi_get_max_request_count (vapi_ctx_t ctx);
1148f2a4eafSKlement Sekerau32 vapi_gen_req_context (vapi_ctx_t ctx);
1158f2a4eafSKlement Sekeravoid vapi_store_request (vapi_ctx_t ctx, u32 context, bool is_dump,
1168f2a4eafSKlement Sekera			 vapi_cb_t callback, void *callback_ctx);
1178f2a4eafSKlement Sekeraint vapi_get_payload_offset (vapi_msg_id_t id);
1188f2a4eafSKlement Sekeravoid (*vapi_get_swap_to_host_func (vapi_msg_id_t id)) (void *payload);
1198f2a4eafSKlement Sekeravoid (*vapi_get_swap_to_be_func (vapi_msg_id_t id)) (void *payload);
1208f2a4eafSKlement Sekerasize_t vapi_get_message_size (vapi_msg_id_t id);
1218f2a4eafSKlement Sekerasize_t vapi_get_context_offset (vapi_msg_id_t id);
1228f2a4eafSKlement Sekera
1238f2a4eafSKlement Sekeravapi_error_e vapi_producer_lock (vapi_ctx_t ctx);
1248f2a4eafSKlement Sekeravapi_error_e vapi_producer_unlock (vapi_ctx_t ctx);
1258f2a4eafSKlement Sekera
1268f2a4eafSKlement Sekera#endif
127