0
0
mirror of https://gitlab.nic.cz/labs/bird.git synced 2024-12-22 09:41:54 +00:00

Merge commit 'd40c26594c22ad934a13061e11b373bdf81af8f9' into integrated

Conflicts:

	proto/static/static.c
This commit is contained in:
Ondrej Zajicek 2014-05-02 18:13:20 +02:00
commit 6c58962611
2 changed files with 16 additions and 11 deletions

View File

@ -58,7 +58,7 @@ p_igp_table(struct proto *p)
static void
static_install(struct proto *p, struct static_route *r, struct iface *ifa)
{
if (r->installed)
if (r->installed > 0)
return;
DBG("Installing static route %I/%d, rtd=%d\n", r->net, r->masklen, r->dest);
@ -122,7 +122,7 @@ static_remove(struct proto *p, struct static_route *r)
if (!r->installed)
return;
DBG("Removing static route %I/%d\n", r->net, r->masklen);
DBG("Removing static route %I/%d via %I\n", r->net, r->masklen, r->via);
// int pxlen = r->masklen + (ipa_is_ip4(r->net) ? 96 : 0); // XXXX: Hack
net *n = net_find(p->table, r->net, r->masklen);
@ -419,19 +419,24 @@ static_match(struct proto *p, struct static_route *r, struct static_config *n)
if (r->neigh)
r->neigh->data = NULL;
WALK_LIST(t, n->iface_routes)
if (static_same_net(r, t))
{
t->installed = r->installed && static_same_dest(r, t);
return;
}
goto found;
WALK_LIST(t, n->other_routes)
if (static_same_net(r, t))
{
t->installed = r->installed && static_same_dest(r, t);
return;
}
goto found;
static_remove(p, r);
return;
found:
/* If destination is different, force reinstall */
if ((r->installed > 0) && !static_same_dest(r, t))
t->installed = -1;
else
t->installed = r->installed;
}
static inline rtable *

View File

@ -31,7 +31,7 @@ struct static_route {
struct neighbor *neigh;
byte *if_name; /* Name for RTD_DEVICE routes */
struct static_route *mp_next; /* Nexthops for RTD_MULTIPATH routes */
int installed; /* Installed in master table */
int installed; /* Installed in rt table, -1 for reinstall */
};
/* Dummy nodes (parts of multipath route) abuses masklen field for weight