mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 22:29:23 +00:00
Merge branch 'master' of https://github.com/FRRouting/frr into pim_dev
This commit is contained in:
commit
f6a1dd837b
@ -40,8 +40,6 @@
|
|||||||
#include "bgpd/bgp_updgrp.h"
|
#include "bgpd/bgp_updgrp.h"
|
||||||
#include "bgpd/bgp_mplsvpn.h"
|
#include "bgpd/bgp_mplsvpn.h"
|
||||||
|
|
||||||
#define BGP_ADDPATH_STR 20
|
|
||||||
|
|
||||||
unsigned long conf_bgp_debug_as4;
|
unsigned long conf_bgp_debug_as4;
|
||||||
unsigned long conf_bgp_debug_neighbor_events;
|
unsigned long conf_bgp_debug_neighbor_events;
|
||||||
unsigned long conf_bgp_debug_events;
|
unsigned long conf_bgp_debug_events;
|
||||||
@ -2139,7 +2137,12 @@ bgp_debug_rdpfxpath2str (struct prefix_rd *prd, union prefixconstptr pu,
|
|||||||
{
|
{
|
||||||
char rd_buf[RD_ADDRSTRLEN];
|
char rd_buf[RD_ADDRSTRLEN];
|
||||||
char pfx_buf[PREFIX_STRLEN];
|
char pfx_buf[PREFIX_STRLEN];
|
||||||
char pathid_buf[BGP_ADDPATH_STR];
|
/* ' with addpath ID ' 17
|
||||||
|
* max strlen of uint32 + 10
|
||||||
|
* +/- (just in case) + 1
|
||||||
|
* null terminator + 1
|
||||||
|
* ============================ 29 */
|
||||||
|
char pathid_buf[30];
|
||||||
|
|
||||||
if (size < BGP_PRD_PATH_STRLEN)
|
if (size < BGP_PRD_PATH_STRLEN)
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -2147,7 +2150,7 @@ bgp_debug_rdpfxpath2str (struct prefix_rd *prd, union prefixconstptr pu,
|
|||||||
/* Note: Path-id is created by default, but only included in update sometimes. */
|
/* Note: Path-id is created by default, but only included in update sometimes. */
|
||||||
pathid_buf[0] = '\0';
|
pathid_buf[0] = '\0';
|
||||||
if (addpath_valid)
|
if (addpath_valid)
|
||||||
sprintf(pathid_buf, " with addpath ID %d", addpath_id);
|
snprintf(pathid_buf, sizeof(pathid_buf), " with addpath ID %u", addpath_id);
|
||||||
|
|
||||||
if (prd)
|
if (prd)
|
||||||
snprintf (str, size, "RD %s %s%s",
|
snprintf (str, size, "RD %s %s%s",
|
||||||
|
@ -10988,10 +10988,10 @@ bgp_route_init (void)
|
|||||||
install_element (BGP_IPV6_NODE, &ipv6_bgp_network_route_map_cmd);
|
install_element (BGP_IPV6_NODE, &ipv6_bgp_network_route_map_cmd);
|
||||||
install_element (BGP_IPV6_NODE, &no_bgp_table_map_cmd);
|
install_element (BGP_IPV6_NODE, &no_bgp_table_map_cmd);
|
||||||
install_element (BGP_IPV6_NODE, &no_ipv6_bgp_network_cmd);
|
install_element (BGP_IPV6_NODE, &no_ipv6_bgp_network_cmd);
|
||||||
install_element (BGP_IPV6_NODE, &ipv6_bgp_network_label_index_cmd);
|
install_element (BGP_IPV6L_NODE, &ipv6_bgp_network_label_index_cmd);
|
||||||
install_element (BGP_IPV6_NODE, &no_ipv6_bgp_network_label_index_cmd);
|
install_element (BGP_IPV6L_NODE, &no_ipv6_bgp_network_label_index_cmd);
|
||||||
install_element (BGP_IPV6_NODE, &ipv6_bgp_network_label_index_route_map_cmd);
|
install_element (BGP_IPV6L_NODE, &ipv6_bgp_network_label_index_route_map_cmd);
|
||||||
install_element (BGP_IPV6_NODE, &no_ipv6_bgp_network_label_index_route_map_cmd);
|
install_element (BGP_IPV6L_NODE, &no_ipv6_bgp_network_label_index_route_map_cmd);
|
||||||
|
|
||||||
install_element (BGP_IPV6_NODE, &ipv6_aggregate_address_cmd);
|
install_element (BGP_IPV6_NODE, &ipv6_aggregate_address_cmd);
|
||||||
install_element (BGP_IPV6_NODE, &no_ipv6_aggregate_address_cmd);
|
install_element (BGP_IPV6_NODE, &no_ipv6_aggregate_address_cmd);
|
||||||
|
@ -651,17 +651,6 @@ subgroup_packets_to_build (struct update_subgroup *subgrp)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
bgp_info_addpath_tx_str (int addpath_encode, u_int32_t addpath_tx_id,
|
|
||||||
char *buf)
|
|
||||||
{
|
|
||||||
buf[0] = '\0';
|
|
||||||
if (addpath_encode)
|
|
||||||
sprintf(buf, " with addpath ID %d", addpath_tx_id);
|
|
||||||
else
|
|
||||||
buf[0] = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make BGP update packet. */
|
/* Make BGP update packet. */
|
||||||
struct bpacket *
|
struct bpacket *
|
||||||
subgroup_update_packet (struct update_subgroup *subgrp)
|
subgroup_update_packet (struct update_subgroup *subgrp)
|
||||||
@ -1079,11 +1068,21 @@ subgroup_default_update_packet (struct update_subgroup *subgrp,
|
|||||||
{
|
{
|
||||||
char attrstr[BUFSIZ];
|
char attrstr[BUFSIZ];
|
||||||
char buf[PREFIX_STRLEN];
|
char buf[PREFIX_STRLEN];
|
||||||
|
/* ' with addpath ID ' 17
|
||||||
|
* max strlen of uint32 + 10
|
||||||
|
* +/- (just in case) + 1
|
||||||
|
* null terminator + 1
|
||||||
|
* ============================ 29 */
|
||||||
char tx_id_buf[30];
|
char tx_id_buf[30];
|
||||||
|
|
||||||
attrstr[0] = '\0';
|
attrstr[0] = '\0';
|
||||||
|
|
||||||
bgp_dump_attr (attr, attrstr, BUFSIZ);
|
bgp_dump_attr (attr, attrstr, BUFSIZ);
|
||||||
bgp_info_addpath_tx_str (addpath_encode, BGP_ADDPATH_TX_ID_FOR_DEFAULT_ORIGINATE, tx_id_buf);
|
|
||||||
|
if (addpath_encode)
|
||||||
|
snprintf(tx_id_buf, sizeof (tx_id_buf), " with addpath ID %u",
|
||||||
|
BGP_ADDPATH_TX_ID_FOR_DEFAULT_ORIGINATE);
|
||||||
|
|
||||||
zlog_debug ("u%" PRIu64 ":s%" PRIu64 " send UPDATE %s%s %s",
|
zlog_debug ("u%" PRIu64 ":s%" PRIu64 " send UPDATE %s%s %s",
|
||||||
(SUBGRP_UPDGRP (subgrp))->id, subgrp->id,
|
(SUBGRP_UPDGRP (subgrp))->id, subgrp->id,
|
||||||
prefix2str (&p, buf, sizeof (buf)),
|
prefix2str (&p, buf, sizeof (buf)),
|
||||||
@ -1153,9 +1152,17 @@ subgroup_default_withdraw_packet (struct update_subgroup *subgrp)
|
|||||||
if (bgp_debug_update(NULL, &p, subgrp->update_group, 0))
|
if (bgp_debug_update(NULL, &p, subgrp->update_group, 0))
|
||||||
{
|
{
|
||||||
char buf[PREFIX_STRLEN];
|
char buf[PREFIX_STRLEN];
|
||||||
char tx_id_buf[INET6_BUFSIZ];
|
/* ' with addpath ID ' 17
|
||||||
|
* max strlen of uint32 + 10
|
||||||
|
* +/- (just in case) + 1
|
||||||
|
* null terminator + 1
|
||||||
|
* ============================ 29 */
|
||||||
|
char tx_id_buf[30];
|
||||||
|
|
||||||
|
if (addpath_encode)
|
||||||
|
snprintf(tx_id_buf, sizeof (tx_id_buf), " with addpath ID %u",
|
||||||
|
BGP_ADDPATH_TX_ID_FOR_DEFAULT_ORIGINATE);
|
||||||
|
|
||||||
bgp_info_addpath_tx_str (addpath_encode, BGP_ADDPATH_TX_ID_FOR_DEFAULT_ORIGINATE, tx_id_buf);
|
|
||||||
zlog_debug ("u%" PRIu64 ":s%" PRIu64 " send UPDATE %s%s -- unreachable",
|
zlog_debug ("u%" PRIu64 ":s%" PRIu64 " send UPDATE %s%s -- unreachable",
|
||||||
(SUBGRP_UPDGRP (subgrp))->id, subgrp->id,
|
(SUBGRP_UPDGRP (subgrp))->id, subgrp->id,
|
||||||
prefix2str (&p, buf, sizeof (buf)), tx_id_buf);
|
prefix2str (&p, buf, sizeof (buf)), tx_id_buf);
|
||||||
|
@ -12244,6 +12244,7 @@ lcommunity_list_set_vty (struct vty *vty, int argc, struct cmd_token **argv,
|
|||||||
return CMD_WARNING;
|
return CMD_WARNING;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
idx = 0;
|
||||||
argv_find (argv, argc, "AA:BB:CC", &idx);
|
argv_find (argv, argc, "AA:BB:CC", &idx);
|
||||||
argv_find (argv, argc, "LINE", &idx);
|
argv_find (argv, argc, "LINE", &idx);
|
||||||
/* Concat community string argument. */
|
/* Concat community string argument. */
|
||||||
|
14
lib/thread.c
14
lib/thread.c
@ -393,6 +393,8 @@ thread_master_create (void)
|
|||||||
rv->handler.pfdcount = 0;
|
rv->handler.pfdcount = 0;
|
||||||
rv->handler.pfds = XCALLOC (MTYPE_THREAD_MASTER,
|
rv->handler.pfds = XCALLOC (MTYPE_THREAD_MASTER,
|
||||||
sizeof (struct pollfd) * rv->handler.pfdsize);
|
sizeof (struct pollfd) * rv->handler.pfdsize);
|
||||||
|
rv->handler.copy = XCALLOC (MTYPE_THREAD_MASTER,
|
||||||
|
sizeof (struct pollfd) * rv->handler.pfdsize);
|
||||||
|
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
@ -544,6 +546,7 @@ thread_master_free (struct thread_master *m)
|
|||||||
close (m->io_pipe[1]);
|
close (m->io_pipe[1]);
|
||||||
|
|
||||||
XFREE (MTYPE_THREAD_MASTER, m->handler.pfds);
|
XFREE (MTYPE_THREAD_MASTER, m->handler.pfds);
|
||||||
|
XFREE (MTYPE_THREAD_MASTER, m->handler.copy);
|
||||||
XFREE (MTYPE_THREAD_MASTER, m);
|
XFREE (MTYPE_THREAD_MASTER, m);
|
||||||
|
|
||||||
pthread_mutex_lock (&cpu_record_mtx);
|
pthread_mutex_lock (&cpu_record_mtx);
|
||||||
@ -647,9 +650,6 @@ static int
|
|||||||
fd_poll (struct thread_master *m, struct pollfd *pfds, nfds_t pfdsize,
|
fd_poll (struct thread_master *m, struct pollfd *pfds, nfds_t pfdsize,
|
||||||
nfds_t count, struct timeval *timer_wait)
|
nfds_t count, struct timeval *timer_wait)
|
||||||
{
|
{
|
||||||
if (count == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* If timer_wait is null here, that means poll() should block indefinitely,
|
/* If timer_wait is null here, that means poll() should block indefinitely,
|
||||||
* unless the thread_master has overriden it by setting ->selectpoll_timeout.
|
* unless the thread_master has overriden it by setting ->selectpoll_timeout.
|
||||||
* If the value is positive, it specifies the maximum number of milliseconds
|
* If the value is positive, it specifies the maximum number of milliseconds
|
||||||
@ -1231,14 +1231,12 @@ thread_fetch (struct thread_master *m, struct thread *fetch)
|
|||||||
timer_wait = &timer_val;
|
timer_wait = &timer_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy pollfds so we can unlock during blocking calls to poll() */
|
|
||||||
struct pollfd pfds[m->handler.pfdsize];
|
|
||||||
unsigned int count = m->handler.pfdcount + m->handler.pfdcountsnmp;
|
unsigned int count = m->handler.pfdcount + m->handler.pfdcountsnmp;
|
||||||
memcpy (pfds, m->handler.pfds, count * sizeof (struct pollfd));
|
memcpy (m->handler.copy, m->handler.pfds, count * sizeof (struct pollfd));
|
||||||
|
|
||||||
pthread_mutex_unlock (&m->mtx);
|
pthread_mutex_unlock (&m->mtx);
|
||||||
{
|
{
|
||||||
num = fd_poll (m, pfds, m->handler.pfdsize, count, timer_wait);
|
num = fd_poll (m, m->handler.copy, m->handler.pfdsize, count, timer_wait);
|
||||||
}
|
}
|
||||||
pthread_mutex_lock (&m->mtx);
|
pthread_mutex_lock (&m->mtx);
|
||||||
|
|
||||||
@ -1263,7 +1261,7 @@ thread_fetch (struct thread_master *m, struct thread *fetch)
|
|||||||
|
|
||||||
/* Got IO, process it */
|
/* Got IO, process it */
|
||||||
if (num > 0)
|
if (num > 0)
|
||||||
thread_process_io (m, pfds, num, count);
|
thread_process_io (m, m->handler.copy, num, count);
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
/* If any threads were made ready above (I/O or foreground timer),
|
/* If any threads were made ready above (I/O or foreground timer),
|
||||||
|
@ -53,7 +53,10 @@ struct fd_handler
|
|||||||
nfds_t pfdcountsnmp;
|
nfds_t pfdcountsnmp;
|
||||||
/* number of pfd that fit in the allocated space of pfds */
|
/* number of pfd that fit in the allocated space of pfds */
|
||||||
nfds_t pfdsize;
|
nfds_t pfdsize;
|
||||||
|
/* file descriptors to monitor for i/o */
|
||||||
struct pollfd *pfds;
|
struct pollfd *pfds;
|
||||||
|
/* chunk used for temp copy of pollfds */
|
||||||
|
struct pollfd *copy;
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Master of the theads. */
|
/* Master of the theads. */
|
||||||
|
@ -619,21 +619,23 @@ DEFUN (area_filter_list,
|
|||||||
"Filter networks sent to this area\n"
|
"Filter networks sent to this area\n"
|
||||||
"Filter networks sent from this area\n")
|
"Filter networks sent from this area\n")
|
||||||
{
|
{
|
||||||
int idx_ipv4 = 1;
|
char *inout = argv[argc - 1]->text;
|
||||||
int idx_word = 4;
|
char *areaid = argv[1]->arg;
|
||||||
|
char *plistname = argv[4]->arg;
|
||||||
|
|
||||||
struct ospf6_area *area;
|
struct ospf6_area *area;
|
||||||
struct prefix_list *plist;
|
struct prefix_list *plist;
|
||||||
|
|
||||||
OSPF6_CMD_AREA_GET (argv[idx_ipv4]->arg, area);
|
OSPF6_CMD_AREA_GET (areaid, area);
|
||||||
|
|
||||||
plist = prefix_list_lookup (AFI_IP6, argv[idx_ipv4]->arg);
|
plist = prefix_list_lookup (AFI_IP6, plistname);
|
||||||
if (strncmp (argv[idx_word]->arg, "in", 2) == 0)
|
if (strmatch (inout, "in"))
|
||||||
{
|
{
|
||||||
PREFIX_LIST_IN (area) = plist;
|
PREFIX_LIST_IN (area) = plist;
|
||||||
if (PREFIX_NAME_IN (area))
|
if (PREFIX_NAME_IN (area))
|
||||||
free (PREFIX_NAME_IN (area));
|
free (PREFIX_NAME_IN (area));
|
||||||
|
|
||||||
PREFIX_NAME_IN (area) = strdup (argv[idx_ipv4]->arg);
|
PREFIX_NAME_IN (area) = strdup (plistname);
|
||||||
ospf6_abr_reimport (area);
|
ospf6_abr_reimport (area);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -642,7 +644,7 @@ DEFUN (area_filter_list,
|
|||||||
if (PREFIX_NAME_OUT (area))
|
if (PREFIX_NAME_OUT (area))
|
||||||
free (PREFIX_NAME_OUT (area));
|
free (PREFIX_NAME_OUT (area));
|
||||||
|
|
||||||
PREFIX_NAME_OUT (area) = strdup (argv[idx_ipv4]->arg);
|
PREFIX_NAME_OUT (area) = strdup (plistname);
|
||||||
ospf6_abr_enable_area (area);
|
ospf6_abr_enable_area (area);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -661,16 +663,18 @@ DEFUN (no_area_filter_list,
|
|||||||
"Filter networks sent to this area\n"
|
"Filter networks sent to this area\n"
|
||||||
"Filter networks sent from this area\n")
|
"Filter networks sent from this area\n")
|
||||||
{
|
{
|
||||||
int idx_ipv4 = 2;
|
char *inout = argv[argc - 1]->text;
|
||||||
int idx_word = 5;
|
char *areaid = argv[2]->arg;
|
||||||
|
char *plistname = argv[5]->arg;
|
||||||
|
|
||||||
struct ospf6_area *area;
|
struct ospf6_area *area;
|
||||||
|
|
||||||
OSPF6_CMD_AREA_GET (argv[idx_ipv4]->arg, area);
|
OSPF6_CMD_AREA_GET (areaid, area);
|
||||||
|
|
||||||
if (strncmp (argv[idx_word]->arg, "in", 2) == 0)
|
if (strmatch (inout, "in"))
|
||||||
{
|
{
|
||||||
if (PREFIX_NAME_IN (area))
|
if (PREFIX_NAME_IN (area))
|
||||||
if (strcmp (PREFIX_NAME_IN (area), argv[idx_ipv4]->arg) != 0)
|
if (!strmatch (PREFIX_NAME_IN (area), plistname))
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
|
|
||||||
PREFIX_LIST_IN (area) = NULL;
|
PREFIX_LIST_IN (area) = NULL;
|
||||||
@ -683,7 +687,7 @@ DEFUN (no_area_filter_list,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (PREFIX_NAME_OUT (area))
|
if (PREFIX_NAME_OUT (area))
|
||||||
if (strcmp (PREFIX_NAME_OUT (area), argv[idx_ipv4]->arg) != 0)
|
if (!strmatch (PREFIX_NAME_OUT (area), plistname))
|
||||||
return CMD_SUCCESS;
|
return CMD_SUCCESS;
|
||||||
|
|
||||||
PREFIX_LIST_OUT (area) = NULL;
|
PREFIX_LIST_OUT (area) = NULL;
|
||||||
|
@ -3535,7 +3535,6 @@ show_ip_ospf_interface_common (struct vty *vty, struct ospf *ospf, int argc,
|
|||||||
if (use_json)
|
if (use_json)
|
||||||
{
|
{
|
||||||
json = json_object_new_object();
|
json = json_object_new_object();
|
||||||
json_interface_sub = json_object_new_object();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ospf->instance)
|
if (ospf->instance)
|
||||||
@ -3554,7 +3553,11 @@ show_ip_ospf_interface_common (struct vty *vty, struct ospf *ospf, int argc,
|
|||||||
{
|
{
|
||||||
if (ospf_oi_count(ifp))
|
if (ospf_oi_count(ifp))
|
||||||
{
|
{
|
||||||
|
if (use_json)
|
||||||
|
json_interface_sub = json_object_new_object();
|
||||||
|
|
||||||
show_ip_ospf_interface_sub (vty, ospf, ifp, json_interface_sub, use_json);
|
show_ip_ospf_interface_sub (vty, ospf, ifp, json_interface_sub, use_json);
|
||||||
|
|
||||||
if (use_json)
|
if (use_json)
|
||||||
json_object_object_add (json, ifp->name, json_interface_sub);
|
json_object_object_add (json, ifp->name, json_interface_sub);
|
||||||
}
|
}
|
||||||
@ -3572,7 +3575,11 @@ show_ip_ospf_interface_common (struct vty *vty, struct ospf *ospf, int argc,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (use_json)
|
||||||
|
json_interface_sub = json_object_new_object();
|
||||||
|
|
||||||
show_ip_ospf_interface_sub (vty, ospf, ifp, json_interface_sub, use_json);
|
show_ip_ospf_interface_sub (vty, ospf, ifp, json_interface_sub, use_json);
|
||||||
|
|
||||||
if (use_json)
|
if (use_json)
|
||||||
json_object_object_add(json, ifp->name, json_interface_sub);
|
json_object_object_add(json, ifp->name, json_interface_sub);
|
||||||
}
|
}
|
||||||
|
@ -1279,7 +1279,7 @@ pim_ifchannel_scan_forward_start (struct interface *new_ifp)
|
|||||||
* we get End of Message
|
* we get End of Message
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
pim_ifchannel_set_star_g_join_state (struct pim_ifchannel *ch, int eom, uint8_t source_flags, uint8_t join)
|
pim_ifchannel_set_star_g_join_state (struct pim_ifchannel *ch, int eom, uint8_t source_flags, uint8_t join, uint8_t starg_alone)
|
||||||
{
|
{
|
||||||
struct pim_ifchannel *child;
|
struct pim_ifchannel *child;
|
||||||
struct listnode *ch_node;
|
struct listnode *ch_node;
|
||||||
@ -1294,10 +1294,11 @@ pim_ifchannel_set_star_g_join_state (struct pim_ifchannel *ch, int eom, uint8_t
|
|||||||
for (ALL_LIST_ELEMENTS_RO (ch->sources, ch_node, child))
|
for (ALL_LIST_ELEMENTS_RO (ch->sources, ch_node, child))
|
||||||
{
|
{
|
||||||
/* Only *,G Join received and no (SG-RPT) prune.
|
/* Only *,G Join received and no (SG-RPT) prune.
|
||||||
|
eom = 1, only (W,G) join_alone is true, WC and RPT are set.
|
||||||
Scan all S,G associated to G and if any SG-RPT
|
Scan all S,G associated to G and if any SG-RPT
|
||||||
remove the SG-RPT flag.
|
remove the SG-RPT flag.
|
||||||
*/
|
*/
|
||||||
if (join && (source_flags & PIM_RPT_BIT_MASK) &&
|
if (eom && starg_alone && (source_flags & PIM_RPT_BIT_MASK) &&
|
||||||
(source_flags & PIM_WILDCARD_BIT_MASK))
|
(source_flags & PIM_WILDCARD_BIT_MASK))
|
||||||
{
|
{
|
||||||
if (PIM_IF_FLAG_TEST_S_G_RPT(child->flags))
|
if (PIM_IF_FLAG_TEST_S_G_RPT(child->flags))
|
||||||
@ -1308,25 +1309,13 @@ pim_ifchannel_set_star_g_join_state (struct pim_ifchannel *ch, int eom, uint8_t
|
|||||||
if (up)
|
if (up)
|
||||||
{
|
{
|
||||||
if (PIM_DEBUG_TRACE)
|
if (PIM_DEBUG_TRACE)
|
||||||
zlog_debug ("%s: clearing SGRpt flag, add inherit oif to up %s ", __PRETTY_FUNCTION__, up->sg_str);
|
zlog_debug ("%s: SGRpt flag is cleared, add inherit oif to up %s",
|
||||||
|
__PRETTY_FUNCTION__, up->sg_str);
|
||||||
pim_channel_add_oif (up->channel_oil, ch->interface, PIM_OIF_FLAG_PROTO_STAR);
|
pim_channel_add_oif (up->channel_oil, ch->interface, PIM_OIF_FLAG_PROTO_STAR);
|
||||||
|
pim_ifchannel_ifjoin_switch(__PRETTY_FUNCTION__, child, PIM_IFJOIN_JOIN);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* Received SG-RPT Prune delete oif from S,G */
|
|
||||||
else if (join == 0 && (source_flags & PIM_RPT_BIT_MASK) &&
|
|
||||||
!(source_flags & PIM_WILDCARD_BIT_MASK))
|
|
||||||
{
|
|
||||||
struct pim_upstream *up = child->upstream;
|
|
||||||
|
|
||||||
PIM_IF_FLAG_SET_S_G_RPT(child->flags);
|
|
||||||
if (up)
|
|
||||||
{
|
|
||||||
if (PIM_DEBUG_TRACE)
|
|
||||||
zlog_debug ("%s: SGRpt Set, del inherit oif from up %s", __PRETTY_FUNCTION__, up->sg_str);
|
|
||||||
pim_channel_del_oif (up->channel_oil, ch->interface, PIM_OIF_FLAG_PROTO_STAR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!PIM_IF_FLAG_TEST_S_G_RPT(child->flags))
|
if (!PIM_IF_FLAG_TEST_S_G_RPT(child->flags))
|
||||||
continue;
|
continue;
|
||||||
|
@ -150,7 +150,7 @@ void pim_ifchannel_update_my_assert_metric(struct pim_ifchannel *ch);
|
|||||||
void pim_ifchannel_update_assert_tracking_desired(struct pim_ifchannel *ch);
|
void pim_ifchannel_update_assert_tracking_desired(struct pim_ifchannel *ch);
|
||||||
|
|
||||||
void pim_ifchannel_scan_forward_start (struct interface *new_ifp);
|
void pim_ifchannel_scan_forward_start (struct interface *new_ifp);
|
||||||
void pim_ifchannel_set_star_g_join_state (struct pim_ifchannel *ch, int eom, uint8_t source_flags, uint8_t join);
|
void pim_ifchannel_set_star_g_join_state (struct pim_ifchannel *ch, int eom, uint8_t source_flags, uint8_t join, uint8_t starg_alone);
|
||||||
|
|
||||||
int pim_ifchannel_compare (struct pim_ifchannel *ch1, struct pim_ifchannel *ch2);
|
int pim_ifchannel_compare (struct pim_ifchannel *ch1, struct pim_ifchannel *ch2);
|
||||||
|
|
||||||
|
@ -228,7 +228,8 @@ int pim_joinprune_recv(struct interface *ifp,
|
|||||||
uint16_t msg_num_joined_sources;
|
uint16_t msg_num_joined_sources;
|
||||||
uint16_t msg_num_pruned_sources;
|
uint16_t msg_num_pruned_sources;
|
||||||
int source;
|
int source;
|
||||||
struct pim_ifchannel *ch = NULL;
|
struct pim_ifchannel *starg_ch = NULL, *sg_ch = NULL;
|
||||||
|
uint8_t starg_alone = 0;
|
||||||
|
|
||||||
memset (&sg, 0, sizeof (struct prefix_sg));
|
memset (&sg, 0, sizeof (struct prefix_sg));
|
||||||
addr_offset = pim_parse_addr_group (&sg,
|
addr_offset = pim_parse_addr_group (&sg,
|
||||||
@ -287,9 +288,10 @@ int pim_joinprune_recv(struct interface *ifp,
|
|||||||
|
|
||||||
if (sg.src.s_addr == INADDR_ANY)
|
if (sg.src.s_addr == INADDR_ANY)
|
||||||
{
|
{
|
||||||
ch = pim_ifchannel_find (ifp, &sg);
|
starg_alone = 1;
|
||||||
if (ch)
|
starg_ch = pim_ifchannel_find (ifp, &sg);
|
||||||
pim_ifchannel_set_star_g_join_state (ch, 0, msg_source_flags, 1);
|
if (starg_ch)
|
||||||
|
pim_ifchannel_set_star_g_join_state (starg_ch, 0, msg_source_flags, 1, starg_alone);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -302,16 +304,33 @@ int pim_joinprune_recv(struct interface *ifp,
|
|||||||
return -8;
|
return -8;
|
||||||
}
|
}
|
||||||
|
|
||||||
buf += addr_offset;
|
sg_ch = pim_ifchannel_find (ifp, &sg);
|
||||||
|
|
||||||
|
buf += addr_offset;
|
||||||
|
starg_alone = 0;
|
||||||
recv_prune(ifp, neigh, msg_holdtime,
|
recv_prune(ifp, neigh, msg_holdtime,
|
||||||
msg_upstream_addr.u.prefix4,
|
msg_upstream_addr.u.prefix4,
|
||||||
&sg,
|
&sg,
|
||||||
msg_source_flags);
|
msg_source_flags);
|
||||||
|
|
||||||
|
/* Received SG-RPT Prune delete oif from specific S,G */
|
||||||
|
if (starg_ch && sg_ch && (msg_source_flags & PIM_RPT_BIT_MASK)
|
||||||
|
&& !(msg_source_flags & PIM_WILDCARD_BIT_MASK))
|
||||||
|
{
|
||||||
|
struct pim_upstream *up = sg_ch->upstream;
|
||||||
|
PIM_IF_FLAG_SET_S_G_RPT(sg_ch->flags);
|
||||||
|
if (up)
|
||||||
|
{
|
||||||
|
if (PIM_DEBUG_TRACE)
|
||||||
|
zlog_debug ("%s: SGRpt flag is set, del inherit oif from up %s",
|
||||||
|
__PRETTY_FUNCTION__, up->sg_str);
|
||||||
|
pim_channel_del_oif (up->channel_oil, starg_ch->interface, PIM_OIF_FLAG_PROTO_STAR);
|
||||||
}
|
}
|
||||||
if (ch)
|
}
|
||||||
pim_ifchannel_set_star_g_join_state (ch, 1, msg_source_flags, 0);
|
}
|
||||||
ch = NULL;
|
if (starg_ch)
|
||||||
|
pim_ifchannel_set_star_g_join_state (starg_ch, 1, msg_source_flags, 0, starg_alone);
|
||||||
|
starg_ch = NULL;
|
||||||
} /* scan groups */
|
} /* scan groups */
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -518,6 +537,10 @@ int pim_joinprune_send(struct pim_rpf *rpf,
|
|||||||
pim_ifp->pim_ifstat_join_send += ntohs(grp->joins);
|
pim_ifp->pim_ifstat_join_send += ntohs(grp->joins);
|
||||||
pim_ifp->pim_ifstat_prune_send += ntohs(grp->prunes);
|
pim_ifp->pim_ifstat_prune_send += ntohs(grp->prunes);
|
||||||
|
|
||||||
|
if (PIM_DEBUG_PIM_TRACE)
|
||||||
|
zlog_debug ("%s: interface %s num_joins %u num_prunes %u", __PRETTY_FUNCTION__,
|
||||||
|
rpf->source_nexthop.interface->name, ntohs(grp->joins), ntohs (grp->prunes));
|
||||||
|
|
||||||
grp = (struct pim_jp_groups *)curr_ptr;
|
grp = (struct pim_jp_groups *)curr_ptr;
|
||||||
if (packet_left < sizeof (struct pim_jp_groups) || msg->num_groups == 255)
|
if (packet_left < sizeof (struct pim_jp_groups) || msg->num_groups == 255)
|
||||||
{
|
{
|
||||||
|
@ -247,7 +247,8 @@ enum pim_rpf_result pim_rpf_update(struct pim_upstream *up, struct pim_rpf *old,
|
|||||||
|
|
||||||
rpf->rpf_addr.family = AF_INET;
|
rpf->rpf_addr.family = AF_INET;
|
||||||
rpf->rpf_addr.u.prefix4 = pim_rpf_find_rpf_addr(up);
|
rpf->rpf_addr.u.prefix4 = pim_rpf_find_rpf_addr(up);
|
||||||
if (pim_rpf_addr_is_inaddr_any(rpf) && PIM_DEBUG_ZEBRA) {
|
if (pim_rpf_addr_is_inaddr_any(rpf) && PIM_DEBUG_ZEBRA)
|
||||||
|
{
|
||||||
/* RPF'(S,G) not found */
|
/* RPF'(S,G) not found */
|
||||||
zlog_debug("%s %s: RPF'%s not found: won't send join upstream",
|
zlog_debug("%s %s: RPF'%s not found: won't send join upstream",
|
||||||
__FILE__, __PRETTY_FUNCTION__,
|
__FILE__, __PRETTY_FUNCTION__,
|
||||||
|
@ -577,8 +577,9 @@ pim_upstream_switch(struct pim_upstream *up,
|
|||||||
if (old_state == PIM_UPSTREAM_JOINED)
|
if (old_state == PIM_UPSTREAM_JOINED)
|
||||||
pim_msdp_up_join_state_changed(up);
|
pim_msdp_up_join_state_changed(up);
|
||||||
|
|
||||||
/* IHR, Trigger SGRpt on *,G IIF to prune S,G from RPT */
|
/* IHR, Trigger SGRpt on *,G IIF to prune S,G from RPT towards RP.
|
||||||
if (pim_upstream_is_sg_rpt(up) && up->parent)
|
If I am RP for G then send S,G prune to its IIF. */
|
||||||
|
if (pim_upstream_is_sg_rpt(up) && up->parent && !I_am_RP(up->sg.grp))
|
||||||
{
|
{
|
||||||
if (PIM_DEBUG_PIM_TRACE_DETAIL)
|
if (PIM_DEBUG_PIM_TRACE_DETAIL)
|
||||||
zlog_debug ("%s: *,G IIF %s S,G IIF %s ", __PRETTY_FUNCTION__,
|
zlog_debug ("%s: *,G IIF %s S,G IIF %s ", __PRETTY_FUNCTION__,
|
||||||
|
@ -59,6 +59,8 @@ Building your own FRRouting RPM
|
|||||||
%{!?with_irdp: %global with_irdp 1 }
|
%{!?with_irdp: %global with_irdp 1 }
|
||||||
%{!?with_rtadv: %global with_rtadv 1 }
|
%{!?with_rtadv: %global with_rtadv 1 }
|
||||||
%{!?with_ldpd: %global with_ldpd 1 }
|
%{!?with_ldpd: %global with_ldpd 1 }
|
||||||
|
%{!?with_nhrpd: %global with_nhrpd 1 }
|
||||||
|
%{!?with_eigrp: %global with_eigrpd 1 }
|
||||||
%{!?with_shared: %global with_shared 1 }
|
%{!?with_shared: %global with_shared 1 }
|
||||||
%{!?with_multipath: %global with_multipath 256 }
|
%{!?with_multipath: %global with_multipath 256 }
|
||||||
%{!?frr_user: %global frr_user frr }
|
%{!?frr_user: %global frr_user frr }
|
||||||
|
@ -45,6 +45,8 @@ ripd=no
|
|||||||
ripngd=no
|
ripngd=no
|
||||||
isisd=no
|
isisd=no
|
||||||
ldpd=no
|
ldpd=no
|
||||||
|
nhrpd=no
|
||||||
|
eigrpd=no
|
||||||
#
|
#
|
||||||
# Command line options for the daemons
|
# Command line options for the daemons
|
||||||
#
|
#
|
||||||
@ -56,4 +58,6 @@ ripd_options=("-A 127.0.0.1")
|
|||||||
ripngd_options=("-A ::1")
|
ripngd_options=("-A ::1")
|
||||||
isisd_options=("-A 127.0.0.1")
|
isisd_options=("-A 127.0.0.1")
|
||||||
ldpd_options=("-A 127.0.0.1")
|
ldpd_options=("-A 127.0.0.1")
|
||||||
|
nhrpd_options=("-A 127.0.0.1")
|
||||||
|
eigrpd_options=("-A 127.0.0.1")
|
||||||
|
|
||||||
|
@ -33,7 +33,7 @@ V_PATH=/var/run/frr
|
|||||||
# Local Daemon selection may be done by using /etc/frr/daemons.
|
# Local Daemon selection may be done by using /etc/frr/daemons.
|
||||||
# See /usr/share/doc/frr/README.Debian.gz for further information.
|
# See /usr/share/doc/frr/README.Debian.gz for further information.
|
||||||
# Keep zebra first and do not list watchfrr!
|
# Keep zebra first and do not list watchfrr!
|
||||||
DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd pimd ldpd"
|
DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd pimd ldpd nhrpd eigrpd"
|
||||||
MAX_INSTANCES=5
|
MAX_INSTANCES=5
|
||||||
RELOAD_SCRIPT=/usr/lib/frr/frr-reload.py
|
RELOAD_SCRIPT=/usr/lib/frr/frr-reload.py
|
||||||
|
|
||||||
|
@ -61,3 +61,20 @@
|
|||||||
/bin/kill -USR1 `cat /var/run/frr/ldpd.pid 2> /dev/null` 2> /dev/null || true
|
/bin/kill -USR1 `cat /var/run/frr/ldpd.pid 2> /dev/null` 2> /dev/null || true
|
||||||
endscript
|
endscript
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/var/log/frr/nhrpd.log {
|
||||||
|
notifempty
|
||||||
|
missingok
|
||||||
|
postrotate
|
||||||
|
/bin/kill -USR1 `cat /var/run/frr/nhrpd.pid 2> /dev/null` 2> /dev/null || true
|
||||||
|
endscript
|
||||||
|
}
|
||||||
|
|
||||||
|
/var/log/frr/eigrpd.log {
|
||||||
|
notifempty
|
||||||
|
missingok
|
||||||
|
postrotate
|
||||||
|
/bin/kill -USR1 `cat /var/run/frr/eigrpd.pid 2> /dev/null` 2> /dev/null || true
|
||||||
|
endscript
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -10,16 +10,15 @@
|
|||||||
|
|
||||||
#################### FRRouting (FRR) configure options #####################
|
#################### FRRouting (FRR) configure options #####################
|
||||||
# with-feature options
|
# with-feature options
|
||||||
<<<<<<< HEAD
|
|
||||||
%{!?with_tcp_zebra: %global with_tcp_zebra 0 }
|
%{!?with_tcp_zebra: %global with_tcp_zebra 0 }
|
||||||
%{!?with_pam: %global with_pam 0 }
|
%{!?with_pam: %global with_pam 0 }
|
||||||
%{!?with_ospfclient: %global with_ospfclient 1 }
|
%{!?with_ospfclient: %global with_ospfclient 1 }
|
||||||
%{!?with_ospfapi: %global with_ospfapi 1 }
|
%{!?with_ospfapi: %global with_ospfapi 1 }
|
||||||
%{!?with_irdp: %global with_irdp 1 }
|
%{!?with_irdp: %global with_irdp 1 }
|
||||||
%{!?with_rtadv: %global with_rtadv 1 }
|
%{!?with_rtadv: %global with_rtadv 1 }
|
||||||
%{!?with_mpls: %global with_mpls 1 }
|
|
||||||
%{!?with_ldpd: %global with_ldpd 1 }
|
%{!?with_ldpd: %global with_ldpd 1 }
|
||||||
%{!?with_nhrpd: %global with_nhrpd 1 }
|
%{!?with_nhrpd: %global with_nhrpd 1 }
|
||||||
|
%{!?with_eigrpd: %global with_eigrpd 1 }
|
||||||
%{!?with_shared: %global with_shared 1 }
|
%{!?with_shared: %global with_shared 1 }
|
||||||
%{!?with_multipath: %global with_multipath 256 }
|
%{!?with_multipath: %global with_multipath 256 }
|
||||||
%{!?frr_user: %global frr_user frr }
|
%{!?frr_user: %global frr_user frr }
|
||||||
@ -36,7 +35,6 @@
|
|||||||
%define zeb_rh_src %{zeb_src}/redhat
|
%define zeb_rh_src %{zeb_src}/redhat
|
||||||
%define zeb_docs %{zeb_src}/doc
|
%define zeb_docs %{zeb_src}/doc
|
||||||
%define frr_tools %{zeb_src}/tools
|
%define frr_tools %{zeb_src}/tools
|
||||||
%define frr_tools_etc %{frr_tools}/etc
|
|
||||||
|
|
||||||
# defines for configure
|
# defines for configure
|
||||||
%define _localstatedir /var/run/frr
|
%define _localstatedir /var/run/frr
|
||||||
@ -84,7 +82,7 @@
|
|||||||
%{!?frr_gid: %global frr_gid 92 }
|
%{!?frr_gid: %global frr_gid 92 }
|
||||||
%{!?vty_gid: %global vty_gid 85 }
|
%{!?vty_gid: %global vty_gid 85 }
|
||||||
|
|
||||||
%define daemon_list zebra ripd ospfd bgpd isisd pimd ripngd ospf6d
|
%define daemon_list zebra ripd ospfd bgpd isisd ripngd ospf6d
|
||||||
|
|
||||||
%if %{with_ldpd}
|
%if %{with_ldpd}
|
||||||
%define daemon_ldpd ldpd
|
%define daemon_ldpd ldpd
|
||||||
@ -104,13 +102,19 @@
|
|||||||
%define daemon_nhrpd ""
|
%define daemon_nhrpd ""
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%if %{with_eigrpd}
|
||||||
|
%define daemon_eigrpd eigrpd
|
||||||
|
%else
|
||||||
|
%define daemon_eigrpd ""
|
||||||
|
%endif
|
||||||
|
|
||||||
%if %{with_watchfrr}
|
%if %{with_watchfrr}
|
||||||
%define daemon_watchfrr watchfrr
|
%define daemon_watchfrr watchfrr
|
||||||
%else
|
%else
|
||||||
%define daemon_watchfrr ""
|
%define daemon_watchfrr ""
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%define all_daemons %{daemon_list} %{daemon_ldpd} %{daemon_nhrpd} %{daemon_watchfrr}
|
%define all_daemons %{daemon_list} %{daemon_ldpd} %{daemon_pimd} %{daemon_nhrpd} %{daemon_eigrpd} %{daemon_watchfrr}
|
||||||
|
|
||||||
# allow build dir to be kept
|
# allow build dir to be kept
|
||||||
%{!?keep_build: %global keep_build 0 }
|
%{!?keep_build: %global keep_build 0 }
|
||||||
@ -156,7 +160,7 @@ protocol. It takes multi-server and multi-thread approach to resolve
|
|||||||
the current complexity of the Internet.
|
the current complexity of the Internet.
|
||||||
|
|
||||||
FRRouting supports BGP4, OSPFv2, OSPFv3, ISIS, RIP, RIPng, PIM, LDP
|
FRRouting supports BGP4, OSPFv2, OSPFv3, ISIS, RIP, RIPng, PIM, LDP
|
||||||
and NHRP.
|
NHRP and EIGRP.
|
||||||
|
|
||||||
FRRouting is a fork of Quagga.
|
FRRouting is a fork of Quagga.
|
||||||
|
|
||||||
@ -252,6 +256,11 @@ developing OSPF-API and frr applications.
|
|||||||
%else
|
%else
|
||||||
--disable-nhrpd \
|
--disable-nhrpd \
|
||||||
%endif
|
%endif
|
||||||
|
%if %{with_eigrpd}
|
||||||
|
--enable-eigrpd \
|
||||||
|
%else
|
||||||
|
--disable-eigrpd \
|
||||||
|
%endif
|
||||||
%if %{with_pam}
|
%if %{with_pam}
|
||||||
--with-libpam \
|
--with-libpam \
|
||||||
%endif
|
%endif
|
||||||
@ -318,9 +327,7 @@ install %{zeb_rh_src}/frr.init \
|
|||||||
%{buildroot}/etc/rc.d/init.d/frr
|
%{buildroot}/etc/rc.d/init.d/frr
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
install %{frr_tools_dir}/frr/daemons.conf %{buildroot}/etc/frr
|
install %{zeb_rh_src}/daemons %{buildroot}/etc/frr
|
||||||
install %{frr_tools_dir}/frr/daemons %{buildroot}/etc/frr
|
|
||||||
install -m644 %{frr_tools_dir}/default/frr %{buildroot}/etc/default
|
|
||||||
install -m644 %{zeb_rh_src}/frr.pam \
|
install -m644 %{zeb_rh_src}/frr.pam \
|
||||||
%{buildroot}/etc/pam.d/frr
|
%{buildroot}/etc/pam.d/frr
|
||||||
install -m644 %{zeb_rh_src}/frr.logrotate \
|
install -m644 %{zeb_rh_src}/frr.logrotate \
|
||||||
@ -375,6 +382,9 @@ zebra_spec_add_service ospf6d 2606/tcp "OSPF6d vty"
|
|||||||
zebra_spec_add_service ospfapi 2607/tcp "OSPF-API"
|
zebra_spec_add_service ospfapi 2607/tcp "OSPF-API"
|
||||||
%endif
|
%endif
|
||||||
zebra_spec_add_service isisd 2608/tcp "ISISd vty"
|
zebra_spec_add_service isisd 2608/tcp "ISISd vty"
|
||||||
|
%if %{with_eigrpd}
|
||||||
|
zebra_spec_add_service eigrpd 2609/tcp "EIGRPd vty"
|
||||||
|
%endif
|
||||||
%if %{with_nhrpd}
|
%if %{with_nhrpd}
|
||||||
zebra_spec_add_service nhrpd 2610/tcp "NHRPd vty"
|
zebra_spec_add_service nhrpd 2610/tcp "NHRPd vty"
|
||||||
%endif
|
%endif
|
||||||
@ -516,8 +526,11 @@ rm -rf %{buildroot}
|
|||||||
%if %{with_ldpd}
|
%if %{with_ldpd}
|
||||||
%{_sbindir}/ldpd
|
%{_sbindir}/ldpd
|
||||||
%endif
|
%endif
|
||||||
|
%if %{with_eigrpd}
|
||||||
|
%{_sbindir}/eigrpd
|
||||||
|
%endif
|
||||||
%if %{with_nhrpd}
|
%if %{with_nhrpd}
|
||||||
%{_sbindir}/nhrpd
|
%{_sbindir}/nhrpd
|
||||||
%endif
|
%endif
|
||||||
%if %{with_shared}
|
%if %{with_shared}
|
||||||
%{_libdir}/lib*.so
|
%{_libdir}/lib*.so
|
||||||
@ -561,9 +574,16 @@ rm -rf %{buildroot}
|
|||||||
%dir %attr(755,root,root) %{_includedir}/%{name}/ospfapi
|
%dir %attr(755,root,root) %{_includedir}/%{name}/ospfapi
|
||||||
%{_includedir}/%name/ospfapi/*.h
|
%{_includedir}/%name/ospfapi/*.h
|
||||||
%endif
|
%endif
|
||||||
|
%if %{with_eigrpd}
|
||||||
|
%dir %attr(755,root,root) %{_includedir}/%{name}/eigrpd
|
||||||
|
%{_includedir}/%name/eigrpd/*.h
|
||||||
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Mon Apr 17 2017 Martin Winter <mwinter@opensourcerouting.org> - %{version}
|
* Mon Jun 5 2017 Martin Winter <mwinter@opensourcerouting.org> - %{version}
|
||||||
|
- added NHRP and EIGRP daemon
|
||||||
|
|
||||||
|
* Mon Apr 17 2017 Martin Winter <mwinter@opensourcerouting.org>
|
||||||
- new subpackage frr-pythontools with python 2.7 restart script
|
- new subpackage frr-pythontools with python 2.7 restart script
|
||||||
- remove PIMd from CentOS/RedHat 6 RPM packages (won't work - too old)
|
- remove PIMd from CentOS/RedHat 6 RPM packages (won't work - too old)
|
||||||
- converted to single frr init script (not per daemon) based on debian init script
|
- converted to single frr init script (not per daemon) based on debian init script
|
||||||
|
@ -2586,6 +2586,7 @@ vtysh_write_config_integrated(void)
|
|||||||
err++;
|
err++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef FRR_USER
|
||||||
pwentry = getpwnam (FRR_USER);
|
pwentry = getpwnam (FRR_USER);
|
||||||
if (pwentry)
|
if (pwentry)
|
||||||
uid = pwentry->pw_uid;
|
uid = pwentry->pw_uid;
|
||||||
@ -2594,7 +2595,8 @@ vtysh_write_config_integrated(void)
|
|||||||
printf ("%% Warning: could not look up user \"%s\"\n", FRR_USER);
|
printf ("%% Warning: could not look up user \"%s\"\n", FRR_USER);
|
||||||
err++;
|
err++;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef FRR_GROUP
|
||||||
grentry = getgrnam (FRR_GROUP);
|
grentry = getgrnam (FRR_GROUP);
|
||||||
if (grentry)
|
if (grentry)
|
||||||
gid = grentry->gr_gid;
|
gid = grentry->gr_gid;
|
||||||
@ -2603,6 +2605,7 @@ vtysh_write_config_integrated(void)
|
|||||||
printf ("%% Warning: could not look up group \"%s\"\n", FRR_GROUP);
|
printf ("%% Warning: could not look up group \"%s\"\n", FRR_GROUP);
|
||||||
err++;
|
err++;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (!fstat (fd, &st))
|
if (!fstat (fd, &st))
|
||||||
{
|
{
|
||||||
|
@ -2172,7 +2172,6 @@ DEFUN (ipv6_route,
|
|||||||
"IPv6 gateway address\n"
|
"IPv6 gateway address\n"
|
||||||
"IPv6 gateway interface name\n"
|
"IPv6 gateway interface name\n"
|
||||||
"Null interface\n"
|
"Null interface\n"
|
||||||
"Null interface\n"
|
|
||||||
"Set tag for this route\n"
|
"Set tag for this route\n"
|
||||||
"Tag value\n"
|
"Tag value\n"
|
||||||
"Distance value for this prefix\n"
|
"Distance value for this prefix\n"
|
||||||
|
Loading…
Reference in New Issue
Block a user