Skip to content

Commit

Permalink
Merge pull request #3232 from donaldsharp/6.0_revert_default_originat…
Browse files Browse the repository at this point in the history
…e_changes

6.0 revert default originate changes
  • Loading branch information
eqvinox authored Oct 24, 2018
2 parents 73c497e + 0d67788 commit f9d3502
Showing 1 changed file with 25 additions and 37 deletions.
62 changes: 25 additions & 37 deletions bgpd/bgp_updgrp_adv.c
Original file line number Diff line number Diff line change
Expand Up @@ -663,7 +663,8 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw)
{
struct bgp *bgp;
struct attr attr;
struct bgp_info *info, init_info, tmp_info;
struct aspath *aspath;
struct bgp_info tmp_info;
struct prefix p;
struct peer *from;
struct bgp_node *rn;
Expand All @@ -687,59 +688,46 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw)
from = bgp->peer_self;

bgp_attr_default_set(&attr, BGP_ORIGIN_IGP);
aspath = attr.aspath;

attr.local_pref = bgp->default_local_pref;

memset(&p, 0, sizeof(p));
p.family = afi2family(afi);
p.prefixlen = 0;

if ((afi == AFI_IP6) || peer_cap_enhe(peer, afi, safi)) {
/* IPv6 global nexthop must be included.
*/
/* IPv6 global nexthop must be included. */
attr.mp_nexthop_len = BGP_ATTR_NHLEN_IPV6_GLOBAL;

/* If the peer is on shared nextwork and
* we have link-local nexthop set it. */
/* If the peer is on shared nextwork and we have link-local
nexthop set it. */
if (peer->shared_network
&& !IN6_IS_ADDR_UNSPECIFIED(&peer->nexthop.v6_local))
attr.mp_nexthop_len = BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL;
}
init_info.attr = &attr;
info = &init_info;
bgp_attr_intern(info->attr);

memset(&p, 0, sizeof(p));
p.family = afi2family(afi);
p.prefixlen = 0;

if (peer->default_rmap[afi][safi].name) {
SET_FLAG(bgp->peer_self->rmap_type, PEER_RMAP_TYPE_DEFAULT);
for (rn = bgp_table_top(bgp->rib[afi][safi]); rn;
rn = bgp_route_next(rn)) {
for (ri = rn->info; ri; ri = ri->next) {
struct attr dummy_attr;

/* Provide dummy so the route-map can't modify
* the attributes */
bgp_attr_dup(&dummy_attr, ri->attr);
tmp_info.peer = ri->peer;
tmp_info.attr = ri->attr;

/* Reset attributes every time to avoid \
* unexpected as-path prepends */
bgp_attr_default_set(tmp_info.attr,
BGP_ORIGIN_IGP);

if ((afi == AFI_IP6)
|| peer_cap_enhe(peer, afi, safi)) {
tmp_info.attr->mp_nexthop_len =
BGP_ATTR_NHLEN_IPV6_GLOBAL;

if (peer->shared_network
&& !IN6_IS_ADDR_UNSPECIFIED(
&peer->nexthop.v6_local))
tmp_info.attr->mp_nexthop_len =
BGP_ATTR_NHLEN_IPV6_GLOBAL_AND_LL;
}
tmp_info.attr = &dummy_attr;

ret = route_map_apply(
peer->default_rmap[afi][safi].map,
&rn->p, RMAP_BGP, &tmp_info);

info = &tmp_info;
bgp_attr_intern(info->attr);

/* The route map might have set attributes. If
* we don't flush them
* here, they will be leaked. */
bgp_attr_flush(&dummy_attr);
if (ret != RMAP_DENYMATCH)
break;
}
Expand All @@ -761,13 +749,12 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw)
SUBGRP_STATUS_DEFAULT_ORIGINATE)) {

if (bgp_flag_check(bgp, BGP_FLAG_GRACEFUL_SHUTDOWN)) {
bgp_attr_add_gshut_community(info->attr);
bgp_attr_add_gshut_community(&attr);
}

SET_FLAG(subgrp->sflags,
SUBGRP_STATUS_DEFAULT_ORIGINATE);
subgroup_default_update_packet(subgrp, info->attr,
from);
subgroup_default_update_packet(subgrp, &attr, from);

/* The 'neighbor x.x.x.x default-originate' default will
* act as an
Expand All @@ -787,7 +774,8 @@ void subgroup_default_originate(struct update_subgroup *subgrp, int withdraw)
BGP_ADDPATH_TX_ID_FOR_DEFAULT_ORIGINATE);
}
}
aspath_unintern(&info->attr->aspath);

aspath_unintern(&aspath);
}

/*
Expand Down

0 comments on commit f9d3502

Please sign in to comment.