Opened 2 days ago

Closed 24 hours ago

#455 closed баг (fixed)

Баг с состоянием КО SL

Reported by: roman_zhur Owned by: alx
Priority: высокий Milestone: 1 очередь
Component: any Keywords:
Cc:

Description (last modified by roman_zhur)

После звонка канальное окончание SL не выходит из состояния "Blocked", хотя ожидался переход в состояние "Idle".

В одном блоке 3U одна плата VE-01, одна плата VE-02, одна плата FS-08, к которой подключены два аналоговых телефона.
На плате VE-01 создано КО FXS с URI 11@IP_VE-01 и КО SL с URI ve01@IP_VE-01. На SL вариант сигнализации 2100 Гц.
На плате VE-02 создано КО FXS с URI 22@IP_VE-02 и КО SL с URI ve02@IP_VE-02. На SL вариант сигнализации 2100 Гц.
КО SL скоммутированы через TDM.

Эксперимент:

  • звоним с первого телефона (11) на второй (22), сигнализация и КПВ есть;
  • телефон 22 звонит, поднимаем трубку;
  • голос передается в обе стороны;
  • кладем трубку первого телефона (с которого звонили);
  • кладем трубку второго телефона.

После этого КО SL на VE-01 (с которого звонили) не переходит из состояния "Blocked".

версия ПО:
VE-01 - 91
VE-02 - 55

Attachments (10)

messages_VE-01 (12.9 KB ) - added by roman_zhur 2 days ago.
messages_VE-02 (12.1 KB ) - added by roman_zhur 2 days ago.
config-export-VE-01.xml (763 bytes ) - added by roman_zhur 2 days ago.
config-export-VE-02.xml (749 bytes ) - added by roman_zhur 2 days ago.
messages_ve01_old (10.5 KB ) - added by roman_zhur 28 hours ago.
messages_ve02_old (13.9 KB ) - added by roman_zhur 28 hours ago.
messages_ve01_new (10.0 KB ) - added by roman_zhur 28 hours ago.
messages_ve02_new (14.8 KB ) - added by roman_zhur 28 hours ago.
messages_ve01 (11.8 KB ) - added by roman_zhur 27 hours ago.
messages_ve02 (14.4 KB ) - added by roman_zhur 27 hours ago.

Download all attachments as: .zip

Change History (23)

by roman_zhur, 2 days ago

Attachment: messages_VE-01 added

by roman_zhur, 2 days ago

Attachment: messages_VE-02 added

by roman_zhur, 2 days ago

Attachment: config-export-VE-01.xml added

by roman_zhur, 2 days ago

Attachment: config-export-VE-02.xml added

comment:1 by roman_zhur, 2 days ago

Description: modified (diff)

comment:2 by alx, 2 days ago

Status: newaccepted

Очень странная ситуация...

Как должно быть:

Когда канальное окончание SL получает BYE со стороны IP, оно переходит в состояние Blocked и посылает в канал TDM тональный сигнал. Тональный сигнал в канал генерирует MSP. Для этого CSP посылает в MSP команду примерно такого содержания: "генерируй в канал тональный сигнал частотой 2100 Гц и уровнем -10 dBm в течение 800 мс". MSP выполняет команду (генерирует сигнал), и после окончания генерации (через 800 мс) передает в CSP сообщение "Tone Completed". Получив сообщение "Tone Completed", канальное окончание SL переходит в исходное (Idle) состояние.

Что мы видим в данном случае:

Канальное окончание SL получило BYE со стороны IP, передало команду генерировать "отбой" в канал (мы это видим по логу с противоположного конца канала) и перешло в состояние Blocked. Но вот сообщения "Tone Completed" из MSP, судя по приложенному логу, почему-то не пришло... В результате канальное окончание так и осталось в состоянии Blocked.

По-моему это очевидный баг MSP. Я такое вижу впервые, и что с этим можно сделать, я пока не представляю...

Last edited 29 hours ago by alx (previous) (diff)

comment:3 by alx, 29 hours ago

У меня не получается воспроизвести баг. Выполняю следующий сценарий:

  • Вызов канального окончания SL.
  • Удаленное окончание SL формирует вызов в сеть IP.
  • Вызываемый дает ответ.
  • Пауза 5 секунд.
  • Вызывающий передает BYE канальному окончанию SL.
  • Пауза 2 секунды.

Описанный выше сценарий повторил 3000 раз, канальное окончание в состоянии Blocked так и не зависло.

Version 0, edited 29 hours ago by alx (next)

comment:4 by alx, 29 hours ago

В виду отсутствия малейших предположений о причине неприхода индикации от MSP не вижу иного выхода кроме как применить "костыль", борющийся не с причиной, а со следствием. Перед передачей в канал TDM сигнала "отбой" канальное окончание запускает таймер на 5 секунд. Если в течение этого времени индикация "Tone Completed" из MSP не приходит, то канальное окончание повторно передает сигнал "отбой". Предполагаю, что повторная передача сигнала завершится приходом сообщения "Tone Completed". Потому что если эта индикация вообще перестанет приходить, то канальное окончание будет вообще неработоспособно, и тогда хорошо и правильно, что оно останется в состоянии Blocked. Также перед отправкой сигнала "отбой" выполняется безусловное пересоздание канала в MSP.

Модифицированный sip_ua для VE-01 лежит в http://repo.adc-line.ru/misc/sip_ua. Прошу записать его в плату VE-01, воспроизвести проблему и подтвердить, что через 5 секунд после повторной передачи "отбой" канальное окончание действиетльно перейдет в исходное.

in reply to:  4 comment:5 by alx, 29 hours ago

Replying to alx:

Прошу записать его в плату VE-01, воспроизвести проблему и подтвердить, что через 5 секунд после повторной передачи "отбой" канальное окончание действиетльно перейдет в исходное.

И желательно лог этого события из VE-01 приложить к тикету - я бы посмотрел...

comment:6 by roman_zhur, 28 hours ago

Сейчас воспроизвел баг у себя программно: посылаем вызов и отвечаем через СУВы. Звонок 22@ --> 11@.
Баг воспроизводится. В логах попытался воспроизвести баг таким образом.

Записал модифицированный sip_ua на VE-01, на VE-02 sip_ua не трогал.

С новым sip_ua баг не воспроизводится.

Логи с "_old" со старым sip_ua на VE-01, логи с "_new" после замены sip_ua.

Last edited 28 hours ago by roman_zhur (previous) (diff)

by roman_zhur, 28 hours ago

Attachment: messages_ve01_old added

by roman_zhur, 28 hours ago

Attachment: messages_ve02_old added

by roman_zhur, 28 hours ago

Attachment: messages_ve01_new added

by roman_zhur, 28 hours ago

Attachment: messages_ve02_new added

in reply to:  6 ; comment:7 by alx, 28 hours ago

Replying to roman_zhur:

Сейчас воспроизвел баг у себя программно
С новым sip_ua баг не воспроизводится.

Вижу здесь явное противоречие... Если ты воспроизвел баг, значит он воспроизводится. А если не воспроизводится, значит ты его не воспроизвел... По-моему так. (с) Винни Пух :)

in reply to:  7 ; comment:8 by roman_zhur, 28 hours ago

поправил комментарий.
я воспроизвел баг новым способом, потом заменил sip_ua, после замены баг не воспроизводится.

in reply to:  8 comment:9 by alx, 27 hours ago

Replying to roman_zhur:

потом заменил sip_ua, после замены баг не воспроизводится.

Как странно... Это неожиданный для меня результат...

Единственное предположение - на воспроизведение могло повлиять безусловное пересоздание канала перед посылкой "отбой". Убрал безусловное пересоздание соединения, но оставил таймер. Обновил файл. Попробуй воспроизвести в таком варианте...

Last edited 27 hours ago by alx (previous) (diff)

comment:10 by roman_zhur, 27 hours ago

С новым sip_ua баг так же не воспроизводится.

by roman_zhur, 27 hours ago

Attachment: messages_ve01 added

by roman_zhur, 27 hours ago

Attachment: messages_ve02 added

in reply to:  10 comment:11 by alx, 25 hours ago

Replying to roman_zhur:

С новым sip_ua баг так же не воспроизводится.

В таком случае, я думаю, что что-то "сломалось" в твоем методе. Запуск таймера перед посылкой сигнала "отбой" никак не мог повлиять на работу MSP и, соответственно, воспроизводимость бага...

in reply to:  10 comment:12 by alx, 24 hours ago

Replying to roman_zhur:

С новым sip_ua баг так же не воспроизводится.

Уточни, пожалуйста, как именно ты определяешь, воспроизвелся баг или нет?

Я смотрю приложенный файл messages_ve01 и вижу там следующее:

May 14 08:05:39 sip_ua[391]: sl.cpp:208: ---> ts=2, state=Connected: Call disconnected, ts=2, flags=0000, data=1
...
May 14 08:06:15 sip_ua[391]: sl.cpp:208: ---> ts=2, state=Blocked: Tone completed, ts=2, flags=0000, data=5

Обрати внимание на state=...... Здесь видно, что в 08:05:39 канальное окончание получило отбой. Как мы знаем из его описания, при этом оно переходит в состояние Blocked и передает сигнал "отбой". По окончании передачи канальное окончание должно получить сообщение "Tone completed" и перейти в исходное. Из этого лога видно, что сообщение "Tone completed" было получено в 08:06:15, то есть через 6 (шесть!) секунд после получения отбоя от вызывающей стороны. И на этот момент канальное окончание все еще находится в состоянии Blocked. А мы знаем, что передача сигнала "отбой" длится 800 мс.

Почему же ты говоришь, что баг не воспроизводится? Разве вот это вот описанное выше не похоже на наш баг? Ты разве не заметил, что после отбоя вызывающего канальное окончание "залипло" в состоянии Blocked на 6 секунд (то есть до срабатывания таймаута - напоминаю, что я установил таймер на 5 секунд, и еще одна секунда - это повторная передача сигнала "отбой")?

Сравни это с логом messages_ve01_new, когда баг действительно не воспроизвелся:

May 14 07:22:35 sip_ua[421]: sl.cpp:206: ---> ts=2, state=Connected: Call disconnected, ts=2, flags=0000, data=9
May 14 07:22:36 sip_ua[421]: sl.cpp:206: ---> ts=2, state=Blocked: Tone completed, ts=2, flags=0000, data=0

А вот что видела удаленная сторона:

May 14 08:05:39 sip_ua[454]: sl.cpp:205: ---> ts=2, state=Connected: Tone detected, ts=2, flags=0000, data=28
...
May 14 08:05:40 sip_ua[454]: sl.cpp:205: ---> ts=2, state=Connected: Tone detected, ts=2, flags=0000, data=255
...
May 14 08:05:44 sip_ua[454]: sl.cpp:205: ---> ts=2, state=Idle: Tone detected, ts=2, flags=0000, data=28
...
May 14 08:05:45 sip_ua[454]: sl.cpp:205: ---> ts=2, state=Idle: Tone detected, ts=2, flags=0000, data=255

Здесь "data=28" означает, что детектирован сигнал частотой 2100 Гц, а "data=255" означает, что сигнал прекратился. Две посылки с интервалом 5 секунд. При этом сообщение "Tone completed" на вызывающей стороне только одно. По-моему вполне ясно, что произошло - после первой посылки "отбой" сообщение "Tone completed" не пришло. Через 5 секунд работал таймаут, по которому "отбой" был послан второй раз, и на этот раз сообщение "Tone completed" пришло (на что я изначально и рассчитывал).

По-моему можно считать, что ситуация была успешно воспроизведена. Оснований для этого вполне достаточно. "Костыль", который был применен, работает. Ну и пересоздание канала я верну обратно, раз уж по счастливому стечению обстоятельств было обнаружено, что оно само по себе уже помогает.

comment:13 by alx, 24 hours ago

Resolution: fixed
Status: acceptedclosed

In 2512/sip_ua:

Канальному окончанию SL добавлен "костыль"
для предотвращения "залипания" канального окончания
в состоянии Blocked в случае не прихода сообщения
"Tone completed" из MSP после окончания передачи
сигнала "отбой".

Перед посылкой сигнала "Отбой" кнальное окончание пересоздает
канал в MSP (есть неподтвержденные данные, что это само
по себе помогает устранить проблему), и запускается таймер
на 5 секунд. Если за 5 секунд сообщение "Tone completed"
не приходит, процедура отбоя выполняется повторно (включая
пересоздание канала в MSP и запуск таймера).

Практический эксперимент показал, что даже без пересоздания
канала повторная посылка сигнала "отбой" заказчивается получением
"Tone completed".

Closes #455.

Note: See TracTickets for help on using tickets.