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