Dump routes (VPP-500)

Change-Id: I86e7382395a8b6471a0deaf57163718d41b71b83
Signed-off-by: Steven <sluong@cisco.com>
This commit is contained in:
Steven
2016-11-02 10:40:09 -07:00
committed by Neale Ranns
parent d4895d5415
commit 01b071222d
11 changed files with 775 additions and 11 deletions

View File

@ -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 \