Merge remote-tracking branch 'origin/stable/3.0'

This commit is contained in:
Donald Sharp 2017-06-29 10:10:15 -04:00
commit b440fe5c82
12 changed files with 146 additions and 113 deletions

View File

@ -842,12 +842,12 @@ lsp_print_mt_reach(struct list *list, struct vty *vty,
lspid_print(neigh->neigh_id, lspid, dynhost, 0);
if (mtid == ISIS_MT_IPV4_UNICAST)
{
vty_out(vty, " Metric : %-8d IS-Extended : %s%s",
vty_out(vty, " Metric : %-8u IS-Extended : %s%s",
GET_TE_METRIC(neigh), lspid, VTY_NEWLINE);
}
else
{
vty_out(vty, " Metric : %-8d MT-Reach : %s %s%s",
vty_out(vty, " Metric : %-8u MT-Reach : %s %s%s",
GET_TE_METRIC(neigh), lspid,
isis_mtid2str(mtid), VTY_NEWLINE);
}
@ -874,11 +874,11 @@ lsp_print_mt_ipv6_reach(struct list *list, struct vty *vty, uint16_t mtid)
{
if ((ipv6_reach->control_info &
CTRL_INFO_DISTRIBUTION) == DISTRIBUTION_INTERNAL)
vty_out (vty, " Metric : %-8d IPv6-Internal : %s/%d%s",
vty_out (vty, " Metric : %-8" PRIu32 " IPv6-Internal : %s/%d%s",
ntohl (ipv6_reach->metric),
buff, ipv6_reach->prefix_len, VTY_NEWLINE);
else
vty_out (vty, " Metric : %-8d IPv6-External : %s/%d%s",
vty_out (vty, " Metric : %-8" PRIu32 " IPv6-External : %s/%d%s",
ntohl (ipv6_reach->metric),
buff, ipv6_reach->prefix_len, VTY_NEWLINE);
}
@ -886,12 +886,12 @@ lsp_print_mt_ipv6_reach(struct list *list, struct vty *vty, uint16_t mtid)
{
if ((ipv6_reach->control_info &
CTRL_INFO_DISTRIBUTION) == DISTRIBUTION_INTERNAL)
vty_out (vty, " Metric : %-8d IPv6-MT-Int : %s/%d %s%s",
vty_out (vty, " Metric : %-8" PRIu32 " IPv6-MT-Int : %s/%d %s%s",
ntohl (ipv6_reach->metric),
buff, ipv6_reach->prefix_len,
isis_mtid2str(mtid), VTY_NEWLINE);
else
vty_out (vty, " Metric : %-8d IPv6-MT-Ext : %s/%d %s%s",
vty_out (vty, " Metric : %-8" PRIu32 " IPv6-MT-Ext : %s/%d %s%s",
ntohl (ipv6_reach->metric),
buff, ipv6_reach->prefix_len,
isis_mtid2str(mtid), VTY_NEWLINE);
@ -910,7 +910,7 @@ lsp_print_mt_ipv4_reach(struct list *list, struct vty *vty, uint16_t mtid)
if (mtid == ISIS_MT_IPV4_UNICAST)
{
/* FIXME: There should be better way to output this stuff. */
vty_out (vty, " Metric : %-8d IPv4-Extended : %s/%d%s",
vty_out (vty, " Metric : %-8" PRIu32 " IPv4-Extended : %s/%d%s",
ntohl (te_ipv4_reach->te_metric),
inet_ntoa (newprefix2inaddr (&te_ipv4_reach->prefix_start,
te_ipv4_reach->control)),
@ -919,7 +919,7 @@ lsp_print_mt_ipv4_reach(struct list *list, struct vty *vty, uint16_t mtid)
else
{
/* FIXME: There should be better way to output this stuff. */
vty_out (vty, " Metric : %-8d IPv4-MT : %s/%d %s%s",
vty_out (vty, " Metric : %-8" PRIu32 " IPv4-MT : %s/%d %s%s",
ntohl (te_ipv4_reach->te_metric),
inet_ntoa (newprefix2inaddr (&te_ipv4_reach->prefix_start,
te_ipv4_reach->control)),
@ -1025,7 +1025,7 @@ lsp_print_detail (struct isis_lsp *lsp, struct vty *vty, char dynhost)
for (ALL_LIST_ELEMENTS_RO (lsp->tlv_data.is_neighs, lnode, is_neigh))
{
lspid_print (is_neigh->neigh_id, LSPid, dynhost, 0);
vty_out (vty, " Metric : %-8d IS : %s%s",
vty_out (vty, " Metric : %-8" PRIu8 " IS : %s%s",
is_neigh->metrics.metric_default, LSPid, VTY_NEWLINE);
}
@ -1038,7 +1038,7 @@ lsp_print_detail (struct isis_lsp *lsp, struct vty *vty, char dynhost)
sizeof (ipv4_reach_prefix));
memcpy (ipv4_reach_mask, inet_ntoa (ipv4_reach->mask),
sizeof (ipv4_reach_mask));
vty_out (vty, " Metric : %-8d IPv4-Internal : %s %s%s",
vty_out (vty, " Metric : %-8" PRIu8 " IPv4-Internal : %s %s%s",
ipv4_reach->metrics.metric_default, ipv4_reach_prefix,
ipv4_reach_mask, VTY_NEWLINE);
}
@ -1052,7 +1052,7 @@ lsp_print_detail (struct isis_lsp *lsp, struct vty *vty, char dynhost)
sizeof (ipv4_reach_prefix));
memcpy (ipv4_reach_mask, inet_ntoa (ipv4_reach->mask),
sizeof (ipv4_reach_mask));
vty_out (vty, " Metric : %-8d IPv4-External : %s %s%s",
vty_out (vty, " Metric : %-8" PRIu8 " IPv4-External : %s %s%s",
ipv4_reach->metrics.metric_default, ipv4_reach_prefix,
ipv4_reach_mask, VTY_NEWLINE);
}

View File

@ -55,6 +55,18 @@ redist_protocol(int family)
return 0;
}
static afi_t
afi_for_redist_protocol(int protocol)
{
if (protocol == 0)
return AFI_IP;
if (protocol == 1)
return AFI_IP6;
assert(!"Unknown redist protocol!");
return AFI_IP;
}
static int
is_default(struct prefix *p)
{
@ -177,7 +189,7 @@ isis_redist_uninstall(struct isis_area *area, int level, struct prefix *p)
if (!er_node->info)
return;
XFREE(MTYPE_ISIS, er_node->info);
XFREE(MTYPE_ISIS_EXT_INFO, er_node->info);
route_unlock_node(er_node);
lsp_regenerate_schedule(area, level, 0);
}
@ -360,7 +372,7 @@ isis_redist_delete(int type, struct prefix *p)
isis_redist_uninstall(area, level, p);
}
XFREE(MTYPE_ISIS, ei_node->info);
XFREE(MTYPE_ISIS_EXT_INFO, ei_node->info);
route_unlock_node(ei_node);
}
@ -387,7 +399,7 @@ isis_redist_update_zebra_subscriptions(struct isis *isis)
int level;
int protocol;
char do_subscribe[ZEBRA_ROUTE_MAX + 1];
char do_subscribe[REDIST_PROTOCOL_COUNT][ZEBRA_ROUTE_MAX + 1];
memset(do_subscribe, 0, sizeof(do_subscribe));
@ -396,20 +408,23 @@ isis_redist_update_zebra_subscriptions(struct isis *isis)
for (type = 0; type < ZEBRA_ROUTE_MAX + 1; type++)
for (level = 0; level < ISIS_LEVELS; level++)
if (area->redist_settings[protocol][type][level].redist)
do_subscribe[type] = 1;
do_subscribe[protocol][type] = 1;
for (type = 0; type < ZEBRA_ROUTE_MAX + 1; type++)
{
/* This field is actually controlling transmission of the IS-IS
* routes to Zebra and has nothing to do with redistribution,
* so skip it. */
if (type == ZEBRA_ROUTE_ISIS)
continue;
for (protocol = 0; protocol < REDIST_PROTOCOL_COUNT; protocol++)
for (type = 0; type < ZEBRA_ROUTE_MAX + 1; type++)
{
/* This field is actually controlling transmission of the IS-IS
* routes to Zebra and has nothing to do with redistribution,
* so skip it. */
if (type == ZEBRA_ROUTE_ISIS)
continue;
if (do_subscribe[type])
isis_zebra_redistribute_set(type);
else
isis_zebra_redistribute_unset(type);
afi_t afi = afi_for_redist_protocol(protocol);
if (do_subscribe[protocol][type])
isis_zebra_redistribute_set(afi, type);
else
isis_zebra_redistribute_unset(afi, type);
}
}
@ -505,7 +520,7 @@ isis_redist_unset(struct isis_area *area, int level,
continue;
}
XFREE(MTYPE_ISIS, rn->info);
XFREE(MTYPE_ISIS_EXT_INFO, rn->info);
route_unlock_node(rn);
}
@ -540,7 +555,7 @@ isis_redist_area_finish(struct isis_area *area)
DEFUN (isis_redistribute,
isis_redistribute_cmd,
"redistribute " FRR_REDIST_STR_ISISD " <level-1|level-2> [<metric (0-16777215)|route-map WORD>]",
"redistribute <ipv4|ipv6> " FRR_REDIST_STR_ISISD " <level-1|level-2> [<metric (0-16777215)|route-map WORD>]",
REDIST_STR
"Redistribute IPv4 routes\n"
"Redistribute IPv6 routes\n"
@ -589,19 +604,26 @@ DEFUN (isis_redistribute,
return CMD_WARNING;
}
if (strmatch(argv[idx_metric_rmap]->text, "metric"))
{
char *endp;
metric = strtoul(argv[idx_metric_rmap + 1]->arg, &endp, 10);
routemap = NULL;
metric = 0xffffffff;
routemap = NULL;
if (argv[idx_metric_rmap]->arg[0] == '\0' || *endp != '\0')
return CMD_WARNING;
}
else
if (argc > idx_metric_rmap + 1)
{
routemap = argv[idx_metric_rmap + 1]->arg;
metric = 0xffffffff;
if (argv[idx_metric_rmap + 1]->arg[0] == '\0')
return CMD_WARNING;
if (strmatch(argv[idx_metric_rmap]->text, "metric"))
{
char *endp;
metric = strtoul(argv[idx_metric_rmap + 1]->arg, &endp, 10);
if (*endp != '\0')
return CMD_WARNING;
}
else
{
routemap = argv[idx_metric_rmap + 1]->arg;
}
}
isis_redist_set(area, level, family, type, metric, routemap, 0);
@ -610,7 +632,7 @@ DEFUN (isis_redistribute,
DEFUN (no_isis_redistribute,
no_isis_redistribute_cmd,
"no redistribute " FRR_REDIST_STR_ISISD " <level-1|level-2>",
"no redistribute <ipv4|ipv6> " FRR_REDIST_STR_ISISD " <level-1|level-2>",
NO_STR
REDIST_STR
"Redistribute IPv4 routes\n"
@ -648,7 +670,7 @@ DEFUN (no_isis_redistribute,
DEFUN (isis_default_originate,
isis_default_originate_cmd,
"default-information originate <ipv4|ipv6> <level-1|level-2> [<always|metric (0-16777215)|route-map WORD>]",
"default-information originate <ipv4|ipv6> <level-1|level-2> [always] [<metric (0-16777215)|route-map WORD>]",
"Control distribution of default information\n"
"Distribute a default route\n"
"Distribute default route for IPv4\n"
@ -663,6 +685,7 @@ DEFUN (isis_default_originate,
{
int idx_afi = 2;
int idx_level = 3;
int idx_always = 4;
int idx_metric_rmap = 4;
VTY_DECLVAR_CONTEXT (isis_area, area);
int family;
@ -683,15 +706,19 @@ DEFUN (isis_default_originate,
return CMD_WARNING;
}
if (argc > 4)
{
if (strmatch (argv[idx_metric_rmap]->text, "always"))
if (argc > idx_always && strmatch (argv[idx_always]->text, "always"))
{
originate_type = DEFAULT_ORIGINATE_ALWAYS;
else if (strmatch(argv[idx_metric_rmap]->text, "metric"))
metric = strtoul(argv[idx_metric_rmap + 1]->arg, NULL, 10);
else
routemap = argv[idx_metric_rmap + 1]->arg;
}
idx_metric_rmap++;
}
if (argc > idx_metric_rmap)
{
if (strmatch(argv[idx_metric_rmap]->text, "metric"))
metric = strtoul(argv[idx_metric_rmap + 1]->arg, NULL, 10);
else
routemap = argv[idx_metric_rmap + 1]->arg;
}
if (family == AF_INET6 && originate_type != DEFAULT_ORIGINATE_ALWAYS)
{

View File

@ -603,6 +603,7 @@ isis_zebra_read_ipv6 (int command, struct zclient *zclient,
struct stream *stream;
struct zapi_ipv6 api;
struct prefix_ipv6 p;
struct prefix src_p;
struct prefix *p_generic = (struct prefix*)&p;
struct in6_addr nexthop;
unsigned long ifindex __attribute__((unused));
@ -614,6 +615,7 @@ isis_zebra_read_ipv6 (int command, struct zclient *zclient,
ifindex = 0;
api.type = stream_getc(stream);
api.instance = stream_getw(stream);
api.flags = stream_getl(stream);
api.message = stream_getc(stream);
@ -621,6 +623,18 @@ isis_zebra_read_ipv6 (int command, struct zclient *zclient,
p.prefixlen = stream_getc(stream);
stream_get(&p.prefix, stream, PSIZE(p.prefixlen));
memset(&src_p, 0, sizeof (struct prefix));
src_p.family = AF_INET6;
if (CHECK_FLAG(api.message, ZAPI_MESSAGE_SRCPFX))
{
src_p.prefixlen = stream_getc(stream);
stream_get(&src_p.u.prefix6, stream, PSIZE (src_p.prefixlen));
}
if (src_p.prefixlen)
/* we completely ignore srcdest routes for now. */
return 0;
if (CHECK_FLAG(api.message, ZAPI_MESSAGE_NEXTHOP))
{
api.nexthop_num = stream_getc(stream); /* this is always 1 */
@ -635,6 +649,8 @@ isis_zebra_read_ipv6 (int command, struct zclient *zclient,
api.distance = stream_getc(stream);
if (CHECK_FLAG(api.message, ZAPI_MESSAGE_METRIC))
api.metric = stream_getl(stream);
if (CHECK_FLAG (api.message, ZAPI_MESSAGE_TAG))
api.tag = stream_getl(stream);
/*
* Avoid advertising a false default reachability. (A default
@ -645,7 +661,7 @@ isis_zebra_read_ipv6 (int command, struct zclient *zclient,
if (p.prefixlen == 0 && api.type == ZEBRA_ROUTE_ISIS)
command = ZEBRA_IPV6_ROUTE_DELETE;
if (command == ZEBRA_IPV6_ROUTE_ADD)
if (command == ZEBRA_REDISTRIBUTE_IPV6_ADD)
isis_redist_add(api.type, p_generic, api.distance, api.metric);
else
isis_redist_delete(api.type, p_generic);
@ -660,21 +676,21 @@ isis_distribute_list_update (int routetype)
}
void
isis_zebra_redistribute_set(int type)
isis_zebra_redistribute_set(afi_t afi, int type)
{
if (type == DEFAULT_ROUTE)
zclient_redistribute_default(ZEBRA_REDISTRIBUTE_DEFAULT_ADD, zclient, VRF_DEFAULT);
else
zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, AFI_IP, type, 0, VRF_DEFAULT);
zclient_redistribute(ZEBRA_REDISTRIBUTE_ADD, zclient, afi, type, 0, VRF_DEFAULT);
}
void
isis_zebra_redistribute_unset(int type)
isis_zebra_redistribute_unset(afi_t afi, int type)
{
if (type == DEFAULT_ROUTE)
zclient_redistribute_default(ZEBRA_REDISTRIBUTE_DEFAULT_DELETE, zclient, VRF_DEFAULT);
else
zclient_redistribute(ZEBRA_REDISTRIBUTE_DELETE, zclient, AFI_IP, type, 0, VRF_DEFAULT);
zclient_redistribute(ZEBRA_REDISTRIBUTE_DELETE, zclient, afi, type, 0, VRF_DEFAULT);
}
static void

View File

@ -28,7 +28,7 @@ void isis_zebra_init(struct thread_master *);
void isis_zebra_route_update (struct prefix *prefix,
struct isis_route_info *route_info);
int isis_distribute_list_update (int routetype);
void isis_zebra_redistribute_set(int type);
void isis_zebra_redistribute_unset(int type);
void isis_zebra_redistribute_set(afi_t afi, int type);
void isis_zebra_redistribute_unset(afi_t afi, int type);
#endif /* _ZEBRA_ISIS_ZEBRA_H */

View File

@ -109,17 +109,19 @@ adj_new(struct in_addr lsr_id, struct hello_source *source,
return (adj);
}
static void
adj_del_single(struct adj *adj)
void
adj_del(struct adj *adj, uint32_t notif_status)
{
struct nbr *nbr = adj->nbr;
log_debug("%s: lsr-id %s, %s (%s)", __func__, inet_ntoa(adj->lsr_id),
log_hello_src(&adj->source), af_name(adj_get_af(adj)));
adj_stop_itimer(adj);
RB_REMOVE(global_adj_head, &global.adj_tree, adj);
if (adj->nbr)
RB_REMOVE(nbr_adj_head, &adj->nbr->adj_tree, adj);
if (nbr)
RB_REMOVE(nbr_adj_head, &nbr->adj_tree, adj);
switch (adj->source.type) {
case HELLO_LINK:
RB_REMOVE(ia_adj_head, &adj->source.link.ia->adj_tree, adj);
@ -130,15 +132,6 @@ adj_del_single(struct adj *adj)
}
free(adj);
}
void
adj_del(struct adj *adj, uint32_t notif_status)
{
struct nbr *nbr = adj->nbr;
struct adj *atmp;
adj_del_single(adj);
/*
* If the neighbor still exists but none of its remaining
@ -146,8 +139,6 @@ adj_del(struct adj *adj, uint32_t notif_status)
* then delete it.
*/
if (nbr && nbr_adj_count(nbr, nbr->af) == 0) {
RB_FOREACH_SAFE(adj, nbr_adj_head, &nbr->adj_tree, atmp)
adj_del_single(adj);
session_shutdown(nbr, notif_status, 0, 0);
nbr_del(nbr);
}
@ -194,7 +185,6 @@ adj_itimer(struct thread *thread)
tnbr_del(leconf, adj->source.target);
return (0);
}
adj->source.target->adj = NULL;
}
adj_del(adj, S_HOLDTIME_EXP);

View File

@ -214,6 +214,7 @@ recv_hello(struct in_addr lsr_id, struct ldp_msg *msg, int af,
__func__, inet_ntoa(lsr_id));
return;
}
ds_tlv = (tlvs_rcvd & F_HELLO_TLV_RCVD_DS) ? 1 : 0;
/* implicit transport address */
if (!(tlvs_rcvd & F_HELLO_TLV_RCVD_ADDR))
@ -291,11 +292,21 @@ recv_hello(struct in_addr lsr_id, struct ldp_msg *msg, int af,
source.link.src_addr = *src;
}
debug_hello_recv("%s lsr-id %s transport-address %s holdtime %u%s",
log_hello_src(&source), inet_ntoa(lsr_id), log_addr(af, &trans_addr),
holdtime, (ds_tlv) ? " (dual stack TLV present)" : "");
adj = adj_find(lsr_id, &source);
if (adj && adj->ds_tlv != ds_tlv) {
/*
* Transient condition, ignore packet and wait until adjacency
* times out.
*/
return;
}
nbr = nbr_find_ldpid(lsr_id.s_addr);
/* check dual-stack tlv */
ds_tlv = (tlvs_rcvd & F_HELLO_TLV_RCVD_DS) ? 1 : 0;
if (ds_tlv && trans_pref != leconf->trans_pref) {
/*
* RFC 7552 - Section 6.1.1:
@ -420,10 +431,6 @@ recv_hello(struct in_addr lsr_id, struct ldp_msg *msg, int af,
else
adj_stop_itimer(adj);
debug_hello_recv("%s lsr-id %s transport-address %s holdtime %u%s",
log_hello_src(&source), inet_ntoa(lsr_id), log_addr(af, &trans_addr),
holdtime, (ds_tlv) ? " (dual stack TLV present)" : "");
if (nbr && nbr->state == NBR_STA_PRESENT && !nbr_pending_idtimer(nbr) &&
nbr_session_active_role(nbr) && !nbr_pending_connect(nbr))
nbr_establish_connection(nbr);

View File

@ -58,7 +58,13 @@ ospf_if_get_output_cost (struct ospf_interface *oi)
u_int32_t cost;
u_int32_t bw, refbw;
bw = oi->ifp->bandwidth ? oi->ifp->bandwidth : OSPF_DEFAULT_BANDWIDTH;
/* ifp speed and bw can be 0 in some platforms, use ospf default bw
if bw is configured under interface it would be used.
*/
if (!oi->ifp->bandwidth && oi->ifp->speed)
bw = oi->ifp->speed;
else
bw = oi->ifp->bandwidth ? oi->ifp->bandwidth : OSPF_DEFAULT_BANDWIDTH;
refbw = oi->ospf->ref_bandwidth;
/* A specifed ip ospf cost overrides a calculated one. */

View File

@ -3251,6 +3251,7 @@ show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf, struct interface
int is_up;
struct ospf_neighbor *nbr;
struct route_node *rn;
uint32_t bandwidth = ifp->bandwidth ? ifp->bandwidth : ifp->speed;
/* Is interface up? */
if (use_json)
@ -3263,7 +3264,7 @@ show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf, struct interface
json_object_int_add(json_interface_sub, "ifIndex", ifp->ifindex);
json_object_int_add(json_interface_sub, "mtuBytes", ifp->mtu);
json_object_int_add(json_interface_sub, "bandwidthMbit", ifp->bandwidth);
json_object_int_add(json_interface_sub, "bandwidthMbit", bandwidth);
json_object_string_add(json_interface_sub, "ifFlags", if_flag_dump(ifp->flags));
}
else
@ -3271,7 +3272,7 @@ show_ip_ospf_interface_sub (struct vty *vty, struct ospf *ospf, struct interface
vty_out (vty, "%s is %s%s", ifp->name,
((is_up = if_is_operative(ifp)) ? "up" : "down"), VTY_NEWLINE);
vty_out (vty, " ifindex %u, MTU %u bytes, BW %u Mbit %s%s",
ifp->ifindex, ifp->mtu, ifp->bandwidth, if_flag_dump(ifp->flags),
ifp->ifindex, ifp->mtu, bandwidth, if_flag_dump(ifp->flags),
VTY_NEWLINE);
}

View File

@ -187,16 +187,10 @@ ospf_interface_state_up (int command, struct zclient *zclient,
zebra_interface_if_set_value (zclient->ibuf, ifp);
if (IS_DEBUG_OSPF (zebra, ZEBRA_INTERFACE))
zlog_debug ("Zebra: Interface[%s] state update.", ifp->name);
zlog_debug ("Zebra: Interface[%s] state update speed %u -> %u, bw %d -> %d",
ifp->name, if_tmp.speed, ifp->speed, if_tmp.bandwidth, ifp->bandwidth);
if (if_tmp.bandwidth != ifp->bandwidth)
{
if (IS_DEBUG_OSPF (zebra, ZEBRA_INTERFACE))
zlog_debug ("Zebra: Interface[%s] bandwidth change %d -> %d.",
ifp->name, if_tmp.bandwidth, ifp->bandwidth);
ospf_if_recalculate_output_cost (ifp);
}
ospf_if_recalculate_output_cost (ifp);
if (if_tmp.mtu != ifp->mtu)
{

View File

@ -474,18 +474,15 @@ DEFUN (ip_irdp_minadvertinterval,
zi=ifp->info;
irdp=&zi->irdp;
if( (unsigned) atoi(argv[idx_number]->arg) <= irdp->MaxAdvertInterval) {
if((unsigned) atoi(argv[idx_number]->arg) <= irdp->MaxAdvertInterval) {
irdp->MinAdvertInterval = atoi(argv[idx_number]->arg);
return CMD_SUCCESS;
}
vty_out (vty, "ICMP warning maxadvertinterval is greater or equal than minadvertinterval%s",
VTY_NEWLINE);
vty_out (vty, "Please correct!%s",
VTY_NEWLINE);
return CMD_WARNING;
else {
vty_out (vty, "%% MinAdvertInterval must be less than or equal to "
"MaxAdvertInterval%s", VTY_NEWLINE);
return CMD_WARNING;
}
}
DEFUN (ip_irdp_maxadvertinterval,
@ -504,19 +501,15 @@ DEFUN (ip_irdp_maxadvertinterval,
zi=ifp->info;
irdp=&zi->irdp;
if( irdp->MinAdvertInterval <= (unsigned) atoi(argv[idx_number]->arg) ) {
irdp->MaxAdvertInterval = atoi(argv[idx_number]->arg);
if(irdp->MinAdvertInterval <= (unsigned) atoi(argv[idx_number]->arg)) {
irdp->MaxAdvertInterval = atoi(argv[idx_number]->arg);
return CMD_SUCCESS;
}
vty_out (vty, "ICMP warning maxadvertinterval is greater or equal than minadvertinterval%s",
VTY_NEWLINE);
vty_out (vty, "Please correct!%s",
VTY_NEWLINE);
return CMD_WARNING;
else {
vty_out (vty, "%% MaxAdvertInterval must be greater than or equal to "
"MinAdvertInterval%s", VTY_NEWLINE);
return CMD_WARNING;
}
}
/* DEFUN needs to be fixed for negative ranages...

View File

@ -234,7 +234,7 @@ int irdp_send_thread(struct thread *t_advert)
}
tmp = irdp->MaxAdvertInterval-irdp->MinAdvertInterval;
timer = (random () % tmp ) + 1;
timer = random () % (tmp + 1);
timer = irdp->MinAdvertInterval + timer;
if(irdp->irdp_sent < MAX_INITIAL_ADVERTISEMENTS &&

View File

@ -2087,10 +2087,10 @@ static_ipv6_func (struct vty *vty, int add_cmd, const char *dest_str,
return CMD_WARNING;
}
if (add_cmd)
static_add_route (AFI_IP6, SAFI_UNICAST, type, &p, NULL, NULL, ifindex, ifname,
static_add_route (AFI_IP6, SAFI_UNICAST, type, &p, src_p, NULL, ifindex, ifname,
ZEBRA_FLAG_BLACKHOLE, tag, distance, zvrf, &snh_label);
else
static_delete_route (AFI_IP6, SAFI_UNICAST, type, &p, NULL, NULL, ifindex, tag,
static_delete_route (AFI_IP6, SAFI_UNICAST, type, &p, src_p, NULL, ifindex, tag,
distance, zvrf, &snh_label);
return CMD_SUCCESS;
}
@ -2221,7 +2221,6 @@ DEFUN (ipv6_route_flags,
"IPv6 gateway interface name\n"
"Emit an ICMP unreachable when matched\n"
"Silently discard pkts when matched\n"
"Silently discard pkts when matched\n"
"Set tag for this route\n"
"Tag value\n"
"Distance value for this prefix\n"