Dump routes (VPP-500)
Change-Id: I86e7382395a8b6471a0deaf57163718d41b71b83 Signed-off-by: Steven <sluong@cisco.com>
This commit is contained in:
@ -3811,7 +3811,9 @@ _(IPSEC_GRE_ADD_DEL_TUNNEL_REPLY, ipsec_gre_add_del_tunnel_reply) \
|
||||
_(IPSEC_GRE_TUNNEL_DETAILS, ipsec_gre_tunnel_details) \
|
||||
_(DELETE_SUBIF_REPLY, delete_subif_reply) \
|
||||
_(L2_INTERFACE_PBB_TAG_REWRITE_REPLY, l2_interface_pbb_tag_rewrite_reply) \
|
||||
_(PUNT_REPLY, punt_reply)
|
||||
_(PUNT_REPLY, punt_reply) \
|
||||
_(IP_FIB_DETAILS, ip_fib_details) \
|
||||
_(IP6_FIB_DETAILS, ip6_fib_details)
|
||||
|
||||
/* M: construct, but don't yet send a message */
|
||||
|
||||
@ -14853,21 +14855,43 @@ api_mpls_fib_encap_dump (vat_main_t * vam)
|
||||
W;
|
||||
}
|
||||
|
||||
#define vl_api_mpls_fib_details_t_endian vl_noop_handler
|
||||
#define vl_api_mpls_fib_details_t_print vl_noop_handler
|
||||
|
||||
static void
|
||||
vl_api_mpls_fib_details_t_handler (vl_api_mpls_fib_details_t * mp)
|
||||
{
|
||||
vat_main_t *vam = &vat_main;
|
||||
int count = ntohl (mp->count);
|
||||
vl_api_fib_path_t *fp;
|
||||
int i;
|
||||
|
||||
fformat (vam->ofp,
|
||||
"table-id %d, label %u, ess_bit %u\n",
|
||||
ntohl (mp->table_id), ntohl (mp->label), mp->eos_bit);
|
||||
fp = mp->path;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
fformat (vam->ofp,
|
||||
" weight %d, sw_if_index %d, is_local %d, is_drop %d, is_unreach %d, "
|
||||
"is_prohitbit %d, afi %d, next_hop %U\n", ntohl (fp->weight),
|
||||
ntohl (fp->sw_if_index), fp->is_local, fp->is_drop,
|
||||
fp->is_unreach, fp->is_prohibit, fp->afi, format_ip46_address,
|
||||
fp->next_hop, fp->afi);
|
||||
fp++;
|
||||
}
|
||||
}
|
||||
|
||||
static void vl_api_mpls_fib_details_t_handler_json
|
||||
(vl_api_mpls_fib_details_t * mp)
|
||||
{
|
||||
vat_main_t *vam = &vat_main;
|
||||
int count = ntohl (mp->count);
|
||||
vat_json_node_t *node = NULL;
|
||||
struct in_addr ip4;
|
||||
struct in6_addr ip6;
|
||||
vl_api_fib_path_t *fp;
|
||||
int i;
|
||||
|
||||
if (VAT_JSON_ARRAY != vam->json_tree.type)
|
||||
{
|
||||
@ -14880,6 +14904,28 @@ static void vl_api_mpls_fib_details_t_handler_json
|
||||
vat_json_object_add_uint (node, "table", ntohl (mp->table_id));
|
||||
vat_json_object_add_uint (node, "s_bit", mp->eos_bit);
|
||||
vat_json_object_add_uint (node, "label", ntohl (mp->label));
|
||||
vat_json_object_add_uint (node, "path_count", count);
|
||||
fp = mp->path;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
vat_json_object_add_uint (node, "weight", ntohl (fp->weight));
|
||||
vat_json_object_add_uint (node, "sw_if_index", ntohl (fp->sw_if_index));
|
||||
vat_json_object_add_uint (node, "is_local", fp->is_local);
|
||||
vat_json_object_add_uint (node, "is_drop", fp->is_drop);
|
||||
vat_json_object_add_uint (node, "is_unreach", fp->is_unreach);
|
||||
vat_json_object_add_uint (node, "is_prohibit", fp->is_prohibit);
|
||||
vat_json_object_add_uint (node, "next_hop_afi", fp->afi);
|
||||
if (fp->afi == IP46_TYPE_IP4)
|
||||
{
|
||||
clib_memcpy (&ip4, &fp->next_hop, sizeof (ip4));
|
||||
vat_json_object_add_ip4 (node, "next_hop", ip4);
|
||||
}
|
||||
else if (fp->afi == IP46_TYPE_IP6)
|
||||
{
|
||||
clib_memcpy (&ip6, &fp->next_hop, sizeof (ip6));
|
||||
vat_json_object_add_ip6 (node, "next_hop", ip6);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
@ -14900,6 +14946,192 @@ api_mpls_fib_dump (vat_main_t * vam)
|
||||
W;
|
||||
}
|
||||
|
||||
#define vl_api_ip_fib_details_t_endian vl_noop_handler
|
||||
#define vl_api_ip_fib_details_t_print vl_noop_handler
|
||||
|
||||
static void
|
||||
vl_api_ip_fib_details_t_handler (vl_api_ip_fib_details_t * mp)
|
||||
{
|
||||
vat_main_t *vam = &vat_main;
|
||||
int count = ntohl (mp->count);
|
||||
vl_api_fib_path_t *fp;
|
||||
int i;
|
||||
|
||||
fformat (vam->ofp,
|
||||
"table-id %d, prefix %U/%d\n",
|
||||
ntohl (mp->table_id), format_ip4_address, mp->address,
|
||||
mp->address_length);
|
||||
fp = mp->path;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
fformat (vam->ofp,
|
||||
" weight %d, sw_if_index %d, is_local %d, is_drop %d, is_unreach %d, "
|
||||
"is_prohitbit %d, afi %d, next_hop %U\n", ntohl (fp->weight),
|
||||
ntohl (fp->sw_if_index), fp->is_local, fp->is_drop,
|
||||
fp->is_unreach, fp->is_prohibit, fp->afi, format_ip46_address,
|
||||
fp->next_hop, fp->afi);
|
||||
fp++;
|
||||
}
|
||||
}
|
||||
|
||||
static void vl_api_ip_fib_details_t_handler_json
|
||||
(vl_api_ip_fib_details_t * mp)
|
||||
{
|
||||
vat_main_t *vam = &vat_main;
|
||||
int count = ntohl (mp->count);
|
||||
vat_json_node_t *node = NULL;
|
||||
struct in_addr ip4;
|
||||
struct in6_addr ip6;
|
||||
vl_api_fib_path_t *fp;
|
||||
int i;
|
||||
|
||||
if (VAT_JSON_ARRAY != vam->json_tree.type)
|
||||
{
|
||||
ASSERT (VAT_JSON_NONE == vam->json_tree.type);
|
||||
vat_json_init_array (&vam->json_tree);
|
||||
}
|
||||
node = vat_json_array_add (&vam->json_tree);
|
||||
|
||||
vat_json_init_object (node);
|
||||
vat_json_object_add_uint (node, "table", ntohl (mp->table_id));
|
||||
clib_memcpy (&ip4, &mp->address, sizeof (ip4));
|
||||
vat_json_object_add_ip4 (node, "prefix", ip4);
|
||||
vat_json_object_add_uint (node, "mask_length", mp->address_length);
|
||||
vat_json_object_add_uint (node, "path_count", count);
|
||||
fp = mp->path;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
vat_json_object_add_uint (node, "weight", ntohl (fp->weight));
|
||||
vat_json_object_add_uint (node, "sw_if_index", ntohl (fp->sw_if_index));
|
||||
vat_json_object_add_uint (node, "is_local", fp->is_local);
|
||||
vat_json_object_add_uint (node, "is_drop", fp->is_drop);
|
||||
vat_json_object_add_uint (node, "is_unreach", fp->is_unreach);
|
||||
vat_json_object_add_uint (node, "is_prohibit", fp->is_prohibit);
|
||||
vat_json_object_add_uint (node, "next_hop_afi", fp->afi);
|
||||
if (fp->afi == IP46_TYPE_IP4)
|
||||
{
|
||||
clib_memcpy (&ip4, &fp->next_hop, sizeof (ip4));
|
||||
vat_json_object_add_ip4 (node, "next_hop", ip4);
|
||||
}
|
||||
else if (fp->afi == IP46_TYPE_IP6)
|
||||
{
|
||||
clib_memcpy (&ip6, &fp->next_hop, sizeof (ip6));
|
||||
vat_json_object_add_ip6 (node, "next_hop", ip6);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
api_ip_fib_dump (vat_main_t * vam)
|
||||
{
|
||||
vl_api_ip_fib_dump_t *mp;
|
||||
f64 timeout;
|
||||
|
||||
M (IP_FIB_DUMP, ip_fib_dump);
|
||||
S;
|
||||
|
||||
/* Use a control ping for synchronization */
|
||||
{
|
||||
vl_api_control_ping_t *mp;
|
||||
M (CONTROL_PING, control_ping);
|
||||
S;
|
||||
}
|
||||
W;
|
||||
}
|
||||
|
||||
#define vl_api_ip6_fib_details_t_endian vl_noop_handler
|
||||
#define vl_api_ip6_fib_details_t_print vl_noop_handler
|
||||
|
||||
static void
|
||||
vl_api_ip6_fib_details_t_handler (vl_api_ip6_fib_details_t * mp)
|
||||
{
|
||||
vat_main_t *vam = &vat_main;
|
||||
int count = ntohl (mp->count);
|
||||
vl_api_fib_path_t *fp;
|
||||
int i;
|
||||
|
||||
fformat (vam->ofp,
|
||||
"table-id %d, prefix %U/%d\n",
|
||||
ntohl (mp->table_id), format_ip6_address, mp->address,
|
||||
mp->address_length);
|
||||
fp = mp->path;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
fformat (vam->ofp,
|
||||
" weight %d, sw_if_index %d, is_local %d, is_drop %d, is_unreach %d, "
|
||||
"is_prohitbit %d, afi %d, next_hop %U\n", ntohl (fp->weight),
|
||||
ntohl (fp->sw_if_index), fp->is_local, fp->is_drop,
|
||||
fp->is_unreach, fp->is_prohibit, fp->afi, format_ip46_address,
|
||||
fp->next_hop, fp->afi);
|
||||
fp++;
|
||||
}
|
||||
}
|
||||
|
||||
static void vl_api_ip6_fib_details_t_handler_json
|
||||
(vl_api_ip6_fib_details_t * mp)
|
||||
{
|
||||
vat_main_t *vam = &vat_main;
|
||||
int count = ntohl (mp->count);
|
||||
vat_json_node_t *node = NULL;
|
||||
struct in_addr ip4;
|
||||
struct in6_addr ip6;
|
||||
vl_api_fib_path_t *fp;
|
||||
int i;
|
||||
|
||||
if (VAT_JSON_ARRAY != vam->json_tree.type)
|
||||
{
|
||||
ASSERT (VAT_JSON_NONE == vam->json_tree.type);
|
||||
vat_json_init_array (&vam->json_tree);
|
||||
}
|
||||
node = vat_json_array_add (&vam->json_tree);
|
||||
|
||||
vat_json_init_object (node);
|
||||
vat_json_object_add_uint (node, "table", ntohl (mp->table_id));
|
||||
clib_memcpy (&ip6, &mp->address, sizeof (ip6));
|
||||
vat_json_object_add_ip6 (node, "prefix", ip6);
|
||||
vat_json_object_add_uint (node, "mask_length", mp->address_length);
|
||||
vat_json_object_add_uint (node, "path_count", count);
|
||||
fp = mp->path;
|
||||
for (i = 0; i < count; i++)
|
||||
{
|
||||
vat_json_object_add_uint (node, "weight", ntohl (fp->weight));
|
||||
vat_json_object_add_uint (node, "sw_if_index", ntohl (fp->sw_if_index));
|
||||
vat_json_object_add_uint (node, "is_local", fp->is_local);
|
||||
vat_json_object_add_uint (node, "is_drop", fp->is_drop);
|
||||
vat_json_object_add_uint (node, "is_unreach", fp->is_unreach);
|
||||
vat_json_object_add_uint (node, "is_prohibit", fp->is_prohibit);
|
||||
vat_json_object_add_uint (node, "next_hop_afi", fp->afi);
|
||||
if (fp->afi == IP46_TYPE_IP4)
|
||||
{
|
||||
clib_memcpy (&ip4, &fp->next_hop, sizeof (ip4));
|
||||
vat_json_object_add_ip4 (node, "next_hop", ip4);
|
||||
}
|
||||
else if (fp->afi == IP46_TYPE_IP6)
|
||||
{
|
||||
clib_memcpy (&ip6, &fp->next_hop, sizeof (ip6));
|
||||
vat_json_object_add_ip6 (node, "next_hop", ip6);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static int
|
||||
api_ip6_fib_dump (vat_main_t * vam)
|
||||
{
|
||||
vl_api_ip6_fib_dump_t *mp;
|
||||
f64 timeout;
|
||||
|
||||
M (IP6_FIB_DUMP, ip6_fib_dump);
|
||||
S;
|
||||
|
||||
/* Use a control ping for synchronization */
|
||||
{
|
||||
vl_api_control_ping_t *mp;
|
||||
M (CONTROL_PING, control_ping);
|
||||
S;
|
||||
}
|
||||
W;
|
||||
}
|
||||
|
||||
int
|
||||
api_classify_table_ids (vat_main_t * vam)
|
||||
{
|
||||
@ -16503,7 +16735,9 @@ _(l2_interface_pbb_tag_rewrite, \
|
||||
_(punt, "protocol <l4-protocol> [ip <ver>] [port <l4-port>] [del]") \
|
||||
_(flow_classify_set_interface, \
|
||||
"<intfc> | sw_if_index <nn> [ip4-table <nn>] [ip6-table <nn>] [del]") \
|
||||
_(flow_classify_dump, "type [ip4|ip6]")
|
||||
_(flow_classify_dump, "type [ip4|ip6]") \
|
||||
_(ip_fib_dump, "") \
|
||||
_(ip6_fib_dump, "")
|
||||
|
||||
/* List of command functions, CLI names map directly to functions */
|
||||
#define foreach_cli_function \
|
||||
|
Reference in New Issue
Block a user