#define REPLY_MACRO(t) \
do { \
vl_api_registration_t *rp; \
- rv = vl_msg_api_pd_handler (mp, rv); \
rp = vl_api_client_index_to_registration (mp->client_index); \
if (rp == 0) \
return; \
#define REPLY_MACRO_END(t) \
do { \
vl_api_registration_t *rp; \
- rv = vl_msg_api_pd_handler (mp, rv); \
rp = vl_api_client_index_to_registration (mp->client_index); \
if (rp == 0) \
return; \
#define REPLY_MACRO2(t, body) \
do { \
vl_api_registration_t *rp; \
- rv = vl_msg_api_pd_handler (mp, rv); \
rp = vl_api_client_index_to_registration (mp->client_index); \
if (rp == 0) \
return; \
#define REPLY_MACRO2_END(t, body) \
do { \
vl_api_registration_t *rp; \
- rv = vl_msg_api_pd_handler (mp, rv); \
rp = vl_api_client_index_to_registration (mp->client_index); \
if (rp == 0) \
return; \
#define REPLY_MACRO2_ZERO(t, body) \
do { \
vl_api_registration_t *rp; \
- rv = vl_msg_api_pd_handler (mp, rv); \
rp = vl_api_client_index_to_registration (mp->client_index); \
if (rp == 0) \
return; \
#define REPLY_MACRO_DETAILS2(t, body) \
do { \
vl_api_registration_t *rp; \
- rv = vl_msg_api_pd_handler (mp, rv); \
rp = vl_api_client_index_to_registration (mp->client_index); \
if (rp == 0) \
return; \
#define REPLY_MACRO3(t, n, body) \
do { \
vl_api_registration_t *rp; \
- rv = vl_msg_api_pd_handler (mp, rv); \
rp = vl_api_client_index_to_registration (mp->client_index); \
if (rp == 0) \
return; \
#define REPLY_MACRO3_ZERO(t, n, body) \
do { \
vl_api_registration_t *rp; \
- rv = vl_msg_api_pd_handler (mp, rv); \
rp = vl_api_client_index_to_registration (mp->client_index); \
if (rp == 0) \
return; \
do { \
vl_api_registration_t *rp; \
u8 is_error = 0; \
- rv = vl_msg_api_pd_handler (mp, rv); \
\
rp = vl_api_client_index_to_registration (mp->client_index); \
if (rp == 0) \
/* Layered message handling support */
-void
-vl_msg_api_register_pd_handler (void *fp, u16 msg_id_host_byte_order)
-{
- api_main_t *am = vlibapi_get_main ();
-
- /* Mild idiot proofing */
- if (msg_id_host_byte_order > 10000)
- clib_warning ("msg_id_host_byte_order endian issue? %d arg vs %d",
- msg_id_host_byte_order,
- clib_net_to_host_u16 (msg_id_host_byte_order));
- vec_validate (am->pd_msg_handlers, msg_id_host_byte_order);
- am->pd_msg_handlers[msg_id_host_byte_order] = fp;
-}
-
-int
-vl_msg_api_pd_handler (void *mp, int rv)
-{
- api_main_t *am = vlibapi_get_main ();
- int (*fp) (void *, int);
- u16 msg_id;
-
- if (clib_arch_is_little_endian)
- msg_id = clib_net_to_host_u16 (*((u16 *) mp));
- else
- msg_id = *((u16 *) mp);
-
- if (msg_id >= vec_len (am->pd_msg_handlers)
- || am->pd_msg_handlers[msg_id] == 0)
- return rv;
-
- fp = am->pd_msg_handlers[msg_id];
- rv = (*fp) (mp, rv);
- return rv;
-}
-
void
vl_msg_api_set_first_available_msg_id (u16 first_avail)
{