mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-07 09:22:03 +00:00
Merge pull request #17605 from donaldsharp/upstream_some_evpn
Upstream some internal code
This commit is contained in:
commit
024c9446a5
@ -1669,9 +1669,18 @@ static int update_evpn_type5_route_entry(struct bgp *bgp_evpn,
|
|||||||
/* attribute changed */
|
/* attribute changed */
|
||||||
*route_changed = 1;
|
*route_changed = 1;
|
||||||
|
|
||||||
|
/* if the asn values are different, copy the asn of
|
||||||
|
* source vrf to the target (evpn) vrf entry.
|
||||||
|
*/
|
||||||
|
if (bgp_vrf->as != bgp_evpn->as) {
|
||||||
|
new_aspath = aspath_dup(static_attr.aspath);
|
||||||
|
new_aspath = aspath_add_seq(new_aspath, bgp_vrf->as);
|
||||||
|
static_attr.aspath = new_aspath;
|
||||||
|
}
|
||||||
/* The attribute has changed. */
|
/* The attribute has changed. */
|
||||||
/* Add (or update) attribute to hash. */
|
/* Add (or update) attribute to hash. */
|
||||||
attr_new = bgp_attr_intern(attr);
|
attr_new = bgp_attr_intern(&static_attr);
|
||||||
|
bgp_attr_flush(&static_attr);
|
||||||
bgp_path_info_set_flag(dest, tmp_pi,
|
bgp_path_info_set_flag(dest, tmp_pi,
|
||||||
BGP_PATH_ATTR_CHANGED);
|
BGP_PATH_ATTR_CHANGED);
|
||||||
|
|
||||||
@ -4212,9 +4221,7 @@ static int bgp_evpn_install_uninstall_table(struct bgp *bgp, afi_t afi,
|
|||||||
|
|
||||||
assert(attr);
|
assert(attr);
|
||||||
|
|
||||||
/* Only type-1, type-2, type-3, type-4 and type-5
|
/* Only EVPN route-types 1-5 are supported currently */
|
||||||
* are supported currently
|
|
||||||
*/
|
|
||||||
if (!(evp->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE
|
if (!(evp->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE
|
||||||
|| evp->prefix.route_type == BGP_EVPN_IMET_ROUTE
|
|| evp->prefix.route_type == BGP_EVPN_IMET_ROUTE
|
||||||
|| evp->prefix.route_type == BGP_EVPN_ES_ROUTE
|
|| evp->prefix.route_type == BGP_EVPN_ES_ROUTE
|
||||||
@ -4271,26 +4278,28 @@ static int bgp_evpn_install_uninstall_table(struct bgp *bgp, afi_t afi,
|
|||||||
bgp_evpn_attr_get_esi(pi->attr));
|
bgp_evpn_attr_get_esi(pi->attr));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* macip routes (type-2) are imported into VNI and VRF tables.
|
* AD/IMET routes (type-1/3) are imported into VNI table.
|
||||||
* IMET route is imported into VNI table.
|
* MACIP routes (type-2) are imported into VNI and VRF tables.
|
||||||
* prefix routes are imported into VRF table.
|
* Prefix routes (type 5) are imported into VRF table.
|
||||||
*/
|
*/
|
||||||
if (evp->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE ||
|
if (evp->prefix.route_type == BGP_EVPN_MAC_IP_ROUTE ||
|
||||||
evp->prefix.route_type == BGP_EVPN_IMET_ROUTE ||
|
evp->prefix.route_type == BGP_EVPN_IMET_ROUTE ||
|
||||||
evp->prefix.route_type == BGP_EVPN_AD_ROUTE ||
|
evp->prefix.route_type == BGP_EVPN_AD_ROUTE ||
|
||||||
evp->prefix.route_type == BGP_EVPN_IP_PREFIX_ROUTE) {
|
evp->prefix.route_type == BGP_EVPN_IP_PREFIX_ROUTE) {
|
||||||
|
if (evp->prefix.route_type != BGP_EVPN_IP_PREFIX_ROUTE) {
|
||||||
irt = in_vni_rt ? lookup_import_rt(bgp, eval) : NULL;
|
irt = in_vni_rt ? lookup_import_rt(bgp, eval) : NULL;
|
||||||
if (irt)
|
if (irt)
|
||||||
install_uninstall_route_in_vnis(
|
install_uninstall_route_in_vnis(bgp, afi, safi, evp, pi,
|
||||||
bgp, afi, safi, evp, pi, irt->vnis,
|
irt->vnis, import);
|
||||||
import);
|
}
|
||||||
|
|
||||||
|
if (evp->prefix.route_type != BGP_EVPN_AD_ROUTE &&
|
||||||
|
evp->prefix.route_type != BGP_EVPN_IMET_ROUTE) {
|
||||||
vrf_irt = in_vrf_rt ? lookup_vrf_import_rt(eval) : NULL;
|
vrf_irt = in_vrf_rt ? lookup_vrf_import_rt(eval) : NULL;
|
||||||
if (vrf_irt)
|
if (vrf_irt)
|
||||||
install_uninstall_route_in_vrfs(
|
install_uninstall_route_in_vrfs(bgp, afi, safi, evp, pi,
|
||||||
bgp, afi, safi, evp, pi, vrf_irt->vrfs,
|
vrf_irt->vrfs, import);
|
||||||
import);
|
}
|
||||||
|
|
||||||
/* Also check for non-exact match.
|
/* Also check for non-exact match.
|
||||||
* In this, we mask out the AS and
|
* In this, we mask out the AS and
|
||||||
|
@ -3469,7 +3469,9 @@ static void evpn_process_default_originate_cmd(struct bgp *bgp_vrf,
|
|||||||
BGP_L2VPN_EVPN_DEFAULT_ORIGINATE_IPV6);
|
BGP_L2VPN_EVPN_DEFAULT_ORIGINATE_IPV6);
|
||||||
}
|
}
|
||||||
|
|
||||||
bgp_evpn_install_uninstall_default_route(bgp_vrf, afi, safi, add);
|
if (is_l3vni_live(bgp_vrf))
|
||||||
|
bgp_evpn_install_uninstall_default_route(bgp_vrf,
|
||||||
|
afi, safi, add);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -732,6 +732,14 @@ void pbr_map_schedule_policy_from_nhg(const char *nh_group, bool installed)
|
|||||||
|
|
||||||
pbr_map_check(pbrms, false);
|
pbr_map_check(pbrms, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* vrf_unchanged pbrms have no nhg but their
|
||||||
|
* installation is contingent on other sequences which
|
||||||
|
* may...
|
||||||
|
*/
|
||||||
|
if (pbrms->vrf_unchanged)
|
||||||
|
pbr_map_check(pbrms, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -426,7 +426,6 @@ static void pim_zebra_connected(struct zclient *zclient)
|
|||||||
|
|
||||||
static void pim_zebra_capabilities(struct zclient_capabilities *cap)
|
static void pim_zebra_capabilities(struct zclient_capabilities *cap)
|
||||||
{
|
{
|
||||||
router->mlag_role = cap->role;
|
|
||||||
router->multipath = cap->ecmp;
|
router->multipath = cap->ecmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,7 +44,7 @@
|
|||||||
|
|
||||||
#define DEFAULT_PERIOD 5
|
#define DEFAULT_PERIOD 5
|
||||||
#define DEFAULT_TIMEOUT 90
|
#define DEFAULT_TIMEOUT 90
|
||||||
#define DEFAULT_RESTART_TIMEOUT 20
|
#define DEFAULT_RESTART_TIMEOUT 90
|
||||||
#define DEFAULT_LOGLEVEL LOG_INFO
|
#define DEFAULT_LOGLEVEL LOG_INFO
|
||||||
#define DEFAULT_MIN_RESTART 60
|
#define DEFAULT_MIN_RESTART 60
|
||||||
#define DEFAULT_MAX_RESTART 600
|
#define DEFAULT_MAX_RESTART 600
|
||||||
|
@ -282,7 +282,7 @@ int zsend_interface_address(int cmd, struct zserv *client,
|
|||||||
{
|
{
|
||||||
int blen;
|
int blen;
|
||||||
struct prefix *p;
|
struct prefix *p;
|
||||||
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, cmd, ifp->vrf->vrf_id);
|
zclient_create_header(s, cmd, ifp->vrf->vrf_id);
|
||||||
stream_putl(s, ifp->ifindex);
|
stream_putl(s, ifp->ifindex);
|
||||||
@ -323,7 +323,7 @@ static int zsend_interface_nbr_address(int cmd, struct zserv *client,
|
|||||||
struct nbr_connected *ifc)
|
struct nbr_connected *ifc)
|
||||||
{
|
{
|
||||||
int blen;
|
int blen;
|
||||||
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
struct prefix *p;
|
struct prefix *p;
|
||||||
|
|
||||||
zclient_create_header(s, cmd, ifp->vrf->vrf_id);
|
zclient_create_header(s, cmd, ifp->vrf->vrf_id);
|
||||||
@ -651,7 +651,7 @@ static int zsend_nexthop_lookup_mrib(struct zserv *client, struct ipaddr *addr,
|
|||||||
struct nexthop *nexthop;
|
struct nexthop *nexthop;
|
||||||
|
|
||||||
/* Get output stream. */
|
/* Get output stream. */
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
stream_reset(s);
|
stream_reset(s);
|
||||||
|
|
||||||
/* Fill in result. */
|
/* Fill in result. */
|
||||||
@ -706,7 +706,7 @@ int zsend_nhg_notify(uint16_t type, uint16_t instance, uint32_t session_id,
|
|||||||
zlog_debug("%s: type %d, id %d, note %s",
|
zlog_debug("%s: type %d, id %d, note %s",
|
||||||
__func__, type, id, zapi_nhg_notify_owner2str(note));
|
__func__, type, id, zapi_nhg_notify_owner2str(note));
|
||||||
|
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
stream_reset(s);
|
stream_reset(s);
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_NHG_NOTIFY_OWNER, VRF_DEFAULT);
|
zclient_create_header(s, ZEBRA_NHG_NOTIFY_OWNER, VRF_DEFAULT);
|
||||||
@ -835,7 +835,7 @@ void zsend_rule_notify_owner(const struct zebra_dplane_ctx *ctx,
|
|||||||
if (!client)
|
if (!client)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_RULE_NOTIFY_OWNER,
|
zclient_create_header(s, ZEBRA_RULE_NOTIFY_OWNER,
|
||||||
dplane_ctx_rule_get_vrfid(ctx));
|
dplane_ctx_rule_get_vrfid(ctx));
|
||||||
@ -889,7 +889,7 @@ void zsend_iptable_notify_owner(const struct zebra_dplane_ctx *ctx,
|
|||||||
if (!client)
|
if (!client)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, cmd, VRF_DEFAULT);
|
zclient_create_header(s, cmd, VRF_DEFAULT);
|
||||||
stream_putw(s, note);
|
stream_putw(s, note);
|
||||||
@ -923,7 +923,7 @@ void zsend_ipset_notify_owner(const struct zebra_dplane_ctx *ctx,
|
|||||||
if (!client)
|
if (!client)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, cmd, VRF_DEFAULT);
|
zclient_create_header(s, cmd, VRF_DEFAULT);
|
||||||
stream_putw(s, note);
|
stream_putw(s, note);
|
||||||
@ -959,7 +959,7 @@ void zsend_ipset_entry_notify_owner(const struct zebra_dplane_ctx *ctx,
|
|||||||
if (!client)
|
if (!client)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, cmd, VRF_DEFAULT);
|
zclient_create_header(s, cmd, VRF_DEFAULT);
|
||||||
stream_putw(s, note);
|
stream_putw(s, note);
|
||||||
@ -1049,13 +1049,12 @@ int zsend_router_id_update(struct zserv *client, afi_t afi, struct prefix *p,
|
|||||||
vrf_id_t vrf_id)
|
vrf_id_t vrf_id)
|
||||||
{
|
{
|
||||||
int blen;
|
int blen;
|
||||||
struct stream *s;
|
|
||||||
|
|
||||||
/* Check this client need interface information. */
|
/* Check this client need interface information. */
|
||||||
if (!vrf_bitmap_check(&client->ridinfo[afi], vrf_id))
|
if (!vrf_bitmap_check(&client->ridinfo[afi], vrf_id))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
/* Message type. */
|
/* Message type. */
|
||||||
zclient_create_header(s, ZEBRA_ROUTER_ID_UPDATE, vrf_id);
|
zclient_create_header(s, ZEBRA_ROUTER_ID_UPDATE, vrf_id);
|
||||||
@ -1077,7 +1076,7 @@ int zsend_router_id_update(struct zserv *client, afi_t afi, struct prefix *p,
|
|||||||
*/
|
*/
|
||||||
int zsend_pw_update(struct zserv *client, struct zebra_pw *pw)
|
int zsend_pw_update(struct zserv *client, struct zebra_pw *pw)
|
||||||
{
|
{
|
||||||
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_PW_STATUS_UPDATE, pw->vrf_id);
|
zclient_create_header(s, ZEBRA_PW_STATUS_UPDATE, pw->vrf_id);
|
||||||
stream_write(s, pw->ifname, IFNAMSIZ);
|
stream_write(s, pw->ifname, IFNAMSIZ);
|
||||||
@ -1094,7 +1093,7 @@ int zsend_pw_update(struct zserv *client, struct zebra_pw *pw)
|
|||||||
int zsend_assign_label_chunk_response(struct zserv *client, vrf_id_t vrf_id,
|
int zsend_assign_label_chunk_response(struct zserv *client, vrf_id_t vrf_id,
|
||||||
struct label_manager_chunk *lmc)
|
struct label_manager_chunk *lmc)
|
||||||
{
|
{
|
||||||
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_GET_LABEL_CHUNK, vrf_id);
|
zclient_create_header(s, ZEBRA_GET_LABEL_CHUNK, vrf_id);
|
||||||
/* proto */
|
/* proto */
|
||||||
@ -1120,7 +1119,7 @@ int zsend_assign_label_chunk_response(struct zserv *client, vrf_id_t vrf_id,
|
|||||||
int zsend_label_manager_connect_response(struct zserv *client, vrf_id_t vrf_id,
|
int zsend_label_manager_connect_response(struct zserv *client, vrf_id_t vrf_id,
|
||||||
unsigned short result)
|
unsigned short result)
|
||||||
{
|
{
|
||||||
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_LABEL_MANAGER_CONNECT, vrf_id);
|
zclient_create_header(s, ZEBRA_LABEL_MANAGER_CONNECT, vrf_id);
|
||||||
|
|
||||||
@ -1144,7 +1143,7 @@ static int zsend_assign_table_chunk_response(struct zserv *client,
|
|||||||
vrf_id_t vrf_id,
|
vrf_id_t vrf_id,
|
||||||
struct table_manager_chunk *tmc)
|
struct table_manager_chunk *tmc)
|
||||||
{
|
{
|
||||||
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_GET_TABLE_CHUNK, vrf_id);
|
zclient_create_header(s, ZEBRA_GET_TABLE_CHUNK, vrf_id);
|
||||||
|
|
||||||
@ -1164,7 +1163,7 @@ static int zsend_table_manager_connect_response(struct zserv *client,
|
|||||||
vrf_id_t vrf_id,
|
vrf_id_t vrf_id,
|
||||||
uint16_t result)
|
uint16_t result)
|
||||||
{
|
{
|
||||||
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_TABLE_MANAGER_CONNECT, vrf_id);
|
zclient_create_header(s, ZEBRA_TABLE_MANAGER_CONNECT, vrf_id);
|
||||||
|
|
||||||
@ -2406,7 +2405,7 @@ stream_failure:
|
|||||||
|
|
||||||
static void zsend_capabilities(struct zserv *client, struct zebra_vrf *zvrf)
|
static void zsend_capabilities(struct zserv *client, struct zebra_vrf *zvrf)
|
||||||
{
|
{
|
||||||
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_CAPABILITIES, zvrf->vrf->vrf_id);
|
zclient_create_header(s, ZEBRA_CAPABILITIES, zvrf->vrf->vrf_id);
|
||||||
stream_putl(s, vrf_get_backend());
|
stream_putl(s, vrf_get_backend());
|
||||||
@ -3990,8 +3989,7 @@ static inline void zebra_gre_source_set(ZAPI_HANDLER_ARGS)
|
|||||||
static void zsend_error_msg(struct zserv *client, enum zebra_error_types error,
|
static void zsend_error_msg(struct zserv *client, enum zebra_error_types error,
|
||||||
struct zmsghdr *bad_hdr)
|
struct zmsghdr *bad_hdr)
|
||||||
{
|
{
|
||||||
|
struct stream *s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
struct stream *s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_ERROR, bad_hdr->vrf_id);
|
zclient_create_header(s, ZEBRA_ERROR, bad_hdr->vrf_id);
|
||||||
|
|
||||||
|
@ -1152,6 +1152,7 @@ int zebra_evpn_mac_del(struct zebra_evpn *zevpn, struct zebra_mac *mac)
|
|||||||
listcount(mac->neigh_list));
|
listcount(mac->neigh_list));
|
||||||
|
|
||||||
SET_FLAG(mac->flags, ZEBRA_MAC_AUTO);
|
SET_FLAG(mac->flags, ZEBRA_MAC_AUTO);
|
||||||
|
mac->rem_seq = 0;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2411,6 +2412,7 @@ int zebra_evpn_del_local_mac(struct zebra_evpn *zevpn, struct zebra_mac *mac,
|
|||||||
UNSET_FLAG(mac->flags, ZEBRA_MAC_ALL_LOCAL_FLAGS);
|
UNSET_FLAG(mac->flags, ZEBRA_MAC_ALL_LOCAL_FLAGS);
|
||||||
UNSET_FLAG(mac->flags, ZEBRA_MAC_STICKY);
|
UNSET_FLAG(mac->flags, ZEBRA_MAC_STICKY);
|
||||||
SET_FLAG(mac->flags, ZEBRA_MAC_AUTO);
|
SET_FLAG(mac->flags, ZEBRA_MAC_AUTO);
|
||||||
|
mac->rem_seq = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -466,7 +466,7 @@ static int fec_send(struct zebra_fec *fec, struct zserv *client)
|
|||||||
rn = fec->rn;
|
rn = fec->rn;
|
||||||
|
|
||||||
/* Get output stream. */
|
/* Get output stream. */
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_FEC_UPDATE, VRF_DEFAULT);
|
zclient_create_header(s, ZEBRA_FEC_UPDATE, VRF_DEFAULT);
|
||||||
|
|
||||||
|
@ -61,7 +61,7 @@ void zebra_ipmr_route_stats(ZAPI_HANDLER_ARGS)
|
|||||||
suc = kernel_get_ipmr_sg_stats(zvrf, &mroute);
|
suc = kernel_get_ipmr_sg_stats(zvrf, &mroute);
|
||||||
|
|
||||||
stream_failure:
|
stream_failure:
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
stream_reset(s);
|
stream_reset(s);
|
||||||
|
|
||||||
|
@ -2838,6 +2838,8 @@ static void process_subq_early_route_add(struct zebra_early_route *ere)
|
|||||||
|
|
||||||
if (!ere->startup && (re->flags & ZEBRA_FLAG_SELFROUTE) &&
|
if (!ere->startup && (re->flags & ZEBRA_FLAG_SELFROUTE) &&
|
||||||
zrouter.asic_offloaded) {
|
zrouter.asic_offloaded) {
|
||||||
|
struct route_entry *entry;
|
||||||
|
|
||||||
if (!same) {
|
if (!same) {
|
||||||
if (IS_ZEBRA_DEBUG_RIB)
|
if (IS_ZEBRA_DEBUG_RIB)
|
||||||
zlog_debug(
|
zlog_debug(
|
||||||
@ -2854,6 +2856,25 @@ static void process_subq_early_route_add(struct zebra_early_route *ere)
|
|||||||
early_route_memory_free(ere);
|
early_route_memory_free(ere);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
RNODE_FOREACH_RE (rn, entry) {
|
||||||
|
if (CHECK_FLAG(entry->status, ROUTE_ENTRY_REMOVED))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (entry->type != ere->re->type)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If we have an entry that is changed but un
|
||||||
|
* processed and not a self route, then
|
||||||
|
* we should just drop this new self route
|
||||||
|
*/
|
||||||
|
if (CHECK_FLAG(entry->status, ROUTE_ENTRY_CHANGED) &&
|
||||||
|
!(entry->flags & ZEBRA_FLAG_SELFROUTE)) {
|
||||||
|
early_route_memory_free(ere);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set default distance by route type. */
|
/* Set default distance by route type. */
|
||||||
|
@ -2203,7 +2203,7 @@ static int zl3vni_send_add_to_client(struct zebra_l3vni *zl3vni)
|
|||||||
is_anycast_mac = false;
|
is_anycast_mac = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
/* The message is used for both vni add and/or update like
|
/* The message is used for both vni add and/or update like
|
||||||
* vrr mac is added for l3vni SVI.
|
* vrr mac is added for l3vni SVI.
|
||||||
@ -2246,7 +2246,7 @@ static int zl3vni_send_del_to_client(struct zebra_l3vni *zl3vni)
|
|||||||
if (!client)
|
if (!client)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, ZEBRA_L3VNI_DEL, zl3vni_vrf_id(zl3vni));
|
zclient_create_header(s, ZEBRA_L3VNI_DEL, zl3vni_vrf_id(zl3vni));
|
||||||
stream_putl(s, zl3vni->vni);
|
stream_putl(s, zl3vni->vni);
|
||||||
@ -4403,6 +4403,7 @@ static int zebra_vxlan_check_del_local_mac(struct interface *ifp,
|
|||||||
UNSET_FLAG(mac->flags, ZEBRA_MAC_ALL_LOCAL_FLAGS);
|
UNSET_FLAG(mac->flags, ZEBRA_MAC_ALL_LOCAL_FLAGS);
|
||||||
UNSET_FLAG(mac->flags, ZEBRA_MAC_STICKY);
|
UNSET_FLAG(mac->flags, ZEBRA_MAC_STICKY);
|
||||||
SET_FLAG(mac->flags, ZEBRA_MAC_AUTO);
|
SET_FLAG(mac->flags, ZEBRA_MAC_AUTO);
|
||||||
|
mac->rem_seq = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@ -5860,7 +5861,7 @@ static int zebra_vxlan_sg_send(struct zebra_vrf *zvrf,
|
|||||||
if (!CHECK_FLAG(zvrf->flags, ZEBRA_PIM_SEND_VXLAN_SG))
|
if (!CHECK_FLAG(zvrf->flags, ZEBRA_PIM_SEND_VXLAN_SG))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
s = stream_new(ZEBRA_MAX_PACKET_SIZ);
|
s = stream_new(ZEBRA_SMALL_PACKET_SIZE);
|
||||||
|
|
||||||
zclient_create_header(s, cmd, VRF_DEFAULT);
|
zclient_create_header(s, cmd, VRF_DEFAULT);
|
||||||
stream_putl(s, IPV4_MAX_BYTELEN);
|
stream_putl(s, IPV4_MAX_BYTELEN);
|
||||||
|
Loading…
Reference in New Issue
Block a user