Subject: Inconsistent behavior while sending HEART_BEAT_ACK during primary path recovery in Multi-Homing

From: Padmalochan Moharana <[email-masked]>
Date: Thu, 26 Aug 2010 11:50:18 +0530

Hi,

We have a sctp multi-homing setup with host and peer having two
network interfaces with IP addresses belong to two different subnets.

Host       IP  eth5 (192.168.16.125 – primary IP),
  IP eth6 (192.168.17.125 – secondary IP): Multi-Homed endpoint

Peer-end IP eth5 (192.168.16.129 – primary IP) ,
         IP eth6 (192.168.17.129): Multi-Homed endpoint.

The network interfaces of host and peer are connected with crossover cable.

We have observed the below behavior

Peer sends HEART_BEAT_REQ to both the IPs of Host and Host sends back
HEART_BEAT_ACK using the corresponding path.
Host sends HEART_BEAT_REQ to both the IPs of Peer and Peer sends back
HEART_BEAT_ACK using the corresponding path.
All data packets between host and peer are exchanged in primary path
When the link of primary path is plugged out data packets between host
and peer are exchanged in secondary path
When the primary path link is plugged in again Peer sends
HEART_BEAT_REQ over primary path by keeping its primary IP
(192.168.16.129) as source IP and primary IP of host (192.168.16.125)
as destination IP. Host sends back the HEART_BEAT_ACK over secondary
path by keeping its secondary IP (192.168.17.125) as source IP and
secondary IP of peer (192.168.17.129) as destination IP.
Now the packets from peer to host are transmitted over primary path
but the packets from host to peer are transmitted over secondary path
After some time Host sends HEART_BEAT_REQ over primary path by keeping
its primary IP (192.168.16.125) as source IP and primary IP of Peer
(192.168.16.129) as destination IP. Peer sends back the HEART_BEAT_ACK
over primary path by keeping its primary IP (192.168.16.129) as source
IP and primary IP of Host (192.168.16.125) as destination IP.
Then after all the data packets between host and peer are exchanged in
primary path.

The point 5 above is bit confusing as per section 3.3.6 of rfc-4960 “A
HEARTBEAT ACK is always sent to the source IP address of the IP
datagram containing the HEARTBEAT chunk to which this ACK is
responding”. But in the above case host replies HEART_BEAT_ACK to peer
by keeping the destination IP as secondary IP of peer which is
different than that has been received as source IP with HEART_BEAT
message.

The Linux kernel version is Redhat Enterprise 2.6.9-55ELsmp. Can
anyone clarify that, is this a recommended behavior in compliance with
RFC-4960 or could be bug in kernel?

Br,
Padmalochan

---

From: Yoshifumi Nishida <[email-masked]>
Date: Fri, 27 Aug 2010 11:08:20 -0700

this looks like a bug to me.
--
Yoshifumi Nishida
[email-masked]