Для организации СОРМ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>
CODE

где: 

<PROFILE_NAME> – имя профайла;
<PROPERTY> – параметр СОРМ3;
<VALUE> – значение СОРМ3.
Список параметров:

ПараметрЗначениеОписание
ip-portip IP-адрес СОРМ-приёмника (localhost недопустим, указывать только полный адрес)(удалённая сторона)
ip-portportПорт на который будут поступать сигнальные сообщения на СОРМ-приёмник (удалённая сторона)
port-rangerange_startДиапазон выделения портов для СОРМ-приёмника, RTP трафик / Начало диапазона
port-rangerange_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
CODE

результат выполнения команды:

/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
CODE

результат выполнения команды:

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.

Список параметров:

ПараметрЗначениеОписание
enabledtrueФлаг активации взаимодействия с СОРМ3-посредником
extractor_ip10.0.20.71IP-адрес СОРМ-экстрактора (localhost недопустим, указывать только полный адрес)
extractor_nodesorm1@ecss1Название узла СОРМ3 посредника
adaptationимя адаптацииимя адаптации созданной для услуги СОРМ
entrypoint_profilepимя профайлаимя профайла, созданного предыдущей командой
/domain/test_domain/sorm3/info
CODE
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
CODE
/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
CODE

Подключаем ранее созданную адаптацию командой:

выполняется в CoCon

/domain/test_domain/sorm3/set adaptation sorm
CODE

в отличии от 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
CODE
/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.