diff options
Diffstat (limited to 'src/vnet/mpls')
-rw-r--r-- | src/vnet/mpls/mpls.api | 9 | ||||
-rw-r--r-- | src/vnet/mpls/mpls_api.c | 68 |
2 files changed, 47 insertions, 30 deletions
diff --git a/src/vnet/mpls/mpls.api b/src/vnet/mpls/mpls.api index 7ab0f3750cc..7fa24f4812d 100644 --- a/src/vnet/mpls/mpls.api +++ b/src/vnet/mpls/mpls.api @@ -142,7 +142,7 @@ autoreply define mpls_table_add_del @param mr_next_hop_out_label_stack - the next-hop output label stack, outer most first @param next_hop_via_label - The next-hop is a resolved via a local label */ -autoreply define mpls_route_add_del +define mpls_route_add_del { u32 client_index; u32 context; @@ -169,6 +169,13 @@ autoreply define mpls_route_add_del vl_api_fib_mpls_label_t mr_next_hop_out_label_stack[mr_next_hop_n_out_labels]; }; +define mpls_route_add_del_reply +{ + u32 context; + i32 retval; + u32 stats_index; +}; + /** \brief Dump MPLS fib table @param client_index - opaque cookie to identify the sender */ diff --git a/src/vnet/mpls/mpls_api.c b/src/vnet/mpls/mpls_api.c index 8fec8e82e1e..dbd1d8b6e31 100644 --- a/src/vnet/mpls/mpls_api.c +++ b/src/vnet/mpls/mpls_api.c @@ -168,7 +168,8 @@ vl_api_mpls_ip_bind_unbind_t_handler (vl_api_mpls_ip_bind_unbind_t * mp) static int mpls_route_add_del_t_handler (vnet_main_t * vnm, - vl_api_mpls_route_add_del_t * mp) + vl_api_mpls_route_add_del_t * mp, + u32 * stats_index) { fib_mpls_label_t *label_stack = NULL; u32 fib_index, next_hop_fib_index; @@ -227,31 +228,36 @@ mpls_route_add_del_t_handler (vnet_main_t * vnm, } /* *INDENT-OFF* */ - return (add_del_route_t_handler (mp->mr_is_multipath, mp->mr_is_add, - 0, // mp->is_drop, - 0, // mp->is_unreach, - 0, // mp->is_prohibit, - 0, // mp->is_local, - mp->mr_is_multicast, - mp->mr_is_classify, - mp->mr_classify_table_index, - mp->mr_is_resolve_host, - mp->mr_is_resolve_attached, - mp->mr_is_interface_rx, - mp->mr_is_rpf_id, - 0, // l2_bridged - 0, // is source_lookup - 0, // is_udp_encap + rv = add_del_route_t_handler (mp->mr_is_multipath, mp->mr_is_add, + 0, // mp->is_drop, + 0, // mp->is_unreach, + 0, // mp->is_prohibit, + 0, // mp->is_local, + mp->mr_is_multicast, + mp->mr_is_classify, + mp->mr_classify_table_index, + mp->mr_is_resolve_host, + mp->mr_is_resolve_attached, + mp->mr_is_interface_rx, + mp->mr_is_rpf_id, + 0, // l2_bridged + 0, // is source_lookup + 0, // is_udp_encap fib_index, &pfx, - mp->mr_next_hop_proto, - &nh, ~0, // next_hop_id - ntohl (mp->mr_next_hop_sw_if_index), - next_hop_fib_index, - mp->mr_next_hop_weight, - mp->mr_next_hop_preference, - ntohl (mp->mr_next_hop_via_label), - label_stack)); + mp->mr_next_hop_proto, + &nh, ~0, // next_hop_id + ntohl (mp->mr_next_hop_sw_if_index), + next_hop_fib_index, + mp->mr_next_hop_weight, + mp->mr_next_hop_preference, + ntohl (mp->mr_next_hop_via_label), + label_stack); /* *INDENT-ON* */ + + if (mp->mr_is_add && 0 == rv) + *stats_index = fib_table_entry_get_stats_index (fib_index, &pfx); + + return (rv); } void @@ -259,16 +265,20 @@ vl_api_mpls_route_add_del_t_handler (vl_api_mpls_route_add_del_t * mp) { vl_api_mpls_route_add_del_reply_t *rmp; vnet_main_t *vnm; + u32 stats_index; int rv; vnm = vnet_get_main (); - vnm->api_errno = 0; + stats_index = ~0; - rv = mpls_route_add_del_t_handler (vnm, mp); - - rv = (rv == 0) ? vnm->api_errno : rv; + rv = mpls_route_add_del_t_handler (vnm, mp, &stats_index); - REPLY_MACRO (VL_API_MPLS_ROUTE_ADD_DEL_REPLY); + /* *INDENT-OFF* */ + REPLY_MACRO2 (VL_API_MPLS_ROUTE_ADD_DEL_REPLY, + ({ + rmp->stats_index = htonl (stats_index); + })); + /* *INDENT-ON* */ } void |