Thiru,

I was hoping you might be able to shed some light on this comment in
icmp_inbound():

  /*
   * ICMP echo replies should go out on the same interface
   * the request came on as probes used by in.mpathd for detecting
   * NIC failures are ECHO packets. We turn-off load spreading
   * by setting ipsec_in_attach_if to B_TRUE, which is copied
   * to ipsec_out_attach_if by ipsec_in_to_out called later in this
   * function. This is in turn handled by ip_wput and ip_newroute
   * to make sure that the packet goes out on the interface it came
   * in on. If we don't turnoff load spreading, the packets might get
   * dropped if there are no non-FAILED/INACTIVE interfaces for it
   * to go out and in.mpathd would wrongly detect a failure or
   * mis-detect a NIC failure for link failure. As load spreading
   * can happen only if ill_group is not NULL, we do only for
   * that case and this does not affect the normal case.
   *
   * We turn off load spreading only on echo packets that came from
   * on-link hosts. If the interface route has been deleted, this will
   * not be enforced as we can't do much. For off-link hosts, as the
   * default routes in IPv4 does not typically have an ire_ipif
   * pointer, we can't force MATCH_IRE_ILL in ip_wput/ip_newroute.
   * Moreover, expecting a default route through this interface may
   * not be correct. We use ipha_dst because of the swap above.
   */

The main part I don't understand is:

  If we don't turnoff load spreading, the packets might get dropped if
  there are no non-FAILED/INACTIVE interfaces for it to go out.

Specifically, it seems to me that the interface must be functioning in
order to have data addresses and thus to receive an ICMP_ECHO_REQUEST
message in the first place.  Given that the interface is functioning, that
means there must be at least one functioning interface for the packet to
go out of and thus I don't see how the above comment applies.

What am I missing?

Thanks,
-- 
meem

Reply via email to