Skip to content

mvts


MVTS (MERA VoIP Transit Softswitch)
 - это полнофункциональный пограничный контроллер сессий, предназначенный для гибкого управления VoIP-трафиком в сетях операторского класса. Основная задача MVTS — концентрация и коммутация VoIP-потоков, трансляция их между сетями с разнородной сигнализацией.

Ротация логов MVTS Pro

При большом количестве трафика ротация логов через logrotate не эффективна. Ниже скриптик запускаемый каждый час на cron и удаляющий traffic.log.

# nano /etc/mvts3g/mvts3g_log_cleaner.sh
#!/bin/sh

#rm -f /var/log/mvts3g/traffic.del
/bin/mv -f /var/log/mvts3g/traffic.log /var/log/mvts3g/traffic.del
/usr/bin/killall -HUP mvts3g-server
/bin/rm -f /var/log/mvts3g/traffic.del
/bin/rm -f /var/log/mvts3g/traffic.log.1
# nano /etc/cron.d/mvts3g-log_delete

#
5 * * * *  root  /etc/mvts3g/mvts3g_log_cleaner.sh > /dev/null

Использование регулярных выражений в MVTS

Регулярные выражения используются при задании значений следующим конфигурационным параметрам:

dialpeer.cfg:

  • - dst_pattern=, src_pattern=,

  • - dst_translate=, src_translate=

  • - dst_bill_translate=, src_bill_translate=

  • - user_translate=

  • - display_ie_translate=

user.cfg; gateway.cfg

  • - dst_pattern=, src_pattern=,

  • - dst_translate=, src_translate=,

  • - in_dst_translate=, in_src_translate=

При необходимости указания пустого номера в описании объектов набора (dialpeer) используется ключевое слово «empty».

  • Пример: При значении параметра src_translate=empty/123456, MVTS преобразует полученный пустой номер вызывающего абонента в номер 123456. Данное ключевое слово также может использоваться для трансформации информационного элемента «display» (параметр display_ie_translate=), в случае, если оно отсутствует в получаемом пакете SETUP. MVTS проверяет регулярные выражения в правилах преобразования номеров на присутствие запрещенных символов и при обнаружении удаляет их.

При возникновении ошибки (недопустимый символ в регулярном выражении) результат проверки выводится в трассировочный журнал, который записывается в файл с названием mp.kernel.sh.log-<date>

 

Регулярные выражения допускают использование следующих символов: ^0123456789*#\&

 

 

  • ПРЕФИКСЫ ПОЛЕЙ DST_PATTERN И SRC_PATTERN

Наиболее часто используемые конструкции:

dst_pattern=777[0-9]+

Комментарий: номера, начинающиеся с 777 и состоящие далее любого количества цифр от 0 до 9. удачные примеры: 77711, 777922 неудачные примеры: 77811, 7767

dst_pattern=777[0-5]{1}[0-9]+

Комментарий: номера начинающиеся с 777, далее следует любая цифра в диапазоне от 0 до 5 и затем любое количество цифр от 0 до 9. удачные примеры: 77711, 777422 неудачные примеры: 777, 77811, 77761, 7775

dst_pattern=...... или dst_pattern=.{6}

Комментарий: шесть любых знаков, включая все разрешенные цифры и знаки – например, символ # удачные примеры: 123456, 976065, 123#56 неудачные примеры: 1111111, 111, 123456#

Трансляция номеров

Основной целью преобразования (трансляции) является приведение телефонных номеров к определенному формату. Для трансляции номеров наиболее часто используются такие операции как добавление, удаление или замена отдельных частей телефонного номера. Регулярные выражения, используемые для преобразования номеров, состоят из буквенно-числовых символов и метасимволов, описание которых приведено ниже:

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

  • символ «|» делит шаблон поиска на несколько логических частей

  • символ «\» ставится в правой части регулярного выражения. Следующая за этим знаком цифра обозначает какую часть шаблона, разделенного символами «|» следует использовать для формирования нового номера

  • символ «&» обозначает все выражение, подошедшее под шаблон поиска. Данный символ употребляется в правой части выражения.

  • символ «.» означает любой знак (включая цифры, буквы и символы)

  • выражение в квадратных скобках [] используется только в шаблоне поиска и означает одну любую цифру из заданного в скобках интервала или последовательности цифр. Например: [0-9] означает одну любую цифру от 0 до 9. [1234] означает одну цифру от 1 до 4, [1236-9] означает одну любую цифру из следующих: 1,2,3,6,7,8,9.

  • Число в фигурных скобках означает количество повторений предшествующего символа (цифры, буквы, символа или выражения). Например: .{4} означает четыре любых символа. [0-9]{2} означает два повторения выражения [0-9], т.е. [0-9] [0-9]

  • символ «*» означает любое количество повторений предшествующего символа (включая цифры, буквы или выражения). Например: [0-9]* означает любое количество цифр от 0 до 9. .* означает любое количество любых знаков.

Примеры преобразования номеров

  • Операции добавления

Задача 1: добавить префикс 78 к номеру 12345:

dst_translate = 12345/78&

результат: 12345 → 7812345

Задача 2: добавить префикс 78312 к любому шестизначному номеру:

dst_pattern=.{6}
dst_translate =.{6}/78312&

результат: 123456 → 78312 123456 результат: 654321 → 78312 654321

Задача 3: добавить префикс 78312 к номеру, начинающемуся с 777:

dst_pattern=<.*>
dst_translate=777.*/78312&

результат: 777123456 → 78312777123456 результат: 777121212 → 78312777121212

Задача 4: добавить последовательность символов 77 в конец строки

dst_translate=.*/&77

результат: 1234 → 123477

  • Операции удаления

Задача 1: из любого номера с префиксом 095 удалять префикс

dst_pattern=.*
dst_translate=095|.*/\2

результат: 095123456# → 095 | 123456# → 123456#

Комментарий: выражение 095|.*/ в данном случае является шаблоном поиска, поэтому преобразованию подлежат только номера, начинающиеся с 095 + любое количество любых символов. Символ «|» делит шаблон поиска на две логические части. Строка замены состоит лишь из выражения «\2», что означает «взять вторую логическую часть из разделенного шаблона поиска».

Задача 2: из любого номера с префиксом 8182 удалять префикс

dst_pattern= .*
dst_translate=8182|[0-9]*/\2

результат: 8182123456 → 8182 | 123456 → 123456

Задача 3: удалять символ # из середины строки

dst_translate=[0-9]*|#|[0-9]*/\1\3

результат: 123#45 → 123 | # | 45 → 12345

Комментарий: в данном регулярном выражении шаблон поиска делится двумя символами «|» на три части: [0-9]* - любое количество цифр от 0 до 9. # - символ «решетка». [0-9]* - любое количество цифр от 0 до 9. Из синтаксиса строки замены данного регулярного выражения видно, что для создания нового номера берется только первая и третья логические части из трех выделенных в шаблоне поиска.

  • Операции замены

Задача 1: заменять префикс 8182 в любых номерах с таким префиксом на 777

dst_pattern= .*
dst_translate=8182|[0-9]*/777\2

результат: 8182123456 → 8182 | 123456 → 777 123456

Комментарий: как и в предыдущих случаях, шаблон поиска делится на две логические части символом «|» (8182 – первая логическая часть, [0-9]* - вторая логическая часть). В данном случае строка замены содержит дополнительную подстроку (777), которая будет подставлена перед второй логической частью ([0-9]*), т.е. фактически вместо первой логической части (8182).  Таким образом, мы осуществляем замену первой логической части шаблона дополнительной подстрокой.

Задача 2 заменять префикс 1212 в любых номерах с таким префиксом на 1718

dst_pattern= .*
bill_translate=1212|.*/1718\2

результат: 121212345 → 1212 | 12345 → 1718 | 12345 → 171812345

Задача 3: заменять символ # в середине строки на последовательность цифр 555

dst_translate=[0-9]*|#|[0-9]*/\1 555\3

результат: 123#45 → 123 | # | 45 → 123 | 555 | 45 →12355545

Примечание: обратите внимание на пробел между \1 и 555. Отсутствие пробела будет воспринято системой как выражение \1555 – «взять одна тысяча пятьсот пятьдесят пятую логическую часть из шаблона поиска»

Задача 4: заменять символ # в конце строки на последовательность цифр 123

dst_bill_translate=[0-9]*|#/\1 123

результат: 123456# → 123456 | # → 123456123

Комментарий: Символ «|» делит шаблон поиска на две логические части, причем символ «решетка» находится во второй. Строка замены использует только первую логическую часть и добавляет к ней 123.

Примечание: обратите внимание на пробел между \1 и 123. Отсутствие пробела будет воспринято системой как выражение \1123 – «взять одна тысяча сто двадцать третью логическую часть из строки поиска».

Примеры

Задача. Добавить префикс к исходящему номеру.

Out DST translate - на выходе со свича. В таком виде терминатор получает B-номер.
dst_translate=[0-9]*/0030#&

, где

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

  • символ «&» обозначает все выражение, подошедшее под шаблон поиска. Данный символ употребляется в правой части выражения.

  • выражение в квадратных скобках [] используется только в шаблоне поиска и означает одну любую цифру из заданного в скобках интервала или последовательности цифр. Например: [0-9] означает одну любую цифру от 0 до 9. [1234] означает одну цифру от 1 до 4, [1236-9] означает одну любую цифру из следующих: 1,2,3,6,7,8,9.

  • символ «*» означает любое количество повторений предшествующего символа (включая цифры, буквы или выражения). Например: [0-9]* означает любое количество цифр от 0 до 9. .* означает любое количество любых знаков.

Задача. Нужно удалить префикс 0030# из входящего номера.

Первый вариант
In DST translate - входящий звонок на Меру
dst_translate=0030#|.*/\2

результат: 0030#123456# → 0030# | 123456# → 123456#

Комментарий: выражение 0030#|.*/ в данном случае является шаблоном поиска, поэтому преобразованию подлежат только номера, начинающиеся с 0030# + любое количество любых символов. Символ «|» делит шаблон поиска на две логические части. Строка замены состоит лишь из выражения «\2», что означает «взять вторую логическую часть из разделенного шаблона  поиска».

Второй вариант. Более правильный так как в преобразованном номере разрещает только цифры.
In DST translate
dst_translate=0030#|[0-9]*/\2

Leave a Reply

Your email address will not be published. Required fields are marked *

π