|
Description
|
While doing Clearview IPMP testing, I found a problem that also affects
the existing IPMP implementation. Specifically, in.mpathd is in multicast
probe mode (e.g., because no suitable routes exist), and then a suitable
route is installed, in.mpathd may ignore that route and continue in
multicast mode. Specifically, in target_add(), we attempt to check
whether the target already exists before calling target_create():
tg = target_lookup(pii, addr);
/*
* If the target does not exist, create it; target_create() will set
* tg_in_use to true. If it exists already, and it is a router
* target, set tg_in_use to to true, so that init_router_targets()
* won't delete it
*/
if (tg == NULL)
target_create(pii, addr, is_router);
else if (is_router)
tg->tg_in_use = 1;
However, we fail to account for the possibility that the target may
already exist as a multicast target. So, if the router added to the
routing table is also a multicast target (quite likely), we will skip
the target_create() call and thus in.mpathd will erroneously continue
to use multicast targets.
|