СОРМ3 на SSW
Для организации СОРМ3 в рамках узла SSW реализован СОРМ3-посредник, который предоставляет данные о действиях абонентов во время вызовов и дублирует потоки медиа трафика для последующего хранения в СОРМ3-приемнике.
Участники процесса
CORE - ядро SSW, выполняет всю основную работу по фиксации, конвертации, агрегации и выгрузки сообщений о событиях диалога между абонентами; отвечает за регулирование выделяемых портов под выгрузку медиа трафика, а также за направление команд на узел медиа (MSR) о дублировании медиа потока в сторону СОРМ3-приемника.
PA-SIP - в рамках процесса выгрузки данных на СОРМ-приёмник выступает как генератор событий между абонентами диалога.
MYCELIUM - транспортный узел, в процессе СОРМ3 участвует в общении между CORE и PA-SIP, а также как способ отправки сигнальных сообщений на узел СОРМ3.
MSR (Media Server) - сервис осуществляющий проключение медиа трафика между абонентами, по команде от ядра системы дублирует медиа поток в СОРМ3 приемник.
СОРМ (узел)/ СОРМ-экстрактор/ СОРМ-посредник - узел реализующий функцию агрегирования, кодирования и отправки сигнальных сообщений на стороне SSW.
Удаленная сторона приема СОРМ - сторона, осуществляющая прием данных от узла SSW (сигнальных сообщений и медиа).
Описание работы алгоритма СОРМ3
- В процессе установления, поддержания и завершения связи между абонентами, при каждом возникшем событии, на стороне ядра формируется соответствующее сигнальное сообщение, которое отправляется на СОРМ3-посредник, кодируется и пересылается на удалённую сторону по заданными в системе параметрам.
- В момент начала разговорной фазы (между абонентами) производится дублирование медиа-потока по выделенным на ядре портам (выделяются менеджером портов) в сторону удаленного приёмника СОРМ-3, при этом также на удалённую сторону направляется соответствующее сигнальное сообщение (VoiceConnected) с информацией об этих портах для корректного получения медиа.
Установка
Для установки СОРМ-3 обновите или установите softswitch версии 14.15 согласно руководству по инсталляции.
Добавьте репозиторий
sudo sh -c "echo 'deb [arch=amd64] http://archive.eltex.org/ssw/bionic/3.14 stable main' > /etc/apt/sources.list.d/eltex-ecss10.list"
Установите пакет ecss-node
sudo apt update sudo apt install ecss-node
Настройка
СОРМ-3 доступен с версии ecss-node 14.12.2
СОРМ-3 ограничивается лицензией
Проверить наличие лицензии можно командой
cluster/storage/<STORAGE>/licence/current-limits
Значение Sorm extractor должно содержать имя лицензии
cluster/storage/ds1/licence/current-limits . . . Cluster adapter name sorm1 type sorm nodes sorm1@ecss2,sorm1@ecss1 . . . Sorm extractor norsi . . .
После установки лицензии необходимо перезапустить сервис ecss-ds.service
sudo systemctl restart ecss-ds.service
Включение сервсиса
Изначально СОРМ3 замаскирован, чтобы включить его выполните команды
sudo systemctl unmask ecss-sorm.service
sudo systemctl enable ecss-sorm.service
sudo systemctl start ecss-sorm.service
Настройка
Для того чтобы выгрузка происходила корректно, необходимо на SSW на домене проставить точки выгрузки и наименование "ноды" экстрактора.
Команда domain/<domain>/sorm3/set. Предварительное условие, должен быть создан профиль Сорм3 (sorm_profile) командой /cluster/core/<cluster>/sorm3/set.
Если команды sorm3 нет - нужно проверить лицензию
Создать профиль , для этого выполнить команду (в примере будем использовать порт 55554):
/cluster/core/core1/sorm3/set sorm_profile <PROFILE_NAME> <PROPERTY> <VALUE>
где:
<PROFILE_NAME> – имя профайла;
<PROPERTY> – параметр СОРМ3;
<VALUE> – значение СОРМ3.
Список параметров:
Параметр | Значение | Описание |
---|---|---|
ip-port | ip | IP-адрес СОРМ-приёмника (localhost недопустим, указывать только полный адрес)(удалённая сторона) |
ip-port | port | Порт на который будут поступать сигнальные сообщения на СОРМ-приёмник (удалённая сторона) |
port-range | range_start | Диапазон выделения портов для СОРМ-приёмника, RTP трафик / Начало диапазона |
port-range | range_end | Диапазон выделения портов для СОРМ-приёмника, RTP трафик / Окончание диапазона |
/cluster/core/core1/sorm3/info ┌────────────┬─────┐ │ Property │Value│ ├────────────┼─────┤ │sorm_profile│ │ └────────────┴─────┘
выполняется в CoCon
/cluster/core/core1/sorm3/set sorm_profile default_profile ip-port ip = 10.0.20.35 port = 55554
результат выполнения команды:
/cluster/core/core1/sorm3/set sorm_profile default_profile ip-port ip = 10.0.20.35 port = 55554 Property "sorm_profile" successfully changed from: to default_profile: 10.0.20.35 default_profile: 55554 default_profile no port ranges set.
добавить в профиль default_profile диапазон портов выделенных для СОРМ-приёмника, RTP трафик (в примере диапазон 12000-14000):
выполняется в CoCon
/cluster/core/core1/sorm3/set sorm_profile default_profile port-range range_start = 12000 range_end = 14000
результат выполнения команды:
cluster/core/core1/sorm3/set sorm_profile default_profile port-range range_start = 12000 range_end = 14000 Property "sorm_profile" successfully changed from: default_profile: 10.0.20.35 default_profile: 55554 default_profile no port ranges set to default_profile: 10.0.20.35 default_profile: 55554 default_profile: 12000 - 14000. cluster/core/core1/sorm3/info ┌────────────┬───────────────────────────────┐ │ Property │ Value │ ├────────────┼───────────────────────────────┤ │sorm_profile│default_profile: 10.0.20.35 │ │ │default_profile: 55554 │ │ │default_profile: 12000 - 14000 │ └────────────┴───────────────────────────────┘
Следующим шагом создаем точку выгрузки Сорм:
/domain/<DOMAIN>/sorm3/set <PROPERTY> <VALUE> Пример: /domain/eltex/sorm3/set enabled true
где:
- <DOMAIN> – имя домена;
- <PROPERTY> – параметр СОРМ3;
- <VALUE> – значение СОРМ3.
Список параметров:
Параметр | Значение | Описание |
---|---|---|
enabled | true | Флаг активации взаимодействия с СОРМ3-посредником |
extractor_ip | 10.0.20.71 | IP-адрес СОРМ-экстрактора (localhost недопустим, указывать только полный адрес) |
extractor_node | sorm1@ecss1 | Название узла СОРМ3 посредника |
adaptation | имя адаптации | имя адаптации созданной для услуги СОРМ |
entrypoint_profilep | имя профайла | имя профайла, созданного предыдущей командой |
/domain/test_domain/sorm3/info
domain/test_domain/sorm3/info ┌──────────────────┬───────────┬───────────┐ │ Property │ Domain │ Value │ ├──────────────────┼───────────┼───────────┤ │adaptation │test_domain│undefined │ │enabled │test_domain│false │ │entrypoint_profile│test_domain│ │ │extractor_ip │test_domain│127.0.0.1 │ │extractor_node │test_domain│sorm1@ecss1│ └──────────────────┴───────────┴───────────┘
domain/test_domain/sorm3/set enabled true
/domain/test_domain/sorm3/set enabled true Property "enabled" successfully changed from: false to true.
Подключаем ранее созданный профайл командой:
выполняется в CoCon
/domain/test_domain/sorm3/set entrypoint_profile default_profile
Подключаем ранее созданную адаптацию командой:
выполняется в CoCon
/domain/test_domain/sorm3/set adaptation sorm
в отличии от SORM1 в SORM3 адаптация должна иметь еще одно правило для cn digits
domain/test_domain/adaptation/show sorm Context was imported at 03.09.2024 15:26:43 <?xml version="1.0" encoding="UTF-8"?> <adaptation xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:noNamespaceSchemaLocation="ecss_modificators.xsd" name="sorm"> <rule name="private"> <conditions> <cn digits="?????"/> </conditions> <actions> <cn digits="791312{1,2,3,4,5}"/> </actions> <result> <finish/> </result> </rule> <rule name="privat1"> <conditions> <cgpn digits="?????"/> </conditions> <actions> <cgpn digits="791312{1,2,3,4,5}" ni="private"/> </actions> <result> <finish/> </result> </rule> <rule name="local_calls"> <conditions/> <actions/> <result> <finish/> </result> </rule> </adaptation>
в результате получим:
/domain/test_domain/sorm3/info ┌──────────────────┬───────────┬───────────────┐ │ Property │ Domain │ Value │ ├──────────────────┼───────────┼───────────────┤ │adaptation │test_domain│sorm │ │enabled │test_domain│true │ │entrypoint_profile│test_domain│default_profile│ │extractor_ip │test_domain│127.0.0.1 │ │extractor_node │test_domain│sorm1@ecss1 │ └──────────────────┴───────────┴───────────────┘
выполняется в CoCon
/domain/test_domain/sorm3/set extractor_ip 10.0.20.71
/domain/test_domain/sorm3/info ┌──────────────────┬───────────┬───────────────┐ │ Property │ Domain │ Value │ ├──────────────────┼───────────┼───────────────┤ │adaptation │test_domain│sorm │ │enabled │test_domain│true │ │entrypoint_profile│test_domain│default_profile│ │extractor_ip │test_domain│10.0.20.71 │ │extractor_node │test_domain│sorm1@ecss1 │ └──────────────────┴───────────┴───────────────┘
на этом шаге конфигурация Corm3 закончена.
Сделать тестовый звонок , посмотреть результат.
Информация об услугах типа forwarding / hold / retrieve / callTransfer / conference будут видны в записях только в случае активизации и обработки данной услуги на SSW. В случае выполнения услуги непосредственно на smart TA данные функции не будут отражены в записи звонка.
09:40:23.053327 Received 145 bytes: A0 81 8E 80 09 33 36 34 39 33 38 34 31 38 81 01 01 A2 38 A0 10 80 01 01 81 0B 37 39 31 33 31 32 34 32 30 30 37 81 15 73 69 70 3A 34 32 30 30 37 40 74 65 73 74 5F 64 6F 6D 61 69 6E A2 06 80 04 0A 00 14 86 83 05 34 32 30 30 37 A3 23 A0 0A 80 01 01 81 05 34 32 30 30 39 81 15 73 69 70 3A 34 32 30 30 39 40 74 65 73 74 5F 64 6F 6D 61 69 6E 84 13 45 43 53 53 2D 54 45 53 54 2D 33 2E 31 34 2E 31 35 2E 34 A5 0A 80 01 01 81 05 34 32 30 30 39 Basic message params: body: . . . . . . . receive full number BASIC params: callUID: .. . . . . 364938418 intcpParty: . . . . partyB callingPn: |-dn: | |-nrType: . . . . unknown | |-nrValue: .. . . 79131242007 |-Login: .. . . . . 42007 |-IP: . . . . . . . 10.0.20.134 |-SIP URI: .. . . . sip:42007@test_domain |-OPC: .. . . . . . 0 |-DPC: .. . . . . . 0 calledPn: |-dn: | |-nrType: . . . . unknown | |-nrValue: .. . . 42009 |-Login: .. . . . . no |-IP: . . . . . . . no |-SIP URI: .. . . . sip:42009@test_domain |-OPC: .. . . . . . 0 |-DPC: .. . . . . . 0 OPTIONAL params: incTrunkGrpId:. . . -1 outTrunkGrpId:. . . -1 snId: . . . . . . . ECSS-TEST-3.14.15.4 09:40:25.802953 Received 109 bytes: A3 6B 80 09 33 36 34 39 33 38 34 31 38 A1 20 80 05 61 75 64 69 6F 81 07 52 54 50 2F 41 56 50 82 01 08 83 04 50 43 4D 41 84 02 1F 40 85 01 14 A2 0C A0 06 80 04 0A 00 14 23 81 02 2F 1C A3 20 80 05 61 75 64 69 6F 81 07 52 54 50 2F 41 56 50 82 01 08 83 04 50 43 4D 41 84 02 1F 40 85 01 14 A4 0C A0 06 80 04 0A 00 14 23 81 02 2F 1D Basic message params: body: . . . . . . . voice connected BASIC params: callUID: .. . . . . 364938418 cgSDP: |-media: .. . . . . audio |-proto: .. . . . . RTP/AVP |-ptype: .. . . . . 8 |-codec: .. . . . . PCMA |-rate: . . . . . . 8000 |-ptime: .. . . . . 20 rtpDstA: .. . . . . 10.0.20.35:12060 OPTIONAL params: cdSDP: |-media: .. . . . . audio |-proto: .. . . . . RTP/AVP |-ptype: .. . . . . 8 |-codec: .. . . . . PCMA |-rate: . . . . . . 8000 |-ptime: .. . . . . 20 rtpDstB: .. . . . . 10.0.20.35:12061 09:40:25.810526 Received 058 bytes: A1 38 80 09 33 36 34 39 33 38 34 31 38 A1 2B A0 0A 80 01 01 81 05 34 32 30 30 39 81 15 73 69 70 3A 34 32 30 30 39 40 74 65 73 74 5F 64 6F 6D 61 69 6E A2 06 80 04 0A 00 14 8A Basic message params: body: . . . . . . . answer BASIC params: callUID: .. . . . . 364938418 connectedPn: |-dn: | |-nrType: . . . . unknown | |-nrValue: .. . . 42009 |-Login: .. . . . . no |-IP: . . . . . . . 10.0.20.138 |-SIP URI: .. . . . sip:42009@test_domain |-OPC: .. . . . . . 0 |-DPC: .. . . . . . 0 09:40:26.621873 Received 028 bytes: A2 1A 80 09 33 36 34 39 33 38 34 31 38 A1 0A 80 05 51 2E 38 35 30 81 01 10 82 01 01 Basic message params: body: . . . . . . . release BASIC params: callUID: .. . . . . 364938418 relParty: . . . . . partyB OPTIONAL params: ReleaseCause: |-Proto: .. . . . . Q.850 |-Cause: .. . . . . 16
10:05:29.952050 Received 159 bytes: A0 81 9C 80 0A 32 33 38 37 34 31 35 37 38 32 81 01 01 A2 3A A0 10 80 01 01 81 0B 37 39 31 33 31 32 34 32 30 30 31 81 15 73 69 70 3A 34 32 30 30 31 40 74 65 73 74 5F 64 6F 6D 61 69 6E A2 06 80 04 0A 00 14 8B 83 07 53 69 65 6D 65 6E 73 A3 2E A0 0A 80 01 01 81 05 34 32 30 30 39 81 20 73 69 70 3A 34 32 30 30 39 40 74 65 73 74 5F 64 6F 6D 61 69 6E 3B 75 73 65 72 3D 70 68 6F 6E 65 84 13 45 43 53 53 2D 54 45 53 54 2D 33 2E 31 34 2E 31 35 2E 34 A5 0A 80 01 01 81 05 34 32 30 30 39 Basic message params: body: . . . . . . . receive full number BASIC params: callUID: .. . . . . 2387415782 intcpParty: . . . . partyB callingPn: |-dn: | |-nrType: . . . . unknown | |-nrValue: .. . . 79131242001 |-Login: .. . . . . Siemens |-IP: . . . . . . . 10.0.20.139 |-SIP URI: .. . . . sip:42001@test_domain |-OPC: .. . . . . . 0 |-DPC: .. . . . . . 0 calledPn: |-dn: | |-nrType: . . . . unknown | |-nrValue: .. . . 42009 |-Login: .. . . . . no |-IP: . . . . . . . no |-SIP URI: .. . . . sip:42009@test_domain;user=phone |-OPC: .. . . . . . 0 |-DPC: .. . . . . . 0 OPTIONAL params: incTrunkGrpId:. . . -1 outTrunkGrpId:. . . -1 snId: . . . . . . . ECSS-TEST-3.14.15.4 10:05:32.388041 Received 110 bytes: A3 6C 80 0A 32 33 38 37 34 31 35 37 38 32 A1 20 80 05 61 75 64 69 6F 81 07 52 54 50 2F 41 56 50 82 01 08 83 04 50 43 4D 41 84 02 1F 40 85 01 14 A2 0C A0 06 80 04 0A 00 14 23 81 02 2F 1E A3 20 80 05 61 75 64 69 6F 81 07 52 54 50 2F 41 56 50 82 01 08 83 04 50 43 4D 41 84 02 1F 40 85 01 14 A4 0C A0 06 80 04 0A 00 14 23 81 02 2F 1F Basic message params: body: . . . . . . . voice connected BASIC params: callUID: .. . . . . 2387415782 cgSDP: |-media: .. . . . . audio |-proto: .. . . . . RTP/AVP |-ptype: .. . . . . 8 |-codec: .. . . . . PCMA |-rate: . . . . . . 8000 |-ptime: .. . . . . 20 rtpDstA: .. . . . . 10.0.20.35:12062 OPTIONAL params: cdSDP: |-media: .. . . . . audio |-proto: .. . . . . RTP/AVP |-ptype: .. . . . . 8 |-codec: .. . . . . PCMA |-rate: . . . . . . 8000 |-ptime: .. . . . . 20 rtpDstB: .. . . . . 10.0.20.35:12063 10:05:32.393096 Received 070 bytes: A1 44 80 0A 32 33 38 37 34 31 35 37 38 32 A1 36 A0 0A 80 01 01 81 05 34 32 30 30 39 81 20 73 69 70 3A 34 32 30 30 39 40 74 65 73 74 5F 64 6F 6D 61 69 6E 3B 75 73 65 72 3D 70 68 6F 6E 65 A2 06 80 04 0A 00 14 8A Basic message params: body: . . . . . . . answer BASIC params: callUID: .. . . . . 2387415782 connectedPn: |-dn: | |-nrType: . . . . unknown | |-nrValue: .. . . 42009 |-Login: .. . . . . no |-IP: . . . . . . . 10.0.20.138 |-SIP URI: .. . . . sip:42009@test_domain;user=phone |-OPC: .. . . . . . 0 |-DPC: .. . . . . . 0 10:05:34.805174 Received 017 bytes: A5 0F 80 0A 32 33 38 37 34 31 35 37 38 32 81 01 01 Basic message params: body: . . . . . . . hold BASIC params: callUID: .. . . . . 2387415782 invokeParty:. . . . partyB 10:05:38.992552 Received 017 bytes: A6 0F 80 0A 32 33 38 37 34 31 35 37 38 32 81 01 01 Basic message params: body: . . . . . . . retrieve BASIC params: callUID: .. . . . . 2387415782 invokeParty:. . . . partyB 10:05:40.743777 Received 029 bytes: A2 1B 80 0A 32 33 38 37 34 31 35 37 38 32 A1 0A 80 05 51 2E 38 35 30 81 01 10 82 01 01 Basic message params: body: . . . . . . . release BASIC params: callUID: .. . . . . 2387415782 relParty: . . . . . partyB OPTIONAL params: ReleaseCause: |-Proto: .. . . . . Q.850 |-Cause: .. . . . . 16
События ASN описаны в приложении Описание ASN1 СОРМ3.