|
Description
|
If probe-based failure detection is enabled, but no probe targets are
found, then in.mpathd will place the interface into the PI_NOTARGETS state.
However, this prevents any MI_OFFLINE operations (which are a necessary
precursor to DR) from considering the interface, because of the marked line
of code:
pg = pi->pi_group;
nif = 0;
if (pg != phyint_anongroup) {
for (nif = 0, pi2 = pg->pg_phyint; pi2 != NULL;
pi2 = pi2->pi_pgnext) {
--> if ((pi2->pi_state == PI_RUNNING) ||
(pg->pg_groupfailed &&
!(pi2->pi_flags & IFF_OFFLINE)))
nif++;
}
}
if (nif < mio->mio_min_redundancy)
return (send_result(newfd, IPMP_EMINRED, 0));
However, rather than simply change this to include PI_NOTARGETS, we should
probably revisit the entire notion of the PI_NOTARGETS state. Specifically,
if PI_NOTARGETS is considered equivalent to PI_RUNNING (e.g., in.mpathd will
not mark an interface failed if it is in the PI_NOTARGETS state), then we
may want to remove the state and just use pii_ntargets to differentiate when
necessary (e.g., when providing status reports via ifstate()).
|