diff options
-rw-r--r-- | bgpd/bgp_route.c | 4 | ||||
-rw-r--r-- | bgpd/bgpd.c | 7 | ||||
-rw-r--r-- | zebra/ChangeLog | 5 | ||||
-rw-r--r-- | zebra/Makefile.in | 4 | ||||
-rw-r--r-- | zebra/rt_netlink.c | 4 |
5 files changed, 20 insertions, 4 deletions
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index 87d305cb..58d97b0f 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -2859,7 +2859,7 @@ bgp_aggregate_increment (struct bgp *bgp, struct prefix *p, if ((aggregate = rn->info) != NULL && rn->p.prefixlen < p->prefixlen) { bgp_aggregate_delete (bgp, &rn->p, afi, safi, aggregate); - bgp_aggregate_route (bgp, &rn->p, ri, safi, safi, NULL, aggregate); + bgp_aggregate_route (bgp, &rn->p, ri, afi, safi, NULL, aggregate); } bgp_unlock_node (child); } @@ -2886,7 +2886,7 @@ bgp_aggregate_decrement (struct bgp *bgp, struct prefix *p, if ((aggregate = rn->info) != NULL && rn->p.prefixlen < p->prefixlen) { bgp_aggregate_delete (bgp, &rn->p, afi, safi, aggregate); - bgp_aggregate_route (bgp, &rn->p, NULL, safi, safi, del, aggregate); + bgp_aggregate_route (bgp, &rn->p, NULL, afi, safi, del, aggregate); } bgp_unlock_node (child); } diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index f116a0cf..53263637 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -797,6 +797,13 @@ peer_as_change (struct peer *peer, as_t as) type = peer_sort (peer); peer->as = as; + if (bgp_config_check (peer->bgp, BGP_CONFIG_CONFEDERATION) + && ! bgp_confederation_peers_check (peer->bgp, as) + && peer->bgp->as != as) + peer->local_as = peer->bgp->confed_id; + else + peer->local_as = peer->bgp->as; + /* Advertisement-interval reset */ if (peer_sort (peer) == BGP_PEER_IBGP) peer->v_routeadv = BGP_DEFAULT_IBGP_ROUTEADV; diff --git a/zebra/ChangeLog b/zebra/ChangeLog index b5383f1d..1f392197 100644 --- a/zebra/ChangeLog +++ b/zebra/ChangeLog @@ -1,3 +1,8 @@ +2003-02-06 Francois Deppierraz <francois@ctrlaltdel.ch> + + * rt_netlink.c (netlink_route_multipath): Set RTM_F_EQUALIZE when + it exists. + 2002-09-28 Akihiro Mizutani <mizutani@net-chef.net> * zebra_rib.c (static_add_ipv4): Null0 static route is added. diff --git a/zebra/Makefile.in b/zebra/Makefile.in index 60dd1989..620fada4 100644 --- a/zebra/Makefile.in +++ b/zebra/Makefile.in @@ -125,7 +125,7 @@ zebra_SOURCES = \ noinst_HEADERS = \ connected.h ioctl.h rib.h rt.h zserv.h redistribute.h debug.h rtadv.h \ - interface.h ipforward.h irdp.h + interface.h ipforward.h zebra_LDADD = ../lib/libzebra.a $(otherobj) $(LIB_IPV6) @@ -139,7 +139,7 @@ EXTRA_DIST = $(sysconf_DATA) if_ioctl.c if_netlink.c if_proc.c if_sysctl.c \ ipforward_solaris.c ipforward_sysctl.c rt_ioctl.c rt_netlink.c \ rt_socket.c rtread_netlink.c rtread_proc.c rtread_sysctl.c \ rtread_getmsg.c kernel_socket.c kernel_netlink.c mtu_kvm.c \ - GNOME-SMI GNOME-PRODUCT-ZEBRA-MIB irdp.c + GNOME-SMI GNOME-PRODUCT-ZEBRA-MIB subdir = zebra mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index baca1751..7a8073c2 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -1145,6 +1145,10 @@ netlink_route_multipath (int cmd, struct prefix *p, struct rib *rib, req.r.rtm_table = rib->table; req.r.rtm_dst_len = p->prefixlen; +#ifdef RTM_F_EQUALIZE + req.r.rtm_flags |= RTM_F_EQUALIZE; +#endif /* RTM_F_EQUALIZE */ + if (rib->flags & ZEBRA_FLAG_BLACKHOLE) discard = 1; else |