diff options
| -rw-r--r-- | bgpd/bgp_label.h | 4 | ||||
| -rw-r--r-- | bgpd/bgp_route.c | 65 | ||||
| -rw-r--r-- | bgpd/bgp_route.h | 2 | ||||
| -rw-r--r-- | debian/changelog | 16 | ||||
| -rw-r--r-- | ospfd/ospf_vty.c | 522 | ||||
| -rw-r--r-- | pimd/pim_msdp.c | 7 | ||||
| -rw-r--r-- | redhat/frr.spec.in | 430 | ||||
| -rw-r--r-- | tests/topotests/lib/bgprib.py | 2 | ||||
| -rw-r--r-- | tests/topotests/ospf_gr_helper/test_ospf_gr_helper.py | 2 | ||||
| -rwxr-xr-x | tests/topotests/ospf_gr_topo1/test_ospf_gr_topo1.py | 2 | ||||
| -rw-r--r-- | zebra/zebra_ptm.c | 2 |
11 files changed, 513 insertions, 541 deletions
diff --git a/bgpd/bgp_label.h b/bgpd/bgp_label.h index d227cf7241..cafcc8e9c7 100644 --- a/bgpd/bgp_label.h +++ b/bgpd/bgp_label.h @@ -65,7 +65,7 @@ static inline int bgp_is_withdraw_label(mpls_label_t *label) return 0; } -static inline int bgp_is_valid_label(mpls_label_t *label) +static inline int bgp_is_valid_label(const mpls_label_t *label) { uint8_t *t = (uint8_t *)label; if (!t) @@ -99,7 +99,7 @@ static inline void bgp_unregister_for_label(struct bgp_dest *dest) } /* Label stream to value */ -static inline uint32_t label_pton(mpls_label_t *label) +static inline uint32_t label_pton(const mpls_label_t *label) { uint8_t *t = (uint8_t *)label; return ((((unsigned int)t[0]) << 12) | (((unsigned int)t[1]) << 4) diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index ffd8a8118c..fdaee9b600 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -102,6 +102,10 @@ DEFINE_HOOK(bgp_rpki_prefix_status, const struct prefix *prefix), (peer, attr, prefix)); +/* Render dest to prefix_rd based on safi */ +static const struct prefix_rd *bgp_rd_from_dest(const struct bgp_dest *dest, + safi_t safi); + /* Extern from bgp_dump.c */ extern const char *bgp_origin_str[]; extern const char *bgp_origin_long_str[]; @@ -10712,14 +10716,15 @@ static int bgp_show_community(struct vty *vty, struct bgp *bgp, static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi, struct bgp_table *table, enum bgp_show_type type, - void *output_arg, char *rd, int is_last, + void *output_arg, const char *rd, int is_last, unsigned long *output_cum, unsigned long *total_cum, unsigned long *json_header_depth, uint16_t show_flags, enum rpki_states rpki_target_state) { struct bgp_path_info *pi; struct bgp_dest *dest; - int header = 1; + bool header = true; + bool json_detail_header = false; int display; unsigned long output_count = 0; unsigned long total_count = 0; @@ -10731,7 +10736,7 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi, bool all = CHECK_FLAG(show_flags, BGP_SHOW_OPT_AFI_ALL); if (output_cum && *output_cum != 0) - header = 0; + header = false; if (use_json && !*json_header_depth) { if (all) @@ -10761,10 +10766,19 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi, vty_out(vty, " \"%s\" : { ", rd); } + /* Check for 'json detail', where we need header output once per dest */ + if (use_json && CHECK_FLAG(show_flags, BGP_SHOW_OPT_DETAIL) && + type != bgp_show_type_dampend_paths && + type != bgp_show_type_damp_neighbor && + type != bgp_show_type_flap_statistics && + type != bgp_show_type_flap_neighbor) + json_detail_header = true; + /* Start processing of routes. */ for (dest = bgp_table_top(table); dest; dest = bgp_route_next(dest)) { const struct prefix *dest_p = bgp_dest_get_prefix(dest); enum rpki_states rpki_curr_state = RPKI_NOT_BEING_USED; + bool json_detail = json_detail_header; pi = bgp_dest_get_bgp_path_info(dest); if (pi == NULL) @@ -11016,8 +11030,28 @@ static int bgp_show_table(struct vty *vty, struct bgp *bgp, safi_t safi, else vty_out(vty, (wide ? BGP_SHOW_HEADER_WIDE : BGP_SHOW_HEADER)); - header = 0; + header = false; + + } else if (json_detail && json_paths != NULL) { + const struct prefix_rd *prd; + json_object *jtemp; + + /* Use common detail header, for most types; + * need a json 'object'. + */ + + jtemp = json_object_new_object(); + prd = bgp_rd_from_dest(dest, safi); + + route_vty_out_detail_header( + vty, bgp, dest, prd, table->afi, + safi, jtemp); + + json_object_array_add(json_paths, jtemp); + + json_detail = false; } + if (rd != NULL && !display && !output_count) { if (!use_json) vty_out(vty, @@ -11176,6 +11210,7 @@ int bgp_show_table_rd(struct vty *vty, struct bgp *bgp, safi_t safi, } return CMD_SUCCESS; } + static int bgp_show(struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, enum bgp_show_type type, void *output_arg, uint16_t show_flags, enum rpki_states rpki_target_state) @@ -11260,7 +11295,8 @@ static void bgp_show_all_instances_routes_vty(struct vty *vty, afi_t afi, /* Header of detailed BGP route information */ void route_vty_out_detail_header(struct vty *vty, struct bgp *bgp, - struct bgp_dest *dest, struct prefix_rd *prd, + struct bgp_dest *dest, + const struct prefix_rd *prd, afi_t afi, safi_t safi, json_object *json) { struct bgp_path_info *pi; @@ -11470,7 +11506,7 @@ void route_vty_out_detail_header(struct vty *vty, struct bgp *bgp, } } -static void bgp_show_path_info(struct prefix_rd *pfx_rd, +static void bgp_show_path_info(const struct prefix_rd *pfx_rd, struct bgp_dest *bgp_node, struct vty *vty, struct bgp *bgp, afi_t afi, safi_t safi, json_object *json, enum bgp_path_type pathtype, @@ -11530,6 +11566,23 @@ static void bgp_show_path_info(struct prefix_rd *pfx_rd, } } +/* + * Return rd based on safi + */ +static const struct prefix_rd *bgp_rd_from_dest(const struct bgp_dest *dest, + safi_t safi) +{ + switch (safi) { + case SAFI_MPLS_VPN: + case SAFI_ENCAP: + case SAFI_EVPN: + return (struct prefix_rd *)(bgp_dest_get_prefix(dest)); + default: + return NULL; + + } +} + /* Display specified route of BGP table. */ static int bgp_show_route_in_table(struct vty *vty, struct bgp *bgp, struct bgp_table *rib, const char *ip_str, diff --git a/bgpd/bgp_route.h b/bgpd/bgp_route.h index 46802d0d14..2fd80495d9 100644 --- a/bgpd/bgp_route.h +++ b/bgpd/bgp_route.h @@ -784,7 +784,7 @@ extern bool bgp_zebra_has_route_changed(struct bgp_path_info *selected); extern void route_vty_out_detail_header(struct vty *vty, struct bgp *bgp, struct bgp_dest *dest, - struct prefix_rd *prd, afi_t afi, + const struct prefix_rd *prd, afi_t afi, safi_t safi, json_object *json); extern void route_vty_out_detail(struct vty *vty, struct bgp *bgp, struct bgp_dest *bn, diff --git a/debian/changelog b/debian/changelog index 99c75106db..f5b392274a 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,8 +1,20 @@ -frr (8.1~dev-1) UNRELEASED; urgency=medium +frr (8.2~dev-1) UNRELEASED; urgency=medium * New upstream release... - -- Ondřej Surý <ondrej@debian.org> Tue, 04 May 2021 22:52:47 +0200 + -- Jafar Al-Gharaibeh <jafar@atcorp.com> Mon, 08 Nov 2021 10:00:00 +0500 + +frr (8.1-0) unstable; urgency=medium + + * New upstream release FRR 8.1 + + -- Jafar Al-Gharaibeh <jafar@atcorp.com> Tue, 02 Nov 2021 14:00:00 +0500 + +frr (8.0-0) unstable; urgency=medium + + * New upstream release FRR 8.0 + + -- Martin Winter <mwinter@opensourcerouting.org> Wed, 21 Jul 2021 13:42:00 +0200 frr (7.5.1-1) unstable; urgency=medium diff --git a/ospfd/ospf_vty.c b/ospfd/ospf_vty.c index bbb458d8ef..fcfc645a23 100644 --- a/ospfd/ospf_vty.c +++ b/ospfd/ospf_vty.c @@ -9863,161 +9863,10 @@ DEFUN (no_ospf_proactive_arp, return CMD_SUCCESS; } -/* Graceful Restart HELPER Commands */ -DEFPY(ospf_gr_helper_enable, ospf_gr_helper_enable_cmd, - "graceful-restart helper enable [A.B.C.D$address]", - "OSPF Graceful Restart\n" - "OSPF GR Helper\n" - "Enable Helper support\n" - "Advertising Router-ID\n") -{ - VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - - if (address_str) { - ospf_gr_helper_support_set_per_routerid(ospf, &address, - OSPF_GR_TRUE); - return CMD_SUCCESS; - } - - ospf_gr_helper_support_set(ospf, OSPF_GR_TRUE); - - return CMD_SUCCESS; -} - -DEFPY(no_ospf_gr_helper_enable, - no_ospf_gr_helper_enable_cmd, - "no graceful-restart helper enable [A.B.C.D$address]", - NO_STR - "OSPF Graceful Restart\n" - "OSPF GR Helper\n" - "Enable Helper support\n" - "Advertising Router-ID\n") -{ - VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - - if (address_str) { - ospf_gr_helper_support_set_per_routerid(ospf, &address, - OSPF_GR_FALSE); - return CMD_SUCCESS; - } - - ospf_gr_helper_support_set(ospf, OSPF_GR_FALSE); - return CMD_SUCCESS; -} - -#if CONFDATE > 20220921 -CPP_NOTICE( - "Time to remove the deprecated \"[no] graceful-restart helper-only\" commands") +#if CONFDATE > 20211209 +CPP_NOTICE("Time to remove broken OSPF GR helper") #endif -DEFPY_HIDDEN(ospf_gr_helper_only, ospf_gr_helper_only_cmd, - "graceful-restart helper-only [A.B.C.D]", - "OSPF Graceful Restart\n" - "Enable Helper support\n" - "Advertising router id\n") -{ - VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - struct in_addr addr; - int ret; - - vty_out(vty, - "%% This command is deprecated. Please, use `graceful-restart helper enable` instead.\n"); - - if (argc == 3) { - ret = inet_aton(argv[2]->arg, &addr); - if (!ret) { - vty_out(vty, - "Please specify the valid routerid address.\n"); - return CMD_WARNING_CONFIG_FAILED; - } - - ospf_gr_helper_support_set_per_routerid(ospf, &addr, OSPF_GR_TRUE); - return CMD_SUCCESS; - } - - ospf_gr_helper_support_set(ospf, OSPF_GR_TRUE); - - return CMD_SUCCESS; -} - -ALIAS_HIDDEN(no_ospf_gr_helper_enable, - no_ospf_gr_helper_only_cmd, - "no graceful-restart helper-only [A.B.C.D]", - NO_STR - "OSPF Graceful Restart\n" - "Disable Helper support\n" - "Advertising router id\n") - -DEFPY(ospf_gr_helper_enable_lsacheck, - ospf_gr_helper_enable_lsacheck_cmd, - "graceful-restart helper strict-lsa-checking", - "OSPF Graceful Restart\n" - "OSPF GR Helper\n" - "Enable strict LSA check\n") -{ - VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - - ospf_gr_helper_lsa_check_set(ospf, OSPF_GR_TRUE); - return CMD_SUCCESS; -} - -DEFPY(no_ospf_gr_helper_enable_lsacheck, - no_ospf_gr_helper_enable_lsacheck_cmd, - "no graceful-restart helper strict-lsa-checking", - NO_STR - "OSPF Graceful Restart\n" - "OSPF GR Helper\n" - "Disable strict LSA check\n") -{ - VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - - ospf_gr_helper_lsa_check_set(ospf, OSPF_GR_FALSE); - return CMD_SUCCESS; -} - -DEFPY(ospf_gr_helper_supported_grace_time, - ospf_gr_helper_supported_grace_time_cmd, - "graceful-restart helper supported-grace-time (10-1800)$interval", - "OSPF Graceful Restart\n" - "OSPF GR Helper\n" - "Supported grace timer\n" - "Grace interval(in seconds)\n") -{ - VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - - ospf_gr_helper_supported_gracetime_set(ospf, interval); - return CMD_SUCCESS; -} - -DEFPY(no_ospf_gr_helper_supported_grace_time, - no_ospf_gr_helper_supported_grace_time_cmd, - "no graceful-restart helper supported-grace-time (10-1800)$interval", - NO_STR - "OSPF Graceful Restart\n" - "OSPF GR Helper\n" - "Supported grace timer\n" - "Grace interval(in seconds)\n") -{ - VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - - ospf_gr_helper_supported_gracetime_set(ospf, OSPF_MAX_GRACE_INTERVAL); - return CMD_SUCCESS; -} - -DEFPY(ospf_gr_helper_planned_only, - ospf_gr_helper_planned_only_cmd, - "graceful-restart helper planned-only", - "OSPF Graceful Restart\n" - "OSPF GR Helper\n" - "Supported only planned restart\n") -{ - VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - - ospf_gr_helper_set_supported_planned_only_restart(ospf, OSPF_GR_TRUE); - - return CMD_SUCCESS; -} - /* External Route Aggregation */ DEFUN (ospf_external_route_aggregation, ospf_external_route_aggregation_cmd, @@ -10100,256 +9949,6 @@ DEFUN (no_ospf_external_route_aggregation, return CMD_SUCCESS; } -DEFPY(no_ospf_gr_helper_planned_only, - no_ospf_gr_helper_planned_only_cmd, - "no graceful-restart helper planned-only", - NO_STR - "OSPF Graceful Restart\n" - "OSPF GR Helper\n" - "Supported only for planned restart\n") -{ - VTY_DECLVAR_INSTANCE_CONTEXT(ospf, ospf); - - ospf_gr_helper_set_supported_planned_only_restart(ospf, OSPF_GR_FALSE); - - return CMD_SUCCESS; -} - -static int ospf_print_vty_helper_dis_rtr_walkcb(struct hash_bucket *bucket, - void *arg) -{ - struct advRtr *rtr = bucket->data; - struct vty *vty = (struct vty *)arg; - static unsigned int count; - - vty_out(vty, "%-6pI4,", &rtr->advRtrAddr); - count++; - - if (count % 5 == 0) - vty_out(vty, "\n"); - - return HASHWALK_CONTINUE; -} - -static int ospf_show_gr_helper_details(struct vty *vty, struct ospf *ospf, - uint8_t use_vrf, json_object *json, - bool uj, bool detail) -{ - struct listnode *node; - struct ospf_interface *oi; - char buf[PREFIX_STRLEN]; - json_object *json_vrf = NULL; - - if (uj) { - if (use_vrf) - json_vrf = json_object_new_object(); - else - json_vrf = json; - } - - if (ospf->instance) { - if (uj) - json_object_int_add(json, "ospfInstance", - ospf->instance); - else - vty_out(vty, "\nOSPF Instance: %d\n\n", ospf->instance); - } - - ospf_show_vrf_name(ospf, vty, json_vrf, use_vrf); - - if (uj) { - if (use_vrf) - json_object_object_add(json, ospf_get_name(ospf), - json_vrf); - } else - vty_out(vty, "\n"); - - /* Show Router ID. */ - if (uj) { - json_object_string_add(json_vrf, "routerId", - inet_ntop(AF_INET, &ospf->router_id, - buf, sizeof(buf))); - } else { - vty_out(vty, "\n OSPF Router with ID (%pI4)\n\n", - &ospf->router_id); - } - - if (!uj) { - - if (ospf->is_helper_supported) - vty_out(vty, - " Graceful restart helper support enabled.\n"); - else - vty_out(vty, - " Graceful restart helper support disabled.\n"); - - if (ospf->strict_lsa_check) - vty_out(vty, " Strict LSA check is enabled.\n"); - else - vty_out(vty, " Strict LSA check is disabled.\n"); - - if (ospf->only_planned_restart) - vty_out(vty, - " Helper supported for planned restarts only.\n"); - else - vty_out(vty, - " Helper supported for Planned and Unplanned Restarts.\n"); - - vty_out(vty, - " Supported Graceful restart interval: %d(in seconds).\n", - ospf->supported_grace_time); - - if (OSPF_HELPER_ENABLE_RTR_COUNT(ospf)) { - vty_out(vty, " Enable Router list:\n"); - vty_out(vty, " "); - hash_walk(ospf->enable_rtr_list, - ospf_print_vty_helper_dis_rtr_walkcb, vty); - vty_out(vty, "\n\n"); - } - - if (ospf->last_exit_reason != OSPF_GR_HELPER_EXIT_NONE) { - vty_out(vty, " Last Helper exit Reason :%s\n", - ospf_exit_reason2str(ospf->last_exit_reason)); - } - - if (ospf->active_restarter_cnt) - vty_out(vty, - " Number of Active neighbours in graceful restart: %d\n", - ospf->active_restarter_cnt); - else - vty_out(vty, "\n"); - - } else { - json_object_string_add( - json_vrf, "helperSupport", - (ospf->is_helper_supported) ? "Enabled" : "Disabled"); - json_object_string_add(json_vrf, "strictLsaCheck", - (ospf->strict_lsa_check) ? "Enabled" - : "Disabled"); - json_object_string_add( - json_vrf, "restartSupoort", - (ospf->only_planned_restart) - ? "Planned Restart only" - : "Planned and Unplanned Restarts"); - - json_object_int_add(json_vrf, "supportedGracePeriod", - ospf->supported_grace_time); - - if (ospf->last_exit_reason != OSPF_GR_HELPER_EXIT_NONE) - json_object_string_add( - json_vrf, "LastExitReason", - ospf_exit_reason2str(ospf->last_exit_reason)); - - if (ospf->active_restarter_cnt) - json_object_int_add(json_vrf, "activeRestarterCnt", - ospf->active_restarter_cnt); - } - - - if (detail) { - int cnt = 1; - json_object *json_neighbors = NULL; - - for (ALL_LIST_ELEMENTS_RO(ospf->oiflist, node, oi)) { - struct route_node *rn; - struct ospf_neighbor *nbr; - json_object *json_neigh; - - if (ospf_interface_neighbor_count(oi) == 0) - continue; - - if (uj) { - json_object_object_get_ex(json_vrf, "Neighbors", - &json_neighbors); - if (!json_neighbors) { - json_neighbors = - json_object_new_object(); - json_object_object_add(json_vrf, - "Neighbors", - json_neighbors); - } - } - - for (rn = route_top(oi->nbrs); rn; - rn = route_next(rn)) { - - if (!rn->info) - continue; - - nbr = rn->info; - - if (!OSPF_GR_IS_ACTIVE_HELPER(nbr)) - continue; - - if (!uj) { - vty_out(vty, " Neighbour %d :\n", cnt); - vty_out(vty, " Address : %pI4\n", - &nbr->address.u.prefix4); - vty_out(vty, " Routerid : %pI4\n", - &nbr->router_id); - vty_out(vty, - " Received Grace period : %d(in seconds).\n", - nbr->gr_helper_info - .recvd_grace_period); - vty_out(vty, - " Actual Grace period : %d(in seconds)\n", - nbr->gr_helper_info - .actual_grace_period); - vty_out(vty, - " Remaining GraceTime:%ld(in seconds).\n", - thread_timer_remain_second( - nbr->gr_helper_info - .t_grace_timer)); - vty_out(vty, - " Graceful Restart reason: %s.\n\n", - ospf_restart_reason2str( - nbr->gr_helper_info - .gr_restart_reason)); - cnt++; - } else { - json_neigh = json_object_new_object(); - json_object_string_add( - json_neigh, "srcAddr", - inet_ntop(AF_INET, &nbr->src, - buf, sizeof(buf))); - - json_object_string_add( - json_neigh, "routerid", - inet_ntop(AF_INET, - &nbr->router_id, - buf, sizeof(buf))); - json_object_int_add( - json_neigh, - "recvdGraceInterval", - nbr->gr_helper_info - .recvd_grace_period); - json_object_int_add( - json_neigh, - "actualGraceInterval", - nbr->gr_helper_info - .actual_grace_period); - json_object_int_add( - json_neigh, "remainGracetime", - thread_timer_remain_second( - nbr->gr_helper_info - .t_grace_timer)); - json_object_string_add( - json_neigh, "restartReason", - ospf_restart_reason2str( - nbr->gr_helper_info - .gr_restart_reason)); - json_object_object_add( - json_neighbors, - inet_ntop(AF_INET, &nbr->src, - buf, sizeof(buf)), - json_neigh); - } - } - } - } - return CMD_SUCCESS; -} - DEFUN (ospf_external_route_aggregation_no_adrvertise, ospf_external_route_aggregation_no_adrvertise_cmd, "summary-address A.B.C.D/M no-advertise", @@ -10438,108 +10037,6 @@ DEFUN (ospf_route_aggregation_timer, return CMD_SUCCESS; } -DEFPY (show_ip_ospf_gr_helper, - show_ip_ospf_gr_helper_cmd, - "show ip ospf [vrf <NAME|all>] graceful-restart helper [detail] [json]", - SHOW_STR - IP_STR - "OSPF information\n" - VRF_CMD_HELP_STR - "All VRFs\n" - "OSPF Graceful Restart\n" - "Helper details in the router\n" - "Detailed informtion\n" - JSON_STR) -{ - char *vrf_name = NULL; - bool all_vrf = false; - int ret = CMD_SUCCESS; - int idx_vrf = 0; - int idx = 0; - uint8_t use_vrf = 0; - bool uj = use_json(argc, argv); - struct ospf *ospf = NULL; - json_object *json = NULL; - struct listnode *node = NULL; - int inst = 0; - bool detail = false; - - OSPF_FIND_VRF_ARGS(argv, argc, idx_vrf, vrf_name, all_vrf); - - if (argv_find(argv, argc, "detail", &idx)) - detail = true; - - if (uj) - json = json_object_new_object(); - - /* vrf input is provided */ - if (vrf_name) { - use_vrf = 1; - - if (all_vrf) { - for (ALL_LIST_ELEMENTS_RO(om->ospf, node, ospf)) { - if (!ospf->oi_running) - continue; - - ret = ospf_show_gr_helper_details( - vty, ospf, use_vrf, json, uj, detail); - } - - if (uj) { - vty_out(vty, "%s\n", - json_object_to_json_string_ext( - json, JSON_C_TO_STRING_PRETTY)); - json_object_free(json); - } - - return ret; - } - - ospf = ospf_lookup_by_inst_name(inst, vrf_name); - - if (ospf == NULL || !ospf->oi_running) { - - if (uj) { - vty_out(vty, "%s\n", - json_object_to_json_string_ext( - json, JSON_C_TO_STRING_PRETTY)); - json_object_free(json); - } else - vty_out(vty, "%% OSPF instance not found\n"); - - return CMD_SUCCESS; - } - - } else { - /* Default Vrf */ - ospf = ospf_lookup_by_vrf_id(VRF_DEFAULT); - - if (ospf == NULL || !ospf->oi_running) { - - if (uj) { - vty_out(vty, "%s\n", - json_object_to_json_string_ext( - json, JSON_C_TO_STRING_PRETTY)); - json_object_free(json); - } else - vty_out(vty, "%% OSPF instance not found\n"); - - return CMD_SUCCESS; - } - - ospf_show_gr_helper_details(vty, ospf, use_vrf, json, uj, - detail); - } - - if (uj) { - vty_out(vty, "%s\n", json_object_to_json_string_ext( - json, JSON_C_TO_STRING_PRETTY)); - json_object_free(json); - } - - return CMD_SUCCESS; -} -/* Graceful Restart HELPER commands end */ DEFUN (no_ospf_route_aggregation_timer, no_ospf_route_aggregation_timer_cmd, "no aggregation timer", @@ -12608,9 +12105,6 @@ void ospf_vty_show_init(void) /* "show ip ospf vrfs" commands. */ install_element(VIEW_NODE, &show_ip_ospf_vrfs_cmd); - /* "show ip ospf gr-helper details" command */ - install_element(VIEW_NODE, &show_ip_ospf_gr_helper_cmd); - /* "show ip ospf summary-address" command */ install_element(VIEW_NODE, &show_ip_ospf_external_aggregator_cmd); } @@ -12721,18 +12215,6 @@ static void ospf_vty_zebra_init(void) install_element(OSPF_NODE, &no_ospf_distance_ospf_cmd); install_element(OSPF_NODE, &ospf_distance_ospf_cmd); - /*Ospf garcefull restart helper configurations */ - install_element(OSPF_NODE, &ospf_gr_helper_enable_cmd); - install_element(OSPF_NODE, &no_ospf_gr_helper_enable_cmd); - install_element(OSPF_NODE, &ospf_gr_helper_only_cmd); - install_element(OSPF_NODE, &no_ospf_gr_helper_only_cmd); - install_element(OSPF_NODE, &ospf_gr_helper_enable_lsacheck_cmd); - install_element(OSPF_NODE, &no_ospf_gr_helper_enable_lsacheck_cmd); - install_element(OSPF_NODE, &ospf_gr_helper_supported_grace_time_cmd); - install_element(OSPF_NODE, &no_ospf_gr_helper_supported_grace_time_cmd); - install_element(OSPF_NODE, &ospf_gr_helper_planned_only_cmd); - install_element(OSPF_NODE, &no_ospf_gr_helper_planned_only_cmd); - /* External LSA summarisation config commands.*/ install_element(OSPF_NODE, &ospf_external_route_aggregation_cmd); install_element(OSPF_NODE, &no_ospf_external_route_aggregation_cmd); diff --git a/pimd/pim_msdp.c b/pimd/pim_msdp.c index ddba33ff9d..fa7f1da79a 100644 --- a/pimd/pim_msdp.c +++ b/pimd/pim_msdp.c @@ -1304,7 +1304,6 @@ int pim_msdp_config_write(struct pim_instance *pim, struct vty *vty, struct pim_msdp_mg *mg; struct listnode *mbrnode; struct pim_msdp_mg_mbr *mbr; - char mbr_str[INET_ADDRSTRLEN]; char src_str[INET_ADDRSTRLEN]; int count = 0; @@ -1321,10 +1320,8 @@ int pim_msdp_config_write(struct pim_instance *pim, struct vty *vty, } for (ALL_LIST_ELEMENTS_RO(mg->mbr_list, mbrnode, mbr)) { - pim_inet4_dump("<mbr?>", mbr->mbr_ip, mbr_str, - sizeof(mbr_str)); - vty_out(vty, "%sip msdp mesh-group %s member %s\n", - spaces, mg->mesh_group_name, mbr_str); + vty_out(vty, "%sip msdp mesh-group %s member %pI4\n", + spaces, mg->mesh_group_name, &mbr->mbr_ip); ++count; } } diff --git a/redhat/frr.spec.in b/redhat/frr.spec.in index a7286d1878..229104baff 100644 --- a/redhat/frr.spec.in +++ b/redhat/frr.spec.in @@ -199,6 +199,8 @@ Requires: initscripts BuildRequires: pam-devel %endif %if "%{initsystem}" == "systemd" +BuildRequires: systemd +BuildRequires: systemd-devel Requires(post): systemd Requires(preun): systemd Requires(postun): systemd @@ -394,6 +396,9 @@ routing state through standard SNMP MIBs. --disable-bgp-vnc \ %endif --enable-isisd \ +%if "%{initsystem}" == "systemd" + --enable-systemd \ +%endif --enable-rpki \ %if %{with_bfdd} --enable-bfdd \ @@ -768,9 +773,428 @@ sed -i 's/ -M rpki//' %{_sysconfdir}/frr/daemons %changelog -* Fri Oct 30 2020 Martin Winter <mwinter@opensourcerouting.org> - %{version} -- Moved RPKI to subpackage -- Added SNMP subpackage +* Tue Nov 4 2021 Martin Winter <mwinter@opensourcerouting.org> - %{version} + +* Tue Nov 2 2021 Jafar Al-Gharaibeh <jafar@atcorp.com> - 8.1 +- FRR 8.1 brings a long list of enhancements and fixes with 1200 commits from +- 75 developers. Thanks to all contributers. +- New Features: +- Lua hooks are now feature complete, with one hook available for use (http://docs.frrouting.org/en/latest/scripting.html) +- Improvements to SRv6 (Segment Routing over IPv6) (http://docs.frrouting.org/en/latest/zebra.html#segment-routing-ipv6) +- Improvements to Prefix-SID (Type 5) +- EVPN route type-5 gateway IP overlay Index (http://docs.frrouting.org/en/latest/bgp.html#evpn-overlay-index-gateway-ip) +- OSPFv3 NSSA and NSSA totally stub areas (http://docs.frrouting.org/en/latest/ospf6d.html#ospf6-area) +- OSPFv3 ASBR summarization (http://docs.frrouting.org/en/latest/ospf6d.html#asbr-summarisation-support-in-ospfv3) +- OSPFv3 Graceful Restart (http://docs.frrouting.org/en/latest/ospf6d.html#graceful-restart) +- OSPFv2 Graceful Restart (restarting mode added, helper was already implemented) (http://docs.frrouting.org/en/latest/ospfd.html#graceful-restart) +- Behavior Changes +- Every node in running config now has an explicit "exit" tag +- Link bandwidth in BGP is now correctly encoded according to IEEE 754. To stay with old incorrect encoding use: +- `neighbor PEER disable-link-bw-encoding-ieee` +- Changelog +- alpine: + Fix path for daemons file install +- BGP: +- Add "json" option to "show bgp as-path-access-list" +- Add `disable-addpath-rx` knob +- Add an ability to set extcommunity to none in route-maps +- Add counter of displayed show bgp summary when filtering +- Add knob to config cond-adv scanner period +- Add route-map `match alias` command +- Add rpki source address configuration +- Add show bgp summary filter by neighbor or as +- Add terse display option on show bgp summary +- Allow for auto-completion of community alias's created +- Bgp knob to teardown session immediately when peer is unreachable +- Expand 'bgp default <afi>-<safi>' cmds +- Extend evpn next hop tracking to type-1 and type-4 routes +- Fix "no router bgp x vrf default" +- Flowspec redirect vrf uses vrf table instead of allocated table id +- Handle quick flaps of an evpn prefix properly +- Initial batch of evpn lttng tracepoints +- Limit processing to what is needed in rpki validation +- Modify vrf/view display in show bgp summary +- Set 4096 instead of 65535 as new max packet size for a new peer +- Set extended msg size only if we advertised and received capability +- Show bgp community alias in json community list output +- Show bgp prefixes by community alias +- Show max packet size per update-group +- Split soft reconfigure table task into several jobs to not block vtysh +- Store distance received from a redistribute statement +- Update route-type-1 legend to match output +- ISIS: +- Fix sending of lsp with null seqno +- lib: +- Add "json" option to "show ip[v6] access-list" +- Add "json" option to "show ip[v6] prefix-list" +- Add "json" option to "show route-map" +- Prevent grpc assert on missing yang node +- NHRP: +- Clear cache when shortcuts are cleared +- Fix corrupt address being shown for shortcuts with no cache entry +- Set prefix correctly in resolution request +- OSPF6: +- Add debug commands for lsa all and route all +- Add warning log for late hello packets +- Add write-multiplier configuration +- Don't update router-id if at least one adjacency is full +- Extend the "redistribute" command with more options +- Fix issue when displaying the redistribute command +- Fix logging of border router routes +- Json output for database dump show command +- Link state id in lsa database json output +- Send lsa update immediately when ospf instance is deleted +- OSPF: +- Fix crash when creating vlink in unknown vrf +- Gr conformance fix for hello packet dr election +- Print extra lsa information in some log messages +- Rfc conformance test case 25.23 issue fix +- Show ip ospf route json does not shown metric and tag +- Summary lsa is not originated when process is reset +- pathd: +- Handle pcinitiated configuration, main thread +- Handle pcinitiated messages, thread controller +- Handle srp_id correctly +- If pce ret no-path to pcreq don't retry pcreq nor delegate +- PBR: +- Add `match ip-protocol [tcp|udp]` +- Add ability to set/unset src and dest ports +- Nhg "add" edge case for last in table range +- Start inclusion of src and dst ports for pbrd +- PIM: +- Add tos/ttl check for igmp conformance +- Allow join prune intervals to be as small as 5 seconds +- Allow msdp group name 'default' +- Fix register suppress timer code +- Fix uaf/heap corruption in bsm code +- Fix command "no ip msdp mesh-group member" +- Igmp groups are not getting timeout +- Igmp memberships are not querier specific +- Igmp sockets need to be iface-bound too +- Prevent uninited usage of nexthop +- Support msdp global timers configuration +- vtysh +- Add cli timestamp '-t' flag +- Add error code if daemon is not running +- Fix searching commands in parent nodes +- yang: +- Add msdp timer configuration +- Fix bgp multicast prefix type +- Mark a couple of prefix-list/access-list leafs as mandatory +- Move multicast prefix type definition +- Replace an empty pattern with a zero-length restriction +- Rework pim msdp mesh group +- Simplify msdp peer handling +- zebra : +- Add "json" option to "show interface" +- Various improvment to dataplane interface +- Add message counts for `show zebra client` +- Add nhg id to show ip route json +- Add show command for ra interface lists +- Fix ipv4 routes with ipv6 link local next hops install in fpm +- Handle bridge mac address update in evpn contexts +- Move individual lines to table in `show zebra client` command +- Refresh vxlan evpn contexts, when bridge interface goes up +- Update zl3vni when bridge link refreshed in other namespaces + +* Wed Jul 21 2021 Martin Winter <mwinter@opensourcerouting.org> - 8.0 +- Major changes +- New daemon pathd for segment routing +- EVPN Multihoming is now fully supported +- OSPFv3 now supports VRFs +- TI-LFA has been implemented in IS-IS and OSPF +- Ability for Zebra to dump netlink messages in a human-friendly format +- LDP gained SNMP support +- libyang minimun version is now 2.0 +- BABEL: +- Add `distribute-list` commands +- Fix memory leak in connected route handling +- BGP: +- Add support for use of aliases with communities +- Add support of tcp-mss for neighbors +- Add support for EVPN Multihoming +- Add ability to show BGP routes from a particular table version +- Add support for for RFC 8050 (MRT add-path) +- Add SNMP support for MPLS VPN +- Add `show bgp summary wide` command to show more detailed output + on wide terminals +- Add ability for peer-groups to have `ttl-security hops` configured +- Add support for conditional Advertisement +- Add support for RFC 4271 Delay Open Timer +- Add a knob to not advertise until route is installed in fib +- Add BGP-wide configuration for graceful shutdown +- Add support for RFC 8654 extended messages +- Improve RPKI reporting as well as new show commands +- Improve handling of VRF route leaking +- Improve scaling behavior for dynamic neighbors +- Improve LL nexthop tracking to be interface based +- Improve route reachability handling with respect to blackhole routes +- Improve SNMP traps to RFC 4273 notifications +- Improve EVPN routes to use L3 NHG's where applicable +- Improvements to EVPN +- Improvements to update behavior +- Fix various issues with connection resolution +- Fix statistics commands in some situations +- Fix non-determistic locally-originated paths in bestpath selection +- Continue working on transitioning to YANG/Northbound configuration +- Various bug fixes and performance improvements +- EIGRP: +- Add `distribute-list` commands +- Ensure received AS number is the same as ours in all situations +- Properly validate TLV lengths in some situations +- IS-IS: +- Add ldb-sync functionality +- Add TI-LFA functionality +- Add support for Anycast-SID's +- Add support for classic LFA RFC 5286 +- Add `show isis fast-reroute summary` command +- Add support for Remote LFA RFC 7490 +- Fix Attach-bit processing in some scenarios +- Cleanup BFD integration +- Various bug fixes and performance improvements +- LDP: +- Add SNMP support +- Support for LDP IGP Synchronization +- Support for RLFA clients +- Various bug fixes and performance improvements +- LIBFRR: +- Various bugfixes and performance improvements +- NHRP: +- Add `nhrp multicast-nflog-group (1-65535)` command +- Add configuration options for vici socket path +- Add support for forwarding multicast packets +- Fix handling of MTU +- Fix handling of NAT extension +- Retry IPsec under some conditions +- OSPFv2: +- Add OSPF GR helper support +- Add JSON support for various commands +- Add `summary-address A.B.C.D/M ...` commands +- Add `area X nssa suppress-fa` command +- Add support for TI-LFA +- Add support for BFD profiles +- Add support for Traffic Engineering database +- Add support for usage of DMPVPN with OSPF +- Add `clear ip ospf neighbor` commands +- Add YANG support for route-maps +- Improvements to SNMP +- Fixes for type 5 and type 7 LSA handling +- Various bug fixes and performance improvements +- OSPFv3: +- Add support for VRFs +- Add JSON support to a bunch of commands +- Add ability to control maximum paths for routes +- Add `show ipv6 ospf6 vrfs` command +- Add support for BFD profiles +- Fix to not send hellos on loopbacks +- Cleanup area handling around interfaces +- YANG support for route-maps +- Various bug fixes and performance improvements +- OSPFCLIENT: +- Cleanup trust of user input +- PATHd: +- Add support of SR-TE policy management daemon +- Add optional support for PCEP to pathd +- Integrate PCEP-LIB into FRR +- PBR: +- Add `set installable` nhg command +- Improve interface up/down event handling +- PIM: +- Add YANG integration +- Add JSON support to various commands +- Add BFD profile support +- Fixes to IGMP conformance +- Fixes to behavior surrounding Prune and Prune-pending +- Various bug fixes and performance improvements +- RIPNG: +- Fix interface wakeup after shutdown +- SHARP: +- Add ability to use Nexthop Groups +- Add v4 redistribute watching +- Add TED support +- Various bug fixes +- STATIC: +- Fix nexthop handling in some situations +- Forbid blackhole and non-blackhole nexthops in a single route +- VRRP: +- printf formatting cleanups +- VTYSH: +- Add a `show history` command +- Add `show memory <daemon>` support +- Start deprecation cycle for `address-family evpn` +- Display version with --help +- Various bug fixes +- WATCHFRR: +- Fix some crashes +- ZEBRA: +- Add JSON support to various commands +- Add Human readable netlink dumps +- Add L2 NHG support +- Add support for LSPs to FPM dataplane +- Add ability for other protocol daemons to install nexthop groups into the kernel +- Add YANG support for route-maps +- Improve scale performance when handling a large number of VRF's +- Improve network namespace handling +- Improve asic-offload handling +- Improve FreeBSD interface and route handling +- Improve handling of neighbors in kernel dataplane plugin +- Improve label manager +- Improve route-map processing +- Improve debug-ability of routes and VRFs +- Improve FPM dataplane plugin +- Improve handling of reachability / nexthop tracking on shutdown interfaces +- Improve EVPN support +- Fix startup handling of `set src X` +- Various bug fixes and performance improvements + +* Wed Mar 3 2021 Martin Winter <mwinter@opensourcerouting.org> - 7.5.1 +- BABEL: +- Fix connected route leak on change +- BFD: +- Session lookup was sometimes wrong +- Memory leak and handling cleanups +- In some situations handle vrf appropriately when receiving packets +- BGP: +- Peer Group Inheritance Fixes +- Dissallow attempt to peer peers reachable via blackholes +- Send BMP down message when reachability fails +- Cleanup handling of aggregator data when the AGG AS is 0 +- Handle `neighbor <peer-group allowas-in` config changes properly +- Properly parse community and lcommunity values in some circumstances +- Allow peer-groups to configure `ttl-security hops` +- Prevent v6 routes with v4 nexthops from being installed +- Allow `default-originate` to be cleared from a peer group +- Fix evpn route-map vni filter at origin +- local routes were using non-default distance +- Properly track if the nexthop was updated in some circumstances +- Cleanup `show running` when running bgp with `-e X` values +- Various Memory leaks in show commands +- Properly withdraw exported routes when deleting a VRF +- Avoid resetting ebgp-multihop if peer setting is the same as peer-group +- Properly encode flowspec rules to zebra in some rare circumstances +- Generate statistics for routes in bgp when we have exactly 1 route +- Properly apply route-map for the default-originate command +- EIGRP: +- Properly set MTU for eigrp packets sent +- Various memory leaks and using uninited data fixes +- ISIS: +- When last area address is removed, resign if we were the DR +- Various memory leaks and using uninited data fixes +- LDP: +- Various memory leaks and using uninited data fixes +- NHRP: +- Use onlink routes when prefix == nh +- Shortcut routes are installed with proper nexthop +- OSPF: +- Prevent duplicate packet read in multiple vrf situation +- Fix area removal at interface level +- Restore Point to MultiPoint interface types +- Correctly handle MTU change on startup +- Multi Instance initialization sometimes was not successful +- NSSA translate-always was not working properly +- OSPFv3: +- Don't send hellos on loopback interfaces +- Handle ECMP better when a sub-path is removed +- Memory leak and handling fixes +- Fix Link LSA not updating when router priority is modified +- Some output from show commands was wrong +- Intra area remote connected prefixes sometimes not installed +- PBR: +- Various memory leaks and using uninited data fixes +- PIM: +- SGRpt prune received during prune didn't override holdtime +- Various memory leaks and using uninited data fixes +- STATIC: +- Fix VRF and usage on startup in some instances +- Tableid was being mishandled in some cases +- VTYSH: +- Disable bracketed paste in readline. +- WATCHFRR: +- Various memory leaks and using uninited data fixes +- ZEBRA: +- Always install blackhole routes using kernel routes instead of nexthops +- Various memory leaks and using uninited data fixes +- Dissallow resolution to duplicate nexthops that created infinite nexthops +- Apply the route-map delay-timer globally +- Some routes were stuck in Queued state when using the FPM +- Better handle vrf creation when using namespaces +- Set NUD_NOARP on sticky mac entries in addtion to NTF_STICKY +- Allow `set src X` to work on startup +- FRR Library: +- Fix a variety of memory leaks +- Fix VRF Creation in some instances +- RPKI context editing was not properly handled in reload situations +- routemap code was not properly handling modification of CLI in some instances +- SNAPCRAFT: +- Update to using rtrlib 0.7.0 +- Fix passthrough path for Libyang 1.x +- ALPINE: +- Remove old docker deps + +* Mon Nov 2 2020 Donald Sharp <sharpd@nvidia.com> - 7.5 +- BFD +- Profile support +- Minimum ttl support +- BGP +- rpki VRF support +- GR fixes +- Add wide option to display of routes +- Add `maximum-prefix <num> force` +- Add `bestpath-routes` to neighbor command +- Add `bgp shutdown message MSG...` command +- Add v6 Flowspec support +- Add `neighbor <neigh> shutdown rtt` command +- Allow update-delay to be applied globaly +- EVPN +- Beginning of MultiHoming Support +- ISIS +- Segment Routing Support +- VRF Support +- Guard against adj timer display overflow +- Add support for Anycast-SIDs +- Add support for Topology Independent LFA (TI-LFA) +- Add `lsp-gen-interval 2` to isis configuration +- OSPF +- Segment Routing support for ECMP +- Various LSA fixes +- Prevent crash if transferring config amongst instances +- PBR +- Adding json support to commands +- DSCP/ECN based PBR Matching +- PIM +- Add more json support to commands +- Fix missing mesh-group commands +- MSDP SA forwarding +- Clear (s,g,rpt) ifchannel on (*, G) prune received +- Fix igmp querier election and IP address mapping +- Crash fix when RP is removed +- STATIC +- Northbound Support +- YANG +- Filter and route-map Support +- OSPF model definition +- BGP model definition +- VTYSH +- Speed up output across daemons +- Fix build-time errors for some --enable flags +- Speed up output of configuration across daemons +- ZEBRA +- nexthop group support for FPM +- northbound support for rib model +- Backup nexthop support +- netlink batching support +- Allow upper level protocols to request ARP +- Add json output for zebra ES, ES-EVI and access vlan dumps +- +- Upgrade to using libyang1.0.184 +- +- RPM +- Moved RPKI to subpackage +- Added SNMP subpackage +- +- As always there are too many bugfixes to list individually. This release +- compromises just over 1k of commits by the community, with contributors from +- 70 people. * Tue Jun 30 2020 Martin Winter <mwinter@opensourcerouting.org> - 7.4 - BGPd diff --git a/tests/topotests/lib/bgprib.py b/tests/topotests/lib/bgprib.py index a216e3588e..35a57d0a99 100644 --- a/tests/topotests/lib/bgprib.py +++ b/tests/topotests/lib/bgprib.py @@ -122,7 +122,7 @@ class BgpRib: luResult(target, True, title, logstr) def RequireUnicastRoutes(self, target, afi, vrf, title, wantroutes, debug=0): - logstr = "RequireVpnRoutes %s" % str(wantroutes) + logstr = "RequireUnicastRoutes %s" % str(wantroutes) vrfstr = "" if vrf != "": vrfstr = "vrf %s" % (vrf) diff --git a/tests/topotests/ospf_gr_helper/test_ospf_gr_helper.py b/tests/topotests/ospf_gr_helper/test_ospf_gr_helper.py index 2c7c6df37e..b7a10d630a 100644 --- a/tests/topotests/ospf_gr_helper/test_ospf_gr_helper.py +++ b/tests/topotests/ospf_gr_helper/test_ospf_gr_helper.py @@ -100,6 +100,8 @@ TC8. Verify helper functionality when dut is helping RR and new grace lsa def setup_module(mod): + return pytest.skip("OSPF GR helper mode is currently broken") + """ Sets up the pytest environment diff --git a/tests/topotests/ospf_gr_topo1/test_ospf_gr_topo1.py b/tests/topotests/ospf_gr_topo1/test_ospf_gr_topo1.py index debf7ad766..4b69d82887 100755 --- a/tests/topotests/ospf_gr_topo1/test_ospf_gr_topo1.py +++ b/tests/topotests/ospf_gr_topo1/test_ospf_gr_topo1.py @@ -139,6 +139,8 @@ def build_topo(tgen): def setup_module(mod): + return pytest.skip("OSPF GR helper mode is currently broken") + "Sets up the pytest environment" tgen = Topogen(build_topo, mod.__name__) tgen.start_topology() diff --git a/zebra/zebra_ptm.c b/zebra/zebra_ptm.c index ec68f585e3..b1d2f1f0b3 100644 --- a/zebra/zebra_ptm.c +++ b/zebra/zebra_ptm.c @@ -613,7 +613,7 @@ static int zebra_ptm_handle_msg_cb(void *arg, void *in_ctxt) int count = 0; RB_FOREACH (vrf, vrf_id_head, &vrfs_by_id) { - ifp = if_lookup_by_name_vrf(ifname, vrf); + ifp = if_lookup_by_name_vrf(port_str, vrf); if (ifp) { count++; if (!vrf_is_backend_netns()) |
