mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 11:44:16 +00:00
commit
1aba7c0944
@ -498,6 +498,11 @@ If so, the box can't work as a router.
|
|||||||
Display whether the host's IP v6 forwarding is enabled or not.
|
Display whether the host's IP v6 forwarding is enabled or not.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@deffn Command {show zebra} {}
|
||||||
|
Display various statistics related to the installation and deletion
|
||||||
|
of routes, neighbor updates, and LSP's into the kernel.
|
||||||
|
@end deffn
|
||||||
|
|
||||||
@deffn Command {show zebra fpm stats} {}
|
@deffn Command {show zebra fpm stats} {}
|
||||||
Display statistics related to the zebra code that interacts with the
|
Display statistics related to the zebra code that interacts with the
|
||||||
optional Forwarding Plane Manager (FPM) component.
|
optional Forwarding Plane Manager (FPM) component.
|
||||||
|
@ -151,6 +151,10 @@ Shows requestlist of neighbor.
|
|||||||
This command shows internal routing table.
|
This command shows internal routing table.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
|
@deffn {Command} {show ipv6 ospf6 zebra} {}
|
||||||
|
Shows state about what is being redistributed between zebra and OSPF6
|
||||||
|
@end deffn
|
||||||
|
|
||||||
@node OSPF6 Configuration Examples
|
@node OSPF6 Configuration Examples
|
||||||
@section OSPF6 Configuration Examples
|
@section OSPF6 Configuration Examples
|
||||||
|
|
||||||
|
@ -304,13 +304,12 @@ ospf6_zebra_read_ipv6 (int command, struct zclient *zclient,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
DEFUN (show_zebra,
|
DEFUN (show_zebra,
|
||||||
show_zebra_cmd,
|
show_ospf6_zebra_cmd,
|
||||||
"show zebra",
|
"show ipv6 ospf6 zebra",
|
||||||
SHOW_STR
|
SHOW_STR
|
||||||
|
IPV6_STR
|
||||||
|
OSPF6_STR
|
||||||
"Zebra information\n")
|
"Zebra information\n")
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -836,7 +835,7 @@ ospf6_zebra_init (struct thread_master *master)
|
|||||||
install_node (&zebra_node, config_write_ospf6_zebra);
|
install_node (&zebra_node, config_write_ospf6_zebra);
|
||||||
|
|
||||||
/* Install command element for zebra node. */
|
/* Install command element for zebra node. */
|
||||||
install_element (VIEW_NODE, &show_zebra_cmd);
|
install_element (VIEW_NODE, &show_ospf6_zebra_cmd);
|
||||||
install_default (ZEBRA_NODE);
|
install_default (ZEBRA_NODE);
|
||||||
install_element (ZEBRA_NODE, &redistribute_ospf6_cmd);
|
install_element (ZEBRA_NODE, &redistribute_ospf6_cmd);
|
||||||
install_element (ZEBRA_NODE, &no_redistribute_ospf6_cmd);
|
install_element (ZEBRA_NODE, &no_redistribute_ospf6_cmd);
|
||||||
|
@ -774,6 +774,7 @@ if_nbr_ipv6ll_to_ipv4ll_neigh_update (struct interface *ifp,
|
|||||||
struct in6_addr *address,
|
struct in6_addr *address,
|
||||||
int add)
|
int add)
|
||||||
{
|
{
|
||||||
|
struct zebra_vrf *zvrf = vrf_info_lookup(ifp->vrf_id);
|
||||||
char buf[16] = "169.254.0.1";
|
char buf[16] = "169.254.0.1";
|
||||||
struct in_addr ipv4_ll;
|
struct in_addr ipv4_ll;
|
||||||
char mac[6];
|
char mac[6];
|
||||||
@ -782,6 +783,7 @@ if_nbr_ipv6ll_to_ipv4ll_neigh_update (struct interface *ifp,
|
|||||||
|
|
||||||
ipv6_ll_address_to_mac(address, (u_char *)mac);
|
ipv6_ll_address_to_mac(address, (u_char *)mac);
|
||||||
kernel_neigh_update (add, ifp->ifindex, ipv4_ll.s_addr, mac, 6);
|
kernel_neigh_update (add, ifp->ifindex, ipv4_ll.s_addr, mac, 6);
|
||||||
|
zvrf->neigh_updates++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -927,6 +927,7 @@ lsp_process (struct work_queue *wq, void *data)
|
|||||||
zebra_lsp_t *lsp;
|
zebra_lsp_t *lsp;
|
||||||
zebra_nhlfe_t *oldbest, *newbest;
|
zebra_nhlfe_t *oldbest, *newbest;
|
||||||
char buf[BUFSIZ], buf2[BUFSIZ];
|
char buf[BUFSIZ], buf2[BUFSIZ];
|
||||||
|
struct zebra_vrf *zvrf = vrf_info_lookup (VRF_DEFAULT);
|
||||||
|
|
||||||
lsp = (zebra_lsp_t *)data;
|
lsp = (zebra_lsp_t *)data;
|
||||||
if (!lsp) // unexpected
|
if (!lsp) // unexpected
|
||||||
@ -955,15 +956,24 @@ lsp_process (struct work_queue *wq, void *data)
|
|||||||
{
|
{
|
||||||
/* Not already installed */
|
/* Not already installed */
|
||||||
if (newbest)
|
if (newbest)
|
||||||
kernel_add_lsp (lsp);
|
{
|
||||||
|
kernel_add_lsp (lsp);
|
||||||
|
zvrf->lsp_installs++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Installed, may need an update and/or delete. */
|
/* Installed, may need an update and/or delete. */
|
||||||
if (!newbest)
|
if (!newbest)
|
||||||
kernel_del_lsp (lsp);
|
{
|
||||||
|
kernel_del_lsp (lsp);
|
||||||
|
zvrf->lsp_removals++;
|
||||||
|
}
|
||||||
else if (CHECK_FLAG (lsp->flags, LSP_FLAG_CHANGED))
|
else if (CHECK_FLAG (lsp->flags, LSP_FLAG_CHANGED))
|
||||||
kernel_upd_lsp (lsp);
|
{
|
||||||
|
kernel_upd_lsp (lsp);
|
||||||
|
zvrf->lsp_installs++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return WQ_SUCCESS;
|
return WQ_SUCCESS;
|
||||||
|
@ -1114,6 +1114,7 @@ rib_install_kernel (struct route_node *rn, struct rib *rib, struct rib *old)
|
|||||||
rib_table_info_t *info = srcdest_rnode_table_info(rn);
|
rib_table_info_t *info = srcdest_rnode_table_info(rn);
|
||||||
int recursing;
|
int recursing;
|
||||||
struct prefix *p, *src_p;
|
struct prefix *p, *src_p;
|
||||||
|
struct zebra_vrf *zvrf = vrf_info_lookup (rib->vrf_id);
|
||||||
|
|
||||||
srcdest_rnode_prefixes (rn, &p, &src_p);
|
srcdest_rnode_prefixes (rn, &p, &src_p);
|
||||||
|
|
||||||
@ -1130,6 +1131,7 @@ rib_install_kernel (struct route_node *rn, struct rib *rib, struct rib *old)
|
|||||||
*/
|
*/
|
||||||
hook_call(rib_update, rn, "installing in kernel");
|
hook_call(rib_update, rn, "installing in kernel");
|
||||||
ret = kernel_route_rib (p, src_p, old, rib);
|
ret = kernel_route_rib (p, src_p, old, rib);
|
||||||
|
zvrf->installs++;
|
||||||
|
|
||||||
/* If install succeeds, update FIB flag for nexthops. */
|
/* If install succeeds, update FIB flag for nexthops. */
|
||||||
if (!ret)
|
if (!ret)
|
||||||
@ -1158,6 +1160,7 @@ rib_uninstall_kernel (struct route_node *rn, struct rib *rib)
|
|||||||
rib_table_info_t *info = srcdest_rnode_table_info(rn);
|
rib_table_info_t *info = srcdest_rnode_table_info(rn);
|
||||||
int recursing;
|
int recursing;
|
||||||
struct prefix *p, *src_p;
|
struct prefix *p, *src_p;
|
||||||
|
struct zebra_vrf *zvrf = vrf_info_lookup (rib->vrf_id);
|
||||||
|
|
||||||
srcdest_rnode_prefixes (rn, &p, &src_p);
|
srcdest_rnode_prefixes (rn, &p, &src_p);
|
||||||
|
|
||||||
@ -1174,6 +1177,7 @@ rib_uninstall_kernel (struct route_node *rn, struct rib *rib)
|
|||||||
*/
|
*/
|
||||||
hook_call(rib_update, rn, "uninstalling from kernel");
|
hook_call(rib_update, rn, "uninstalling from kernel");
|
||||||
ret = kernel_route_rib (p, src_p, rib, NULL);
|
ret = kernel_route_rib (p, src_p, rib, NULL);
|
||||||
|
zvrf->removals++;
|
||||||
|
|
||||||
for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing))
|
for (ALL_NEXTHOPS_RO(rib->nexthop, nexthop, tnexthop, recursing))
|
||||||
UNSET_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB);
|
UNSET_FLAG (nexthop->flags, NEXTHOP_FLAG_FIB);
|
||||||
|
@ -94,6 +94,13 @@ struct zebra_vrf
|
|||||||
/* MPLS processing flags */
|
/* MPLS processing flags */
|
||||||
u_int16_t mpls_flags;
|
u_int16_t mpls_flags;
|
||||||
#define MPLS_FLAG_SCHEDULE_LSPS (1 << 0)
|
#define MPLS_FLAG_SCHEDULE_LSPS (1 << 0)
|
||||||
|
|
||||||
|
/* Route Installs */
|
||||||
|
uint64_t installs;
|
||||||
|
uint64_t removals;
|
||||||
|
uint64_t neigh_updates;
|
||||||
|
uint64_t lsp_installs;
|
||||||
|
uint64_t lsp_removals;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline vrf_id_t
|
static inline vrf_id_t
|
||||||
|
@ -2817,6 +2817,28 @@ DEFUN (no_ip_forwarding,
|
|||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DEFUN (show_zebra,
|
||||||
|
show_zebra_cmd,
|
||||||
|
"show zebra",
|
||||||
|
SHOW_STR
|
||||||
|
"Zebra information\n")
|
||||||
|
{
|
||||||
|
struct vrf *vrf;
|
||||||
|
|
||||||
|
vty_out (vty, " Route Route Neighbor LSP LSP%s", VTY_NEWLINE);
|
||||||
|
vty_out (vty, "VRF Installs Removals Updates Installs Removals%s", VTY_NEWLINE);
|
||||||
|
RB_FOREACH (vrf, vrf_name_head, &vrfs_by_name)
|
||||||
|
{
|
||||||
|
struct zebra_vrf *zvrf = vrf->info;
|
||||||
|
vty_out (vty,"%-25s %10ld %10ld %10ld %10ld %10ld%s",
|
||||||
|
vrf->name, zvrf->installs, zvrf->removals,
|
||||||
|
zvrf->neigh_updates, zvrf->lsp_installs, zvrf->lsp_removals,
|
||||||
|
VTY_NEWLINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return CMD_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
/* This command is for debugging purpose. */
|
/* This command is for debugging purpose. */
|
||||||
DEFUN (show_zebra_client,
|
DEFUN (show_zebra_client,
|
||||||
show_zebra_client_cmd,
|
show_zebra_client_cmd,
|
||||||
@ -3005,6 +3027,7 @@ zebra_init (void)
|
|||||||
install_element (VIEW_NODE, &show_ip_forwarding_cmd);
|
install_element (VIEW_NODE, &show_ip_forwarding_cmd);
|
||||||
install_element (CONFIG_NODE, &ip_forwarding_cmd);
|
install_element (CONFIG_NODE, &ip_forwarding_cmd);
|
||||||
install_element (CONFIG_NODE, &no_ip_forwarding_cmd);
|
install_element (CONFIG_NODE, &no_ip_forwarding_cmd);
|
||||||
|
install_element (ENABLE_NODE, &show_zebra_cmd);
|
||||||
install_element (ENABLE_NODE, &show_zebra_client_cmd);
|
install_element (ENABLE_NODE, &show_zebra_client_cmd);
|
||||||
install_element (ENABLE_NODE, &show_zebra_client_summary_cmd);
|
install_element (ENABLE_NODE, &show_zebra_client_summary_cmd);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user