Merge pull request #1363 from donaldsharp/z_improvements

Z improvements
This commit is contained in:
Russ White 2017-10-31 20:27:19 -04:00 committed by GitHub
commit 453a5340a8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 85 additions and 20 deletions

View File

@ -358,6 +358,7 @@ struct cmd_node {
#define PCE_STR "PCE Router Information specific commands\n"
#define MPLS_STR "MPLS information\n"
#define WATCHFRR_STR "watchfrr information\n"
#define ZEBRA_STR "Zebra information\n"
#define CONF_BACKUP_EXT ".sav"

View File

@ -256,7 +256,7 @@ DEFUN (show_zebra,
SHOW_STR
IPV6_STR
OSPF6_STR
"Zebra information\n")
ZEBRA_STR)
{
int i;
if (zclient == NULL) {

View File

@ -1182,7 +1182,7 @@ DEFUN (debug_ospf_zebra,
"debug ospf zebra [<interface|redistribute>]",
DEBUG_STR
OSPF_STR
"OSPF Zebra information\n"
ZEBRA_STR
"Zebra interface\n"
"Zebra redistribute\n")
{
@ -1195,7 +1195,7 @@ DEFUN (debug_ospf_instance_zebra,
DEBUG_STR
OSPF_STR
"Instance ID\n"
"OSPF Zebra information\n"
ZEBRA_STR
"Zebra interface\n"
"Zebra redistribute\n")
{
@ -1245,7 +1245,7 @@ DEFUN (no_debug_ospf_zebra,
NO_STR
DEBUG_STR
OSPF_STR
"OSPF Zebra information\n"
ZEBRA_STR
"Zebra interface\n"
"Zebra redistribute\n")
{
@ -1259,7 +1259,7 @@ DEFUN (no_debug_ospf_instance_zebra,
DEBUG_STR
OSPF_STR
"Instance ID\n"
"OSPF Zebra information\n"
ZEBRA_STR
"Zebra interface\n"
"Zebra redistribute\n")
{

View File

@ -53,6 +53,7 @@
/* Zebra instance */
struct zebra_t zebrad = {
.rtm_table_default = 0,
.packets_to_process = ZEBRA_ZAPI_PACKETS_TO_PROCESS,
};
/* process id. */

View File

@ -1413,7 +1413,7 @@ DEFUN (show_zebra_fpm_stats,
show_zebra_fpm_stats_cmd,
"show zebra fpm stats",
SHOW_STR
"Zebra information\n"
ZEBRA_STR
"Forwarding Path Manager information\n"
"Statistics\n")
{
@ -1428,7 +1428,7 @@ DEFUN (clear_zebra_fpm_stats,
clear_zebra_fpm_stats_cmd,
"clear zebra fpm stats",
CLEAR_STR
"Zebra information\n"
ZEBRA_STR
"Clear Forwarding Path Manager information\n"
"Statistics\n")
{

View File

@ -57,12 +57,6 @@ DEFINE_HOOK(rib_update, (struct route_node * rn, const char *reason),
/* Should we allow non Quagga processes to delete our routes */
extern int allow_delete;
/* Hold time for RIB process, should be very minimal.
* it is useful to able to set it otherwise for testing, hence exported
* as global here for test-rig code.
*/
int rib_process_hold_time = 10;
/* Each route type's string and default distance value. */
static const struct {
int key;
@ -1899,7 +1893,7 @@ static void rib_queue_init(struct zebra_t *zebra)
zebra->ribq->spec.completion_func = &meta_queue_process_complete;
/* XXX: TODO: These should be runtime configurable via vty */
zebra->ribq->spec.max_retries = 3;
zebra->ribq->spec.hold = rib_process_hold_time;
zebra->ribq->spec.hold = ZEBRA_RIB_PROCESS_HOLD_TIME;
if (!(zebra->mq = meta_queue_new())) {
zlog_err("%s: could not initialise meta queue!", __func__);

View File

@ -392,7 +392,7 @@ DEFUN (no_set_src,
DEFUN (zebra_route_map_timer,
zebra_route_map_timer_cmd,
"zebra route-map delay-timer (0-600)",
"Zebra information\n"
ZEBRA_STR
"Set route-map parameters\n"
"Time to wait before route-map updates are processed\n"
"0 means event-driven updates are disabled\n")
@ -410,7 +410,7 @@ DEFUN (no_zebra_route_map_timer,
no_zebra_route_map_timer_cmd,
"no zebra route-map delay-timer [(0-600)]",
NO_STR
"Zebra information\n"
ZEBRA_STR
"Set route-map parameters\n"
"Reset delay-timer to default value, 30 secs\n"
"0 means event-driven updates are disabled\n")

View File

@ -44,6 +44,7 @@
#include "lib/json.h"
#include "zebra/zebra_vxlan.h"
#include "zebra/zebra_vty_clippy.c"
#include "zebra/zserv.h"
extern int allow_delete;
@ -2186,6 +2187,59 @@ DEFUN (ip_zebra_import_table_distance,
return ret;
}
DEFUN_HIDDEN (zebra_packet_process,
zebra_packet_process_cmd,
"zebra zapi-packets (1-10000)",
ZEBRA_STR
"Zapi Protocol\n"
"Number of packets to process before relinquishing thread\n")
{
uint32_t packets = strtoul(argv[2]->arg, NULL, 10);
zebrad.packets_to_process = packets;
return CMD_SUCCESS;
}
DEFUN_HIDDEN (no_zebra_packet_process,
no_zebra_packet_process_cmd,
"no zebra zapi-packets [(1-10000)]",
NO_STR
ZEBRA_STR
"Zapi Protocol\n"
"Number of packets to process before relinquishing thread\n")
{
zebrad.packets_to_process = ZEBRA_ZAPI_PACKETS_TO_PROCESS;
return CMD_SUCCESS;
}
DEFUN_HIDDEN (zebra_workqueue_timer,
zebra_workqueue_timer_cmd,
"zebra work-queue (0-10000)",
ZEBRA_STR
"Work Queue\n"
"Time in milliseconds\n")
{
uint32_t timer = strtoul(argv[2]->arg, NULL, 10);
zebrad.ribq->spec.hold = timer;
return CMD_SUCCESS;
}
DEFUN_HIDDEN (no_zebra_workqueue_timer,
no_zebra_workqueue_timer_cmd,
"no zebra work-queue [(0-10000)]",
NO_STR
ZEBRA_STR
"Work Queue\n"
"Time in milliseconds\n")
{
zebrad.ribq->spec.hold = ZEBRA_RIB_PROCESS_HOLD_TIME;
return CMD_SUCCESS;
}
DEFUN (no_ip_zebra_import_table,
no_ip_zebra_import_table_cmd,
"no ip import-table (1-252) [distance (1-255)] [route-map NAME]",
@ -2231,6 +2285,13 @@ static int config_write_protocol(struct vty *vty)
if (zebra_rnh_ipv6_default_route)
vty_out(vty, "ipv6 nht resolve-via-default\n");
if (zebrad.ribq->spec.hold != ZEBRA_RIB_PROCESS_HOLD_TIME)
vty_out(vty, "zebra work-queue %u\n", zebrad.ribq->spec.hold);
if (zebrad.packets_to_process != ZEBRA_ZAPI_PACKETS_TO_PROCESS)
vty_out(vty,
"zebra zapi-packets %u\n", zebrad.packets_to_process);
enum multicast_mode ipv4_multicast_mode = multicast_mode_ipv4_get();
if (ipv4_multicast_mode != MCAST_NO_CONFIG)
@ -2272,6 +2333,10 @@ void zebra_vty_init(void)
install_element(CONFIG_NODE, &ip_route_cmd);
install_element(CONFIG_NODE, &ip_zebra_import_table_distance_cmd);
install_element(CONFIG_NODE, &no_ip_zebra_import_table_cmd);
install_element(CONFIG_NODE, &zebra_workqueue_timer_cmd);
install_element(CONFIG_NODE, &no_zebra_workqueue_timer_cmd);
install_element(CONFIG_NODE, &zebra_packet_process_cmd);
install_element(CONFIG_NODE, &no_zebra_packet_process_cmd);
install_element(VIEW_NODE, &show_vrf_cmd);
install_element(VIEW_NODE, &show_route_cmd);

View File

@ -2387,7 +2387,7 @@ static int zebra_client_read(struct thread *thread)
uint8_t marker, version;
vrf_id_t vrf_id;
struct zebra_vrf *zvrf;
int packets = 10;
int packets = zebrad.packets_to_process;
/* Get thread data. Reset reading thread because I'm running. */
sock = THREAD_FD(thread);
@ -2841,7 +2841,7 @@ DEFUN (show_zebra,
show_zebra_cmd,
"show zebra",
SHOW_STR
"Zebra information\n")
ZEBRA_STR)
{
struct vrf *vrf;
@ -2866,7 +2866,7 @@ DEFUN (show_zebra_client,
show_zebra_client_cmd,
"show zebra client",
SHOW_STR
"Zebra information\n"
ZEBRA_STR
"Client information\n")
{
struct listnode *node;
@ -2883,7 +2883,7 @@ DEFUN (show_zebra_client_summary,
show_zebra_client_summary_cmd,
"show zebra client summary",
SHOW_STR
"Zebra information brief\n"
ZEBRA_STR
"Client information brief\n"
"Brief Summary\n")
{

View File

@ -132,11 +132,15 @@ struct zebra_t {
u_int32_t rtm_table_default;
/* rib work queue */
#define ZEBRA_RIB_PROCESS_HOLD_TIME 10
struct work_queue *ribq;
struct meta_queue *mq;
/* LSP work queue */
struct work_queue *lsp_process_q;
#define ZEBRA_ZAPI_PACKETS_TO_PROCESS 10
u_int32_t packets_to_process;
};
extern struct zebra_t zebrad;
extern unsigned int multipath_num;