mpls_route_add_del_t_handler (vnet_main_t * vnm,
vl_api_mpls_route_add_del_t * mp)
{
+ fib_mpls_label_t *label_stack = NULL;
u32 fib_index, next_hop_fib_index;
- mpls_label_t *label_stack = NULL;
int rv, ii, n_labels;;
fib_prefix_t pfx = {
n_labels = mp->mr_next_hop_n_out_labels;
if (n_labels == 0)
;
- else if (1 == n_labels)
- vec_add1 (label_stack, ntohl (mp->mr_next_hop_out_label_stack[0]));
else
{
vec_validate (label_stack, n_labels - 1);
for (ii = 0; ii < n_labels; ii++)
- label_stack[ii] = ntohl (mp->mr_next_hop_out_label_stack[ii]);
+ {
+ label_stack[ii].fml_value =
+ ntohl (mp->mr_next_hop_out_label_stack[ii].label);
+ label_stack[ii].fml_ttl = mp->mr_next_hop_out_label_stack[ii].ttl;
+ label_stack[ii].fml_exp = mp->mr_next_hop_out_label_stack[ii].exp;
+ label_stack[ii].fml_mode =
+ (mp->mr_next_hop_out_label_stack[ii].is_uniform ?
+ FIB_MPLS_LSP_MODE_UNIFORM : FIB_MPLS_LSP_MODE_PIPE);
+ }
}
/* *INDENT-OFF* */
if (mp->mt_is_add)
{
for (ii = 0; ii < mp->mt_next_hop_n_out_labels; ii++)
- vec_add1 (rpath.frp_label_stack,
- ntohl (mp->mt_next_hop_out_label_stack[ii]));
+ {
+ fib_mpls_label_t fml = {
+ .fml_value = ntohl (mp->mt_next_hop_out_label_stack[ii].label),
+ .fml_ttl = mp->mt_next_hop_out_label_stack[ii].ttl,
+ .fml_exp = mp->mt_next_hop_out_label_stack[ii].exp,
+ .fml_mode = (mp->mt_next_hop_out_label_stack[ii].is_uniform ?
+ FIB_MPLS_LSP_MODE_UNIFORM : FIB_MPLS_LSP_MODE_PIPE),
+ };
+ vec_add1 (rpath.frp_label_stack, fml);
+ }
}
vec_add1 (rpaths, rpath);
typedef struct mpls_tunnel_send_walk_ctx_t_
{
- unix_shared_memory_queue_t *q;
+ vl_api_registration_t *reg;
u32 index;
u32 context;
} mpls_tunnel_send_walk_ctx_t;
mpls_tunnel_send_walk_ctx_t *ctx;
vl_api_mpls_tunnel_details_t *mp;
const mpls_tunnel_t *mt;
- vl_api_fib_path2_t *fp;
+ vl_api_fib_path_t *fp;
u32 n;
ctx = arg;
mt = mpls_tunnel_get (mti);
n = fib_path_list_get_n_paths (mt->mt_path_list);
- mp = vl_msg_api_alloc (sizeof (*mp) + n * sizeof (vl_api_fib_path2_t));
- memset (mp, 0, sizeof (*mp) + n * sizeof (vl_api_fib_path2_t));
+ mp = vl_msg_api_alloc (sizeof (*mp) + n * sizeof (vl_api_fib_path_t));
+ memset (mp, 0, sizeof (*mp) + n * sizeof (vl_api_fib_path_t));
mp->_vl_msg_id = ntohs (VL_API_MPLS_TUNNEL_DETAILS);
mp->context = ctx->context;
// mt->mt_label_stack, nlabels * sizeof (u32));
- vl_msg_api_send_shmem (ctx->q, (u8 *) & mp);
+ vl_api_send_msg (ctx->reg, (u8 *) mp);
}
static void
vl_api_mpls_tunnel_dump_t_handler (vl_api_mpls_tunnel_dump_t * mp)
{
- unix_shared_memory_queue_t *q;
+ vl_api_registration_t *reg;
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
+ reg = vl_api_client_index_to_registration (mp->client_index);
+ if (!reg)
return;
mpls_tunnel_send_walk_ctx_t ctx = {
- .q = q,
+ .reg = reg,
.index = ntohl (mp->tunnel_index),
.context = mp->context,
};
static void
send_mpls_fib_details (vpe_api_main_t * am,
- unix_shared_memory_queue_t * q,
+ vl_api_registration_t * reg,
const fib_table_t * table,
u32 label, u32 eos,
fib_route_path_encode_t * api_rpaths, u32 context)
{
vl_api_mpls_fib_details_t *mp;
fib_route_path_encode_t *api_rpath;
- vl_api_fib_path2_t *fp;
+ vl_api_fib_path_t *fp;
int path_count;
path_count = vec_len (api_rpaths);
fp++;
}
- vl_msg_api_send_shmem (q, (u8 *) & mp);
+ vl_api_send_msg (reg, (u8 *) mp);
}
typedef struct vl_api_mpls_fib_dump_table_walk_ctx_t_
fib_node_index_t *lfeis;
} vl_api_mpls_fib_dump_table_walk_ctx_t;
-static int
+static fib_table_walk_rc_t
vl_api_mpls_fib_dump_table_walk (fib_node_index_t fei, void *arg)
{
vl_api_mpls_fib_dump_table_walk_ctx_t *ctx = arg;
vec_add1 (ctx->lfeis, fei);
- return (1);
+ return (FIB_TABLE_WALK_CONTINUE);
}
static void
vl_api_mpls_fib_dump_t_handler (vl_api_mpls_fib_dump_t * mp)
{
vpe_api_main_t *am = &vpe_api_main;
- unix_shared_memory_queue_t *q;
+ vl_api_registration_t *reg;
mpls_main_t *mm = &mpls_main;
fib_table_t *fib_table;
mpls_fib_t *mpls_fib;
.lfeis = NULL,
};
- q = vl_api_client_index_to_input_queue (mp->client_index);
- if (q == 0)
+ reg = vl_api_client_index_to_registration (mp->client_index);
+ if (!reg)
return;
/* *INDENT-OFF* */
fib_table = fib_table_get (fib_index, pfx.fp_proto);
api_rpaths = NULL;
fib_entry_encode (*lfeip, &api_rpaths);
- send_mpls_fib_details (am, q,
+ send_mpls_fib_details (am, reg,
fib_table, pfx.fp_label,
pfx.fp_eos, api_rpaths, mp->context);
vec_free (api_rpaths);