]> git.puffer.fish Git - mirror/frr.git/commit
zebra: fix ifindex test condition (BZ#487)
authorMatthias Ferdinand <mf@14v.de>
Mon, 26 Dec 2011 12:35:30 +0000 (16:35 +0400)
committerDenis Ovsienko <infrastation@yandex.ru>
Mon, 2 Jan 2012 15:51:20 +0000 (19:51 +0400)
commit6dd6c307bf697184a77fd777c0226399de630be5
tree2ae25db5453e21fc5bdf6fd228bf3314ccf19eeb
parentb4b315989f9f73bdab4224eb3df80781fa986143
zebra: fix ifindex test condition (BZ#487)

When the same ip address is used on several interfaces,
and one of them gets deleted (or equivalent: set to down and
then address removed), rib_delete_ipv[46] will also remove
the connected route from other interfaces.

rib_delete_ipv[46] is called twice when an interface is
deleted:
    - for the "ifdown" event
    - for the address removal
(note: this may be specific to the netlink interface of linux)
The second call does not find the connected route to that same
ifindex anymore, but deletes similar connected routes to any
other ifindex instead.

Reason: the ifindex check is on the same level as the check
for ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. If everything
matches except for the ifindex, the "else" part (intended for
different route types) is executed, thus removing the route
from the wrong interface.

fix: move ifindex check inside the "then" part of the check
for ZEBRA_ROUTE_CONNECT/NEXTHOP_TYPE_IFINDEX. Now connected
routes to other ifindexes will not spill over to the "else"
part for different route types anymore.
zebra/zebra_rib.c