
This patch allows a client to bootstrap itself by downloading the JSON API definitions over the API itself. This patch enables it for Python (probably need a dynamic language). Call VPPApiClient with the new bootstrapapi=True parameter. Example (Python): from vpp_papi import VPPApiClient vpp = VPPApiClient(bootstrapapi=True) rv = vpp.connect("foobar") assert rv == 0 print(f'SHOW VERSION: {vpp.api.show_version()}') vpp.disconnect() Type: feature Change-Id: Id903fdccc82b2e22aa1994331d2c150253f2ccae Signed-off-by: Ole Troan <otroan@employees.org>
266 lines
6.3 KiB
C
266 lines
6.3 KiB
C
/* Hey Emacs use -*- mode: C -*- */
|
|
/*
|
|
* Copyright (c) 2015 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.
|
|
*/
|
|
|
|
option version = "2.1.0";
|
|
|
|
/*
|
|
* Define services not following the normal conventions here
|
|
*/
|
|
service {
|
|
rpc memclnt_rx_thread_suspend returns null;
|
|
rpc memclnt_read_timeout returns null;
|
|
rpc rx_thread_exit returns null;
|
|
rpc trace_plugin_msg_ids returns null;
|
|
};
|
|
|
|
/*
|
|
* Create a client registration
|
|
*/
|
|
define memclnt_create {
|
|
option deprecated;
|
|
|
|
u32 context; /* opaque value to be returned in the reply */
|
|
i32 ctx_quota; /* requested punt context quota */
|
|
u64 input_queue; /* client's queue */
|
|
string name[64]; /* for show, find by name, whatever */
|
|
u32 api_versions[8]; /* client-server pairs use as desired */
|
|
};
|
|
|
|
define memclnt_create_reply {
|
|
option deprecated;
|
|
|
|
u32 context; /* opaque value from the create request */
|
|
i32 response; /* Non-negative = success */
|
|
u64 handle; /* handle by which vlib knows this client */
|
|
u32 index; /* index, used e.g. by API trace replay */
|
|
u64 message_table; /* serialized message table in shmem */
|
|
};
|
|
|
|
/*
|
|
* Delete a client registration
|
|
*/
|
|
define memclnt_delete {
|
|
u32 index; /* index, used e.g. by API trace replay */
|
|
u64 handle; /* handle by which vlib knows this client */
|
|
bool do_cleanup; /* vlib to cleanup the registration */
|
|
};
|
|
|
|
define memclnt_delete_reply {
|
|
i32 response; /* Non-negative = success */
|
|
u64 handle; /* in case the client wonders */
|
|
};
|
|
|
|
/*
|
|
* Client RX thread exit
|
|
*/
|
|
define rx_thread_exit {
|
|
u8 dummy;
|
|
};
|
|
|
|
/*
|
|
* Client RX thread suspend
|
|
*/
|
|
define memclnt_rx_thread_suspend {
|
|
u8 dummy;
|
|
};
|
|
|
|
/*
|
|
* Client read timeout
|
|
*/
|
|
define memclnt_read_timeout {
|
|
u8 dummy;
|
|
};
|
|
|
|
/*
|
|
* RPC
|
|
*/
|
|
autoreply define rpc_call {
|
|
u32 client_index;
|
|
u32 context;
|
|
u64 function;
|
|
u8 multicast;
|
|
u8 need_barrier_sync;
|
|
u8 send_reply;
|
|
u32 data_len;
|
|
u8 data[data_len];
|
|
};
|
|
|
|
/*
|
|
* Lookup message-ID base by name
|
|
*/
|
|
define get_first_msg_id {
|
|
u32 client_index;
|
|
u32 context;
|
|
string name[64];
|
|
};
|
|
|
|
define get_first_msg_id_reply {
|
|
u32 context;
|
|
i32 retval;
|
|
u16 first_msg_id;
|
|
};
|
|
|
|
/*
|
|
* Get API version table (includes built-in and plugins)
|
|
*/
|
|
typedef module_version {
|
|
u32 major;
|
|
u32 minor;
|
|
u32 patch;
|
|
string name[64];
|
|
};
|
|
define api_versions {
|
|
u32 client_index;
|
|
u32 context;
|
|
};
|
|
define api_versions_reply {
|
|
u32 context;
|
|
i32 retval;
|
|
u32 count;
|
|
vl_api_module_version_t api_versions[count];
|
|
};
|
|
|
|
/*
|
|
* Trace the plugin message-id allocator
|
|
* so we stand a chance of dealing with different sets of plugins
|
|
* at api trace replay time
|
|
*/
|
|
|
|
define trace_plugin_msg_ids
|
|
{
|
|
u32 client_index;
|
|
u32 context;
|
|
string plugin_name[128];
|
|
u16 first_msg_id;
|
|
u16 last_msg_id;
|
|
};
|
|
|
|
typedef message_table_entry
|
|
{
|
|
u16 index;
|
|
string name[64];
|
|
};
|
|
|
|
/*
|
|
* Create a socket client registration.
|
|
*/
|
|
define sockclnt_create {
|
|
u32 context; /* opaque value to be returned in the reply */
|
|
string name[64]; /* for show, find by name, whatever */
|
|
};
|
|
|
|
define sockclnt_create_reply {
|
|
u32 client_index;
|
|
u32 context; /* opaque value from the create request */
|
|
i32 response; /* Non-negative = success */
|
|
u32 index; /* index, used e.g. by API trace replay */
|
|
u16 count;
|
|
vl_api_message_table_entry_t message_table[count];
|
|
};
|
|
|
|
/*
|
|
* Delete a client registration
|
|
*/
|
|
define sockclnt_delete {
|
|
u32 client_index;
|
|
u32 context;
|
|
u32 index; /* index, used e.g. by API trace replay */
|
|
};
|
|
|
|
define sockclnt_delete_reply {
|
|
u32 context;
|
|
i32 response; /* Non-negative = success */
|
|
};
|
|
|
|
/*
|
|
* Initialize shm api over socket api
|
|
*/
|
|
autoreply define sock_init_shm {
|
|
u32 client_index;
|
|
u32 context;
|
|
u32 requested_size;
|
|
u8 nitems;
|
|
u64 configs[nitems];
|
|
};
|
|
|
|
/* define sock_init_shm_reply {
|
|
u32 client_index;
|
|
u32 context;
|
|
i32 retval;
|
|
}; */
|
|
|
|
/*
|
|
* Memory client ping / response
|
|
* Only sent on inactive connections
|
|
*/
|
|
autoreply define memclnt_keepalive
|
|
{
|
|
u32 client_index;
|
|
u32 context;
|
|
};
|
|
|
|
/** \brief Control ping from client to api server request
|
|
@param client_index - opaque cookie to identify the sender
|
|
@param context - sender context, to match reply w/ request
|
|
*/
|
|
define control_ping
|
|
{
|
|
u32 client_index;
|
|
u32 context;
|
|
};
|
|
|
|
/** \brief Control ping from the client to the server response
|
|
@param client_index - opaque cookie to identify the sender
|
|
@param context - sender context, to match reply w/ request
|
|
@param retval - return code for the request
|
|
@param vpe_pid - the pid of the vpe, returned by the server
|
|
*/
|
|
define control_ping_reply
|
|
{
|
|
u32 context;
|
|
i32 retval;
|
|
u32 client_index;
|
|
u32 vpe_pid;
|
|
};
|
|
|
|
define memclnt_create_v2 {
|
|
u32 context; /* opaque value to be returned in the reply */
|
|
i32 ctx_quota; /* requested punt context quota */
|
|
u64 input_queue; /* client's queue */
|
|
string name[64]; /* for show, find by name, whatever */
|
|
u32 api_versions[8]; /* client-server pairs use as desired */
|
|
bool keepalive[default=true]; /* dead client scan keepalives */
|
|
};
|
|
|
|
define memclnt_create_v2_reply {
|
|
u32 context; /* opaque value from the create request */
|
|
i32 response; /* Non-negative = success */
|
|
u64 handle; /* handle by which vlib knows this client */
|
|
u32 index; /* index, used e.g. by API trace replay */
|
|
u64 message_table; /* serialized message table in shmem */
|
|
};
|
|
|
|
define get_api_json {
|
|
u32 client_index;
|
|
u32 context;
|
|
};
|
|
|
|
define get_api_json_reply {
|
|
u32 context;
|
|
i32 retval;
|
|
string json[];
|
|
};
|