SCTP recv problems
От: ENP  
Дата: 06.02.14 05:32
Оценка:
Здравствуйте!

Есть некое ПО, использующее SCTP и работающее на одной машине, но не работающее на другой. Все ПО и сетевые настройки на машинах абсолютно идентичны — для исключения эффекта разной кривизны рук/глаз обе машины загружались с linux liveusb и далее запускался скрипт в духе:

rpm -Uvh software.rpm
echo ... > /etc/software.conf
ip a add ...
ip r add ...
service software start


В поисках источника проблемы докатились до того, что написали маленький SCTP-сервер, который точно так же работает только на одной из машин:

#!/usr/bin/perl

use strict;
use Socket;

my $proto = getprotobyname('sctp');

socket(server, PF_INET, SOCK_RAW, $proto) || die "socket error: $!";
bind(server, sockaddr_in(0, INADDR_ANY)) || die "bind error: $!";

my $buffer;

while (1) {
  print "recv wait ...\n";
  my $paddr = recv(server, $buffer, 65535, 0);
  my ($port, $iaddr) = sockaddr_in($paddr);
  print "recv from [".inet_ntoa($iaddr)."]\n";
}


На одной машине поведение такое:

# ./sctp.pl
recv wait ...
recv from [10.10.10.1]
recv wait ...
recv from [10.10.10.1]


и:

$ tshark -i eth0 -R 'sctp'
Capturing on eth0
  9.304980 10.10.10.1 -> 10.10.10.2 SCTP 86 INIT
  9.305173 10.10.10.2 -> 10.10.10.1 SCTP 50 ABORT
 39.426030 10.10.10.1 -> 10.10.10.2 SCTP 86 INIT
 39.426237 10.10.10.2 -> 10.10.10.1 SCTP 50 ABORT


На другой:

# ./sctp.pl
recv wait ...


и:

$ tshark -i eth0 -R 'sctp'
Capturing on eth0
  5.112609 10.10.10.1 -> 10.10.10.2 SCTP 86 INIT
  6.212575 10.10.10.1 -> 10.10.10.2 SCTP 86 INIT


Отчего INIT-пакеты не добираются до сервера? Да, iptables на обоих машинах отсутствует, модуль sctp не загружен, ipv6 выключен.
sctp
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.