Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

...

Настройка ESBC для SIP-абонентов

Схема применения:

Image Modified

Описание:

Абонентский шлюз/SIP-абоненты отправляют сообщение на IP-адрес 192.168.20.120 порт 5062, ESBC пересылает данный трафик с IP-адреса 192.168.16.113 порт 5061 на адрес Softswitch 192.168.16.65 порт 5060.

...

В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка ESBC.

Настройка ESBC для SIP-транков

Схема применения:

Image Modified

Описание:

Транковый шлюз отправляет сообщения с IP-адреса 192.168.20.99 порта 5060 на IP-адрес 192.168.20.120 порт 5067, ESBC пересылает данный трафик с IP-адреса 192.168.16.113 порта 5065 на адрес Softswitch 192.168.16.65 порт 5060. И в обратную сторону SSW отправляет сообщения с IP-адреса 192.168.16.65 порта 5060 на IP-адрес 192.168.16.113 порт 5065, ESBC пересылает данный трафик с IP-адреса 192.168.20.120 порта 5067 на адрес транкового шлюза 192.168.20.99 порт 5060.

...

Блок кода
vesr# configure
vesr(config)# interface gigabitethernet 1/0/1
vesr(config-if-gi)# description "SSW"
vesr(config-if-gi)# ip address 192.168.16.113/24

Scroll Pagebreak
3. Настроить IP-адрес на интерфейсе в сторону транкового шлюза:

...

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# media-resource MEDIA_TRUNK_GATEWAY
vesr(config-esbc-media-resource)# ip-address 192.168.20.120

Scroll Pagebreak
8. Создать SIP-trunk в сторону SSW:

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# trunk sip TRUNK_SSW
vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_SSW
vesr(config-esbc-trunk-sip)# remote addr 192.168.16.65
vesr(config-esbc-trunk-sip)# remote port 5060
vesr(config-esbc-trunk-sip)# media resource 0 MEDIA_SSW

Scroll Pagebreak
9. Создать SIP-trunk в сторону транкового шлюза:

...

Блок кода
vesr# 
vesr# configure 
vesr(config)# esbc 
vesr(config-esbc)# trunk sip TRUNK_SSW
vesr(config-esbc-trunk-sip)# route-table TO_TRUNK_GATEWAY
vesr(config-esbc-trunk-sip)# exit
vesr(config-esbc)# trunk sip TRUNK_GATEWAY
vesr(config-esbc-trunk-sip)# route-table TO_SSW

Scroll Pagebreak
13. Применить конфигурацию и подтвердить изменения: 

Блок кода
vesr# commit
vesr# confirm

...

В приведенной схеме описаны базовые настройки, описание всех команд приведено в разделе Настройка ESBC.

Scroll Pagebreak
Создание/конфигурирование медиаресурсов (media resources)

...

Предупреждение

При использовании одинакового IP-адреса для разных медиаресурсов не допускается пересечение диапазонов портов между этими ресурсами. 

Scroll Pagebreak
Создание/конфигурирование SIP-транспорта (sip-transport) 

SIP-транспорт представляет точку входа/выхода сигнализации, т. е. это IP-адрес и порт, с которого ESBC будет отправлять и на который будет принимать сигнальные сообщения.

...

Блок кода
vesr# 
vesr# configure 
vesr(config)# esbc 

Scroll Pagebreak
Создать и настроить соответствующим образом SIP-транспорт:

...

  • tcp-only — использовать только TCP-протокол;
  • tcp-prefer — прием по UDP и TCP. Отправка по TCP. В случае, если не удалось установить соединение по TCP, отправка производится по UDP;
  • tls — использовать tls;
  • udp-only — использовать только UDP-протокол;
  • udp-prefer — прием по UDP и TCP. Отправка пакетов более 1300 байт по TCP, менее 1300 байт — по UDP.

Scroll Pagebreak
Создание/конфигурирование транковых групп (trunk-group) 

Транк-группа представляет собой набор транков различного типа (в текущей версии поддерживается только SIP-транк) и алгоритм балансировки нагрузки между ними.

...

Все перечисленные в предыдущем пункте настройки являются общими для всех транков, включенных в состав транковой группы. Это значит, что при отсутствии у транка, входящего в состав транковой группы, какой-либо из перечисленных настроек, будет использоваться настройка из транковой группы. Такой подход позволяет создавать множество транков с минимальным набором настроек, и, объединяя их в транковую группу, производить донастройку через нее. При необходимости изменить какие-либо параметры отдельно взятых транков из группы можно провести индивидуальную настройку, используя настройки на транках.scroll-pagebreak

Пример работы общих настроек:

...

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# sip-transport TRANSPORT_SSW
vesr(config-esbc-sip-transport)# ip-address 192.168.16.113
vesr(config-esbc-sip-transport)# port 5065

Scroll Pagebreak
2. Создать SIP-транспорт в сторону TRUNK_IN: 

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# sip-transport TRANSPORT_TRUNK_IN
vesr(config-esbc-sip-transport)# ip-address 192.168.20.120
vesr(config-esbc-sip-transport)# port 5067

...

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# media-resource MEDIA_TG_SSW
vesr(config-esbc-media-resource)# ip-address 192.168.16.113

Scroll Pagebreak
5. Создать SIP-trunk в сторону TRUNK_IN:

...

Блок кода
vesr#
vesr# configure
vesr(config)# esbc
vesr(config-esbc)# trunk sip TRUNK_SSW1
vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_SSW
vesr(config-esbc-trunk-sip)# remote addr 192.168.16.115
vesr(config-esbc-trunk-sip)# remote port 5060
vesr(config-esbc-trunk-sip)# exit
vesr(config-esbc)# trunk sip TRUNK_SSW2
vesr(config-esbc-trunk-sip)# sip-transport TRANSPORT_SSW
vesr(config-esbc-trunk-sip)# remote addr 192.168.16.116
vesr(config-esbc-trunk-sip)# remote port 5060

Scroll Pagebreak
7. Создать транковую группу TG_SSW и добавить туда транки TRUNK_SSW1 и TRUNK_SSW2:

...

Блок кода
vesr# 
vesr# configure 
vesr(config)# esbc 
vesr(config-esbc)# route-table TO_TG_SSW
vesr(config-esbc-route-table)# rule 0
vesr(config-esbc-route-table-rule)# action direct-to-trunk-group TG_SSW

...

9. Создать таблицу маршрутизации и добавить туда правила, по которым вызовы, приходящие с TG_SSW, будут маршрутизироваться в транк TRUNK_IN:

...

Блок кода
vesr# commit
vesr# confirm

Scroll Pagebreak
На шаге 7 при создании транков, в конфигурацию транков не были добавлены медиаресурсы и таблица маршрутизации. Но эти настройки есть в транковой группе TG_SSW, куда включены оба транка. Поэтому при поступлении вызовов с этих транков они будут маршрутизироваться по таблице маршрутизации, которая привязана к TG_SSW, медиаресурсы для согласования и передачи RTP также будут браться из транковой группы TG_SSW.

В случае если необходимо, чтобы один из транков, входящих в состав транковой группы, при поступлении на него входящих вызовов маршрутизировался по другой таблице маршрутизации или использовал другие медиаресурсы, нужно добавить соответствующие настройки в данный транк. Настройки транковой группы при этом не меняются, т. к. настройки транка в приоритете.   

Логика работы транковой группы для распределения вызовов на транки, входящие в ее состав

...

Каждый последующий исходящий вызов, маршрутизируемый через транковую группу, используют следующий транк в группе независимо от результата маршрутизации предыдущего вызова в данную транковую группу. В случае недоступности транка или при совпадении ответа с маской из списка причин отбоя, вызов будет направлен через следующий транк в группе.

Пример:

Image Modified

На ESBC настроена транковая группа TRUNK_GROUP, в состав которой входят 3 транка (TRUNK_1, TRUNK_2 и TRUNK_3). Приходит вызов и по правилу маршрутизации уходит на эту транковую группу. В результате ESBC совершает попытку вызова в первый транк в составе транковой группы (TRUNK_1), если вызов неуспешный (транк недоступен или ответ совпал с маской из списка причин отбоя), то происходит попытка позвонить во второй транк (TRUNK_2). Если попытка вызова также неуспешна, то будет попытка позвонить в последний транк (TRUNK_3). Если попытка также неуспешна, то вызов на первом плече отбивается. Если на каком-то из транков пришел ответ 200ОК, то вызов устанавливается. 

...

Управление кодеками (codec)

Обработка медиа потоков медиапотоков осуществляется в двух режимах: проксирование и транскодирование. По умолчанию E-SBC ESBC работает в режиме проксирования. 

При создании медиа-профиля, медиапрофиля список кодеков, доступных для проксирования, добавляется автоматически.

...

Для очистки списка используется команда - no codec allow all. При использовании данной команды будут удалены кодеки, добавленные автоматически при создании профиля, и кодеки, добавленные пользователем.

Список кодеков, разрешенных для проксирования, можно изменять и , а также добавлять в него любые кодеки, командой. Для этого используется команда:

Блок кода
languagec#
codec allow <full or partial codec name> [payload type]

...

<full or partial codec name> - часть или полное название кодека (в соответствии с SDP rtpmap);

[payload type] - номер payload type. Параметр опциональный.

Допускается указания указание части названия кодека, например: codec allow G72, в таком случае будет разрешено проксирование кодеков G726-16, G726-24, G726-32, G726-40.

Предупреждение

Для кодеков со статическим payload type рекомендуется указывать номер payload type, иначе, если в SDP не будет указан атрибут rtpmap, вызов будет отбиваться кодом 488.

Scroll Pagebreak
Транскодирование

Поддержка кодеков для транскодирования осуществляется командами: -

  • codec audio

...

  • codec video

...

  • codec image (в текущей версии ПО не

...

  • поддерживается, данная команда аналогична команде codec allow T38 t38)

Порядок обработки SDP для выбора режима работы:

1. Offer SDP фильтруется согласно разрешённым кодекам на плече A.
2. Offer SDP фильтруется согласно разрешённым кодекам на плече B.
3. В конец Offer SDP добавляются недостающие кодеки, транскодинг которых включен в media-profile на плече B.
4. Answer SDP фильтруется согласно разрешённым кодекам на плече B.
5. В конец Answer SDP добавляются недостающие кодеки, транскодинг которых включен в media-profile на плече A.

В результате , транскодирование включается, если , самые приоритетные кодеки из Offer и Answer SDP не совпадают.
Иначе , при совпадении приоритетных кодеков , будет использоваться проксирование.

Пример.:

На плече A разрешён только кодек PCMA:

Блок кода
languagec#
media-profile MP_A
codec audio PCMA
exit

на плече B - PCMU:

Блок кода
languagec#
media-profile MP_B
codec audio PCMU
exit

В данном случае , на плечах А и B будут согласованы кодеки PCMA и PCMU соответственно, и будет включено транскодирование.

...

то выбор режима работы (проксирование/транскодирование) будет осуществляться в зависимости от кодека указаного , указанного в Answer SDP плеча B.

Если в ответе первым кодеком будет представлен указан PCMA, то будет выбран режим проксирования, если PCMU - — режим транскодирования.

 

Scroll Pagebreak

...

SRTP (Secure Real-time Transport Protocol) это расширенная версия протокола RTP с набором защитных механизмов. Протокол был опубликован организацией IETF в стандарте RFC 3711. SRTP обеспечивает конфиденциальность за счет шифрования RTP-нагрузки. Для шифрования медиа потока, медиапотока SRTP стандартизирует использование только единственного шифра , AES, который может использоваться в двух режимах:

...

И и 3 режима использования SRTP:

  • disable SRTP запрещён;
  • optional SRTP не обязателен, но ключи будут подставлены в offer SDP второго плеча , без изменения профиля транспорта в медиа секции медиасекции SDP;
  • mandatory SRTP обязателен, профиль транспорта в медиа секции медиасекции SDP будет изменён на соответствующий профиль SRTP.

...

Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 

#Создание медиапрофиля NEW_MEDIA_PROFILE:
vesr(config-esbc)# media-profile NEW_MEDIA_PROFILE 
vesr(config-esbc-media-profile)# 

#Настройка SRTP (включили обязательный режим использования, метод обмена ключами  SDES):
vesr(config-esbc-media-profile)# srtp keying 
  dtls-srtp  Enable DTLS-SRTP keying method
  sdes       Enable SDES keying method

vesr(config-esbc-media-profile)# srtp keying sdes 
vesr(config-esbc-media-profile)# srtp mode 
  disable    SRTP is disabled
  mandatory  SRTP is mandatory
  optional   SRTP is optional

vesr(config-esbc-media-profile)# srtp mode mandatory 
vesr(config-esbc-media-profile)# 

 
vesr(config-esbc-media-profile)# exit
vesr(config-esbc)#

#Привязать медиапрофиль к транку TRUNK_OUT:
vesr(config-esbc)# trunk sip TRUNK_OUT
vesr(config-esbc-trunk-sip)# media profile NEW_MEDIA_PROFILE 
vesr(config-esbc-trunk-sip)# 

#Применить и подтвердить изменения:
vesr(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesr(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

...

В таблице маршрутизации два правила, первое направляет вызов в TRUNK_GROUP, второе направляет вызов в TRUNK_3.

...

Включение режима nat comedia-mode осуществляется в настройках транка:

Блок кода
languagec#
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# trunk sip 
vesbc(config-esbc-trunk-sip)# nat comedia-mode 
    Select NAT comedia mode for trunk:
        off
        on
        flexible

vesbc(config-esbc-trunk-sip)# nat comedia-mode on

Возможна работа в двух режимах:

  • flexible

...

  • проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток продолжает транслироваться;
  • on

...

  • проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток перестает транслироваться

...

  • .

Настройка и принцип работы nat comedia-mode для абонентов (user-interface)

Включение режима nat comedia-mode осуществляется в настройках user-interface:

Блок кода
languagec#
vesbc# 
vesbc# configure 
vesbc(config)# esbc 
vesbc(config-esbc)# user-interface sip USERS
vesbc(config-esbc-user-interface-sip)# nat comedia-mode 
    Select NAT comedia mode for user-interface:
        off
        on
        flexible
vesbc(config-esbc-user-interface-sip)# nat comedia-mode on

Возможна работа в двух режимах:

  • flexible

...

  • проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток продолжает транслироваться;
  • on

...

  • проверяет источник во входящем RTP-потоке и транслирует исходящий поток на IP-адрес и UDP-порт, с которого принимается медиапоток, в случае прерывания входящего RTP-потока более чем на 1 секунду, исходящий поток перестает транслироваться

...

  • .

Также данная настройка позволяет передавать сообщения протокола SIP симметрично (на порт, с которого был принят запрос) в случае, если клиент в инициирующем запросе не использовал параметр RPORT;.

Команда nat keep-alive-interval ипользуется используется для поддержки соединения за NAT для сигнального трафика . (Не поддержана в текущей версии ПО не поддерживается)

Подмена атрибутов direction в SDP

При включении опции nat comedia-mode, mode все атрибуты direction в SDP , при отпавке отправке offer sdp заменяются на sendrecv.
При отправке sdp answer в сторону транка/user-interface с включенной опцией , все атрибуты direction заменяются на максимально возможные, вне зависимости от того, какие атрибуты были в полученном answer на другом плече (в ответ на sendrecv - sendrecv, в ответ на sendonly - recvonly, в ответ на recvonly - sendonly).

Примеры:

1. Замена атрибутов direction в offer sdp

ЭТУ ТАБЛИЦУ НАДО СДЕЛАТЬ КРАСИВОЙ СХЕМОЙ

Блок кода
UAC ---------------trunk-------------------E-SBC-------trunk/user interface with nat comedia-mode---------UAS

--> INVITE (sendonly)                                                                             --> INVITE (sendrecv)
<-- 200OK (recvonly)                                                                              <-- 200OK(sendrecv)

--> INVITE (sendonly)                                                                              --> INVITE (sendrecv)
<-- 200OK (recvonly)                                                                               <-- 200OK(recvonly)

--> INVITE (recvonly)                                                                               --> INVITE (sendrecv)
<-- 200OK (sendonly)                                                                                <-- 200OK(sendrecv)

2. Замена атрибутов direction в answer sdp

ЭТУ ТАБЛИЦУ НАДО СДЕЛАТЬ КРАСИВОЙ СХЕМОЙ

Блок кода
UAC ------------trunk/user interface with nat comedia-mode-------------E-SBC---------------------trunk--------------------UAS


--> INVITE (sendrecv)                                                                                            --> INVITE (sendrecv)
<-- 200OK (sendrecv)                                                                                              <-- 200OK(sendonly)

--> INVITE (sendrecv)                                                                                             --> INVITE (sendrecv)
<-- 200OK (sendrecv)                                                                                               <-- 200OK(recvonly)

--> INVITE (sendrecv)                                                                                              --> INVITE (sendrecv)
<-- 200OK (sendrecv)                                                                                               <-- 200OK(sendrecv)

Создание/конфигурирование модификаторов (mod-table)

:

Image Added

2. Замена атрибутов direction в answer sdp:

Image Added

Создание/конфигурирование модификаторов (mod-table)

ESBC поддерживает два типа модификаторов — ESBC поддерживает два типа модификаторов - common и sip.

Модификаторы common позволяют модифицировать CdPN и CgPN без привязки к протоколу сигнализации. В текущей версии ПО поддерживается только протокол SIP. Учитывая это, при использовании модификаторов в транках и user-interface sip, модификаторами common можно изменять user part SIP URI заголовков To и From. 

Модификаторы sip позволяют  позволяют модифицировать любые заголовки сообщений SIP.

Таблицы модификаций применяются в транках, транковых группах и user-interface. Их можно подключить, как out — тогда правила будут применяться при отправке сообщения . Илиили, и как in — тогда правила применяются при получении сообщения. Таблица модификаций, используемая для транковой - группы, будет использоваться только в том случае, если в транке, входящем в эту транковую -группу  группу, не настроена своя таблица.

...

Допускается использование следующей конструкции при составлении регулярных выражений PCRE для помещения значений в локальные переменные (от 0 до 9) с помощью цифр, экранированных обратной чертой ('\1-9'). '\0' - весь текст:

Блок кода
languagec#
value-pattern '(some)-(value)'
# значения some и value заносятся в локальные переменные pcre 1 и 2 соответственно
replacement '\2-\1'
# значения переменных меняются местами

...

Данные переменные используются в рамках одной модификации. Для использования переменных в разных модификациях одной таблицы модификаций используется модификатор типа copy.

Примечание

При применении на транке/user-interface модификаторов обоих типов одновременно, используется следующий порядок их обработки , в зависимости от направления модификации:

  • IN - сначала применяется модификатор sip, затем модификатор common;
  • OUT - сначала применяется модификатор common, затем sip— sip.

Scroll Pagebreak
mod-table common

Пример использования модификатора common.

На ESBC настроена следующая конфигурация:

Блок кода
languagec#
  route-table TO_UAS
    rule 0
      action direct-to-trunk UAS
    exit
  exit
  mod-table common COMMON_MOD
    mod 5 cgpn
      value-pattern '2(.+)'
      # осуществляется выбор номеров, начинающихся с 2. Остальная чатьчасть номера сохраняется в локальную переменную 1
      replacement '8\1'
      # выполняется замена 2 на 8, и добавляется значение из переменной 1.
    exit
    mod 10 cdpn
      value-pattern '23002'
      # осуществляется выбор номера 23002
      replacement '22222'
      # выполняется замена номера 23002 на 22222
    exit
  exit
  trunk sip UAC
    remote addr 192.168.80.26
    remote port 5070
    sip-transport UAC
    route-table TO_UAS
    mod-table common in COMMON_MOD
    media resource 0 MEDIA
  exit
  trunk sip UAS
    remote addr 192.168.80.26
    remote port 5080
    sip-transport UAS
    media resource 0 MEDIA
  exit
exit

Схема вызова:

ЭТО НАДО СДЕЛАТЬ В ВИДЕ КРАСИВОЙ СХЕМЫ

Image Added

Scroll Pagebreak
UAC-------->E-SBC--------->UAS

На транк UAC приходит INVITE:

...

В результате применения модификатора COMMON_MOD в транке UAC, из транка UAS будет отправлен INVITE:

...

В результате модификации mod 5 cgpn , выполнена модификация CgPN 24001 на 84001, в результате mod 10 cdpn - модификация CdPN 23002 на 22222.

Примечание

При использовании модификатора CgPN помимо заголовка From изменяется user part SIP URI заголовка Contact. При использовании модификатора CdPN помимо заголовка To  To изменяется user part SIP в Request-URI.


Примечание

Модификаторы common, настроенные в качестве IN, могут влиять на результат маршрутизации , при использовании в route-table условий (condition), т. к. правила  правила route-table обрабатываются после применения модификации. Модификаторы. настроенные в качестве OUT, не влияют на результат маршрутизации.


Предупреждение

Для сообщений REGISTER модификаторы common модификаторы не применяются.

Scroll Pagebreak
mod-table sip

Данный тип модификации позволяет изменять любые заголовки сообщений SIP. 

Примечание

Процесс модификации заголовков отличается в зависимости от режима использования модификатора IN или OUT.

Существуют ограничения на модификацию основных заголовков sip, к которым относятся: Call-ID, From, To, Via, CSeq, Contact, Max-Forwards, Route, Record-Route, Content-Type, Content-Lenght, Require, Supported.

После применения к сообщению модификатора IN и использования модификаций основных заголовков, дальнейшая обработка диалога sip будет осуществляться в соответствии с модифицированным сообщением, т. к. в ядро системы попадает модифицированное сообщение. В результате , в ответных сообщениях будут использоваться данные, которые могут отличаться от исходного сообщения. Модификация IN также влияет на дальнейшую маршрутизацию сообщения.

Применение к сообщению модификатора OUT и  и использования модификаций основных заголовков, изменяет только значения заголовков непосредственно перед отправкой, но не влияет на полследующие последующие сообщения в диалоге, т. к. исходное сообщение формируется ядром системы до применения модификаторов OUT.

Предупреждение

Применение модификаторов к основным заголовкам SIP может привести к нарушению обработки сообщений.

Scroll Pagebreak
Логика обработки сообщения SIP при использовании IN-модификации.Image Removed:

Image Added

Image Added

Scroll Pagebreak

Логика обработки сообщения SIP при использовании OUT-модификации.:

Image Added

Image RemovedImage Added

Поддерживаемые модификации

...

  • add — добавление заголовка.
  • no-transit — удаление заголовка. Данная модификация применяется только при использовании в качестве out (таблицы in всегда вырезают все заголовки, полученные в сообщении из сети).
  • replace — замена заголовка.

  • transit — передача заголовка.   Данная модификацияприменяется модификация применяется только при использовании в качестве in (таблицы out всегда передают все заголовки, полученные с другого плеча).

  • copy - позволяет скопировать значение или часть значения заголовка в переменную для использования этого значения в модификаторах add или transit в рамках одной таблицы модификаций (на одном плече вызова).

Работа с переменными модификатора copy

Значения переменных, полученных в модификаторе copy, можно использовать в модификаторах replace (поле replacement) и add (поле header value) в рамках одной таблицы модификации и только для текущего сообщения.

Например, при использовании модификатора copy в таблице на IN, для каждого входящего сообщения будет использоваться отдельный экземпляр таблицы, соответственно, в каждом случае значение переменных будет разным.

Подстроки \u01 – \u99 будут заменены на значение соответствующей переменной. Если переменная не задана — подстрока будет удалена. Длина переменной — до 128 символов.

Порядок применения модификаций в таблице

...

В результате если какой-либо заголовок был добавлен модификацией add, а затем этот же заголовок был указан в правиле no-transit, то в исходящем сообщении этот заголовок не будет передан.

Пример:

Таблица модификации SIP_MOD ипользуется используется в качестве OUT:

Блок кода
languagec#
mod-table sip SIP_MOD
  mod 1 add
    sip method pattern '.+'
    sip response-pattern '.+'
    header name Test_header
    header value Test_value
  exit
  mod 2 no-transit
    sip header-pattern 'Test_header'
    sip method pattern '.+'
    sip response-pattern '.+'
    value-pattern 'Test_value'
  exit

...

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, был добавлен заголовок Test_header со значением example string.

Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesr(config-esbc)# mod-table sip MODTABLE_IN
vesr(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила на добавление заголовка:
vesr(esbc-mod-table)# mod 0 add
vesr(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет добавлен заголовок (в данном случае INVITE):
vesr(esbc-mod-table-modification)# sip method type Invite 

#Указать название заголовка, который необходимо вставить (в данном случае Test_header):
vesr(esbc-mod-table-modification)# header name Test_header

#Указать содержимое заголовка, которое необходимо вставить (в данном случае example string):
vesr(esbc-mod-table-modification)# header value "example string"

vesr(esbc-mod-table-modification)# exit
vesr(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesr(config-esbc)# trunk sip TRUNK_IN 
vesr(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN 

#Применить и подтвердить изменения:
vesr(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesr(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

...

Блок кода
INVITE sip:24000@192.168.114.130:5461 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.129:5461;branch=z9hG4bK-372660-1-5
From: "Simple UAC send bye" <sip:24001@192.168.114.130;cpc=priority>;tag=1372660
To: "24000" <sip:24000@192.168.114.130>
Call-ID: 1-372660@192.168.114.129
CSeq: 1 INVITE
Contact: <sip:24001@192.168.114.129:5461>
Max-Forwards: 70
Content-Type: application/sdp
Content-Length: 149

v=0
o=tester 123456 654321 IN IP4 192.168.114.129
s=A conversation
c=IN IP4 192.168.114.129
t=0 0
m=audio 8338 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak
На TRUNK_OUT отправляется уже модифицированный INVITE с добавленным заголовком: 

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj-fvzSQlwN2zoMaGUR5JCLMkjmkBV3Vz1
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=l2jkRSMeumV03IdhjPntOt7l0XBKy-Ln
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: P-W.2oee.2vJw0JoaFbNkRDvnxY40FoP
CSeq: 30738 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Добавленный через таблицу модификаторов заголовок:
Test_header: example string 
Content-Type: application/sdp
Content-Length: 157

v=0
o=tester 3927594021 3927594021 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8062 RTP/AVP 8
a=rtpmap:8 PCMA/8000

...

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Test_header. Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Test_header, если в его содержимом есть "example string".

...

Блок кода
languagec#
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPjz8Y5BfoTrBQlqecLCu34TIyYn-6rX5dH
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=qTwcY3ZHvA6SHvuRsoo7w40r9yXzjEEp
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: yHvNLSIvp0DQYSRFPRpfgVUv9U0uKEHT
CSeq: 10147 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 3927597375 3927597375 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8070 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Scroll Pagebreak
В случае , если в заголовке Test_header будет содержимое, отличное от "example string", заголовок будет отправлен в TRUNK_OUT.:

Блок кода
INVITE sip:24000@192.168.114.129:5460 SIP/2.0
Via: SIP/2.0/UDP 192.168.114.130:5460;rport;branch=z9hG4bKPj8e1WEAvAy16Bk8Vrj-VZiFK-bNOjnjY9
Max-Forwards: 70
From: "Simple UAC send bye" <sip:24001@192.168.114.130>;tag=R83mrTm4KQsFL1Bk87hTOB8e182yCSJ.
To: "24000" <sip:24000@192.168.114.129>
Contact: <sip:24001@192.168.114.130:5460;transport=udp>
Call-ID: eQueXFpyDZESB.hXK.uCGn7XL7TBUdmQ
CSeq: 8831 INVITE
Allow: PRACK, SUBSCRIBE, NOTIFY, REFER, INVITE, ACK, BYE, CANCEL, UPDATE
Supported: timer, 100rel, replaces
Session-Expires: 1800
Min-SE: 90
#Заголовок Test_header с содержимым, отличным от "example string", не удаляется:
Test_header: new string
Content-Type: application/sdp
Content-Length:   157

v=0
o=tester 3927597832 3927597832 IN IP4 192.168.114.130
s=A conversation
c=IN IP4 192.168.114.130
t=0 0
m=audio 8074 RTP/AVP 8
a=rtpmap:8 PCMA/8000

Пример использования модификатора транзита и замены заголовка (replace)

Схема:

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. Из TRUNK_IN приходит INVITE с заголовком Test_header: 123. Требуется, чтобы в TRUNK_OUT отправился INVITE с заголовком Test_header: 123456.

...

Scroll Pagebreak

Пример использования локальных переменных pcre в  в модификации replace (схема та же):

Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 

#Создание таблицы модификаторов MODTABLE_IN:
vesr(config-esbc)# mod-table sip MODTABLE_IN
vesr(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила на замену заголовка:
vesr(esbc-mod-table)# mod 1 replace

#Выбор запроса, в котором будут заменяться заголовки:
vesr(esbc-mod-table-modification)# sip method-type Invite

#Указать название заголовка, содержимое которого необходимо заменить:
vesr(esbc-mod-table-modification)# sip header-pattern Date

#Указать место в содержимом заголовка, которое необходимо заменить (шаблон - дата в формате "год-месяц-число"):
vesr(esbc-mod-table-modification)# value-pattern "(\\d{4})-(\\d{2})-(\\d{2})"

#Добавить правило для подмены содержимого заголовка (меняем формат даты на "месяц/число/год"):
vesr(esbc-mod-table-modification)# replacement "\\2/\\3/\\1"

vesr(esbc-mod-table-modification)# exit
vesr(esbc-mod-table)# exit

#Привязать таблицу модификаторов к входящему транку TRUNK_IN:
vesr(config-esbc)# trunk sip TRUNK_IN
vesr(config-esbc-trunk-sip)# mod-table sip in MODTABLE_IN 

#Применить и подтвердить изменения:
vesr(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesr(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

...

Блок кода
INVITE sip:135@10.25.72.151:5060 SIP/2.0
Via: SIP/2.0/UDP 10.25.72.35:5063;rport;branch=z9hG4bK-1104631-1-0
From: <sip:134@10.25.72.151:5060;user=phone>;tag=1
To: <sip:135@10.25.72.151:5060;user=phone>
Call-ID: 1-1104631@10.25.72.35
CSeq: 1 INVITE
Max-Forwards: 70
Supported: replaces, timer
Contact: <sip:134@10.25.72.35:5063>
#Заголовок, который необходимо протранзитить и изменить:
Date: 2024-09-10
Content-Type: application/sdp
Content-Length:   153

...

В конфигурации есть два транка, настроена маршрутизация. Вызов, который приходит из TRUNK_IN, уходит в TRUNK_OUT. В TRUNK_OUT отправляется запрос INVITE, в теле которого есть заголовок Diversion (предварительно следует настроить таблицу модификации на IN транка TRUNK_IN для транзита заголовка Dicersion на второе плечо). Требуется, чтобы в запросе INVITE, который отправляется в TRUNK_OUT, вырезался заголовок Diversion, а его значение из user part было добавлено в display name заголовка From.

Блок кода
languagec#
vesr# 
vesr# configure 
vesr(config)# esbc 

#Создание таблицы модификаторов MODTABLE_OUT:
vesr(config-esbc)# mod-table sip MODTABLE_OUT
vesr(esbc-mod-table)# 

#Добавление в таблицу модификаторов правила copy для копирования значения user part в переменную u01:
vesr(esbc-mod-table)# mod 0 copy
vesr(esbc-mod-table-modification)# 

#Выбор запроса, в котором будет использоваться модификатор cpoycopy (в данном случае INVITE):
vesr(esbc-mod-table-modification)# sip method type Invite

#Указать название заголовка, из которого необходимо копировать значение (в данном случае Diversion):
vesr(esbc-mod-table-modification)# sip header-pattern Diversion

#Указать содержимое заголовка, при совпадении с которым будет выполнено копирование в пременнуюпеременную. В переменную будет скопирована та часть отбора, которая указана в скобках:
vesr(esbc-mod-table-modification)# value-pattern '<sip:(.+)@'

#Указать переменную, в которую будет скопировано значение, указанное в скобках, в примере - (.+):
vesr(esbc-mod-table-modification)# variable-str 'u01'
vesr(esbc-mod-table-modification)# exit

#Добавление в таблицу модификаторов правила replace для замены заголовка From:
vesr(esbc-mod-table)# mod 1 replace

#Указать название заголовка, в котором будет осуществляться замена:
vesr(esbc-mod-table-modification)# sip header-pattern 'From'

#Выбор запроса, в котором будет использоваться модификатор replace (в данном случае INVITE):
vesr(esbc-mod-table-modification)# sip method type Invite

#Указать часть содержимого заголовка, которую необходимо заменить:
vesr(esbc-mod-table-modification)# value-pattern '.+ <sip:'

# Указать переменную u01, которая содержит значение, полученное в модификации copy:
vesr(esbc-mod-table-modification)# replacement '\u01 <sip:$'
vesr(esbc-mod-table-modification)# exit

#Добавление в таблицу модификаторов правила no-transit для удаления заголовка Diversion:
vesr(esbc-mod-table)# mod 2 no-transit
vesr(esbc-mod-table-modification)# sip header-pattern 'Diversion'
vesr(esbc-mod-table-modification)# sip method type Invite
vesr(esbc-mod-table-modification)# exit
vesr(esbc-mod-table)# exit

#Привязать таблицу модификаторов к исходящему транку TRUNK_OUT:
vesr(config-esbc)# trunk sip TRUNK_OUT 
vesr(config-esbc-trunk-sip)# mod-table sip out MODTABLE_OUT 

#Применить и подтвердить изменения:
vesr(config-esbc-trunk-sip)# do commit 
Configuration has been successfully applied and saved to flash. Commit timer started, changes will be reverted in 600 seconds.
vesr(config-esbc-trunk-sip)# do confirm 
Configuration has been confirmed. Commit timer canceled.

...

  1. Активируйте web-интерфейс по протоколу HTTP или HTTPS.:
Блок кода
vesr# config
vesr(config)# ip http server
vesr(config)# ip https server
vesr(config)# exit
vesr# commit
vesr# confirm

...

4. Введите в адресной строке браузера IP-адрес устройства. Для перехода в web-интерфейс можно использовать URL: http://<ip-address_esbc> или https://<ip-address_esbc>. При успешном обнаружении контроллера в окне браузера отобразится страница авторизации.:

5. Введите имя пользователя и пароль в соответствующие поля.

...

6. Нажмите кнопку «Войти». В окне браузера откроется страница "Информация об устройстве".:

Image Modified