diff --git a/isisd/isis_lsp.c b/isisd/isis_lsp.c index 29e5280ce3..48a92bdaaf 100644 --- a/isisd/isis_lsp.c +++ b/isisd/isis_lsp.c @@ -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); } diff --git a/isisd/isis_redist.c b/isisd/isis_redist.c index b0c065bdf1..7365c92bd9 100644 --- a/isisd/isis_redist.c +++ b/isisd/isis_redist.c @@ -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 " []", + "redistribute " FRR_REDIST_STR_ISISD " []", 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 " ", + "no redistribute " FRR_REDIST_STR_ISISD " ", 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 []", + "default-information originate [always] []", "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) { diff --git a/isisd/isis_zebra.c b/isisd/isis_zebra.c index 4dd7ec5c3e..0009dd5e27 100644 --- a/isisd/isis_zebra.c +++ b/isisd/isis_zebra.c @@ -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 diff --git a/isisd/isis_zebra.h b/isisd/isis_zebra.h index aeead3c3b2..621c32c363 100644 --- a/isisd/isis_zebra.h +++ b/isisd/isis_zebra.h @@ -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 */ diff --git a/ldpd/adjacency.c b/ldpd/adjacency.c index e73d1b51a2..5b0723a008 100644 --- a/ldpd/adjacency.c +++ b/ldpd/adjacency.c @@ -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); diff --git a/ldpd/hello.c b/ldpd/hello.c index dd67f68f70..d17e80008e 100644 --- a/ldpd/hello.c +++ b/ldpd/hello.c @@ -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); diff --git a/ospfd/ospf_interface.c b/ospfd/ospf_interface.c index 1f3cc10135..c09092e81a 100644 --- a/ospfd/ospf_interface.c +++ b/ospfd/ospf_interface.c @@ -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. */ diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index a2e1d601fa..1cd61caaf3 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -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); } diff --git a/ospfd/ospf_zebra.c b/ospfd/ospf_zebra.c index 4df49db9b2..6bf8996e06 100644 --- a/ospfd/ospf_zebra.c +++ b/ospfd/ospf_zebra.c @@ -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) { diff --git a/zebra/irdp_interface.c b/zebra/irdp_interface.c index d3c471e753..d3116fcf93 100644 --- a/zebra/irdp_interface.c +++ b/zebra/irdp_interface.c @@ -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... diff --git a/zebra/irdp_main.c b/zebra/irdp_main.c index 8e4ebfda60..a155331c9b 100644 --- a/zebra/irdp_main.c +++ b/zebra/irdp_main.c @@ -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 && diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index 88778e491b..d9f423fcc7 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -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"