vapi_internal.h revision fd67ece3
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
21dc15be2cSKlement Sekera#include <endian.h>
228f2a4eafSKlement Sekera#include <string.h>
238f2a4eafSKlement Sekera#include <vppinfra/types.h>
248f2a4eafSKlement Sekera
258f2a4eafSKlement Sekera/**
268f2a4eafSKlement Sekera * @file vapi_internal.h
278f2a4eafSKlement Sekera *
288f2a4eafSKlement Sekera * internal vpp api C declarations
298f2a4eafSKlement Sekera *
308f2a4eafSKlement Sekera * This file contains internal vpp api C declarations. It's not intended to be
318f2a4eafSKlement Sekera * used by the client programmer and the API defined here might change at any
328f2a4eafSKlement Sekera * time..
338f2a4eafSKlement Sekera */
348f2a4eafSKlement Sekera
35dc15be2cSKlement Sekera#ifdef __cplusplus
36dc15be2cSKlement Sekeraextern "C" {
37dc15be2cSKlement Sekera#endif
38dc15be2cSKlement Sekera
398f2a4eafSKlement Sekerastruct vapi_ctx_s;
408f2a4eafSKlement Sekera
418f2a4eafSKlement Sekeratypedef struct __attribute__ ((__packed__))
428f2a4eafSKlement Sekera{
438f2a4eafSKlement Sekera  u16 _vl_msg_id;
448f2a4eafSKlement Sekera  u32 context;
458f2a4eafSKlement Sekera} vapi_type_msg_header1_t;
468f2a4eafSKlement Sekera
478f2a4eafSKlement Sekeratypedef struct __attribute__ ((__packed__))
488f2a4eafSKlement Sekera{
498f2a4eafSKlement Sekera  u16 _vl_msg_id;
508f2a4eafSKlement Sekera  u32 client_index;
518f2a4eafSKlement Sekera  u32 context;
528f2a4eafSKlement Sekera} vapi_type_msg_header2_t;
538f2a4eafSKlement Sekera
548f2a4eafSKlement Sekerastatic inline void
558f2a4eafSKlement Sekeravapi_type_msg_header1_t_hton (vapi_type_msg_header1_t * h)
568f2a4eafSKlement Sekera{
578f2a4eafSKlement Sekera  h->_vl_msg_id = htobe16 (h->_vl_msg_id);
588f2a4eafSKlement Sekera}
598f2a4eafSKlement Sekera
608f2a4eafSKlement Sekerastatic inline void
618f2a4eafSKlement Sekeravapi_type_msg_header1_t_ntoh (vapi_type_msg_header1_t * h)
628f2a4eafSKlement Sekera{
638f2a4eafSKlement Sekera  h->_vl_msg_id = be16toh (h->_vl_msg_id);
648f2a4eafSKlement Sekera}
658f2a4eafSKlement Sekera
668f2a4eafSKlement Sekerastatic inline void
678f2a4eafSKlement Sekeravapi_type_msg_header2_t_hton (vapi_type_msg_header2_t * h)
688f2a4eafSKlement Sekera{
698f2a4eafSKlement Sekera  h->_vl_msg_id = htobe16 (h->_vl_msg_id);
708f2a4eafSKlement Sekera}
718f2a4eafSKlement Sekera
728f2a4eafSKlement Sekerastatic inline void
738f2a4eafSKlement Sekeravapi_type_msg_header2_t_ntoh (vapi_type_msg_header2_t * h)
748f2a4eafSKlement Sekera{
758f2a4eafSKlement Sekera  h->_vl_msg_id = be16toh (h->_vl_msg_id);
768f2a4eafSKlement Sekera}
778f2a4eafSKlement Sekera
788f2a4eafSKlement Sekera
79dc15be2cSKlement Sekera#include <vapi/vapi.h>
808f2a4eafSKlement Sekera
818f2a4eafSKlement Sekeratypedef vapi_error_e (*vapi_cb_t) (struct vapi_ctx_s *, void *, vapi_error_e,
828f2a4eafSKlement Sekera				   bool, void *);
838f2a4eafSKlement Sekera
848f2a4eafSKlement Sekeratypedef void (*generic_swap_fn_t) (void *payload);
858f2a4eafSKlement Sekera
868f2a4eafSKlement Sekeratypedef struct
878f2a4eafSKlement Sekera{
888f2a4eafSKlement Sekera  const char *name;
898f2a4eafSKlement Sekera  size_t name_len;
908f2a4eafSKlement Sekera  const char *name_with_crc;
918f2a4eafSKlement Sekera  size_t name_with_crc_len;
928f2a4eafSKlement Sekera  bool has_context;
93fd67ece3SNeale Ranns  unsigned int context_offset;
94fd67ece3SNeale Ranns  unsigned int payload_offset;
958f2a4eafSKlement Sekera  size_t size;
968f2a4eafSKlement Sekera  generic_swap_fn_t swap_to_be;
978f2a4eafSKlement Sekera  generic_swap_fn_t swap_to_host;
988f2a4eafSKlement Sekera  vapi_msg_id_t id;		/* assigned at run-time */
998f2a4eafSKlement Sekera} vapi_message_desc_t;
1008f2a4eafSKlement Sekera
1018f2a4eafSKlement Sekeratypedef struct
1028f2a4eafSKlement Sekera{
1038f2a4eafSKlement Sekera  const char *name;
1048f2a4eafSKlement Sekera  int payload_offset;
1058f2a4eafSKlement Sekera  size_t size;
1068f2a4eafSKlement Sekera  void (*swap_to_be) (void *payload);
1078f2a4eafSKlement Sekera  void (*swap_to_host) (void *payload);
1088f2a4eafSKlement Sekera} vapi_event_desc_t;
1098f2a4eafSKlement Sekera
1108f2a4eafSKlement Sekeravapi_msg_id_t vapi_register_msg (vapi_message_desc_t * msg);
1118f2a4eafSKlement Sekerau16 vapi_lookup_vl_msg_id (vapi_ctx_t ctx, vapi_msg_id_t id);
112dc15be2cSKlement Sekeravapi_msg_id_t vapi_lookup_vapi_msg_id_t (vapi_ctx_t ctx, u16 vl_msg_id);
1138f2a4eafSKlement Sekeraint vapi_get_client_index (vapi_ctx_t ctx);
1148f2a4eafSKlement Sekerabool vapi_is_nonblocking (vapi_ctx_t ctx);
115dc15be2cSKlement Sekerabool vapi_requests_empty (vapi_ctx_t ctx);
1168f2a4eafSKlement Sekerabool vapi_requests_full (vapi_ctx_t ctx);
1178f2a4eafSKlement Sekerasize_t vapi_get_request_count (vapi_ctx_t ctx);
1188f2a4eafSKlement Sekerasize_t vapi_get_max_request_count (vapi_ctx_t ctx);
1198f2a4eafSKlement Sekerau32 vapi_gen_req_context (vapi_ctx_t ctx);
1208f2a4eafSKlement Sekeravoid vapi_store_request (vapi_ctx_t ctx, u32 context, bool is_dump,
1218f2a4eafSKlement Sekera			 vapi_cb_t callback, void *callback_ctx);
1228f2a4eafSKlement Sekeraint vapi_get_payload_offset (vapi_msg_id_t id);
1238f2a4eafSKlement Sekeravoid (*vapi_get_swap_to_host_func (vapi_msg_id_t id)) (void *payload);
1248f2a4eafSKlement Sekeravoid (*vapi_get_swap_to_be_func (vapi_msg_id_t id)) (void *payload);
1258f2a4eafSKlement Sekerasize_t vapi_get_message_size (vapi_msg_id_t id);
1268f2a4eafSKlement Sekerasize_t vapi_get_context_offset (vapi_msg_id_t id);
127dc15be2cSKlement Sekerabool vapi_msg_is_with_context (vapi_msg_id_t id);
128dc15be2cSKlement Sekerasize_t vapi_get_message_count();
129dc15be2cSKlement Sekeraconst char *vapi_get_msg_name(vapi_msg_id_t id);
1308f2a4eafSKlement Sekera
1318f2a4eafSKlement Sekeravapi_error_e vapi_producer_lock (vapi_ctx_t ctx);
1328f2a4eafSKlement Sekeravapi_error_e vapi_producer_unlock (vapi_ctx_t ctx);
1338f2a4eafSKlement Sekera
134dc15be2cSKlement Sekera#ifdef __cplusplus
135dc15be2cSKlement Sekera}
136dc15be2cSKlement Sekera#endif
137dc15be2cSKlement Sekera
1388f2a4eafSKlement Sekera#endif
139