AXE-10 GUTSFUCK
                                 ===============

   1.Введение
   2.Терминология
   3.Состав AXE-10
   4.IOG/MML
   5.Команды
      5.1.Управление маршрутами
      5.2.Управление БС
      5.3.Управление абонентами
   6.Слушаем чужого абонента
   7.Скриптинг в WinFIOL


   1.Введение
   ----------

   "Разноцветный" фрикинг умер с появлением ОКС7 и все игры с тональностью
   сигнала, подаваемого в линию при помощи замороченных девайсов, остались
   далеко в  прошлом. Однако  телефония,  как  технология связи, постоянно
   совершенствуется в условиях  конкуренции на рынке  связи и  требований, 
   выдвигаемых современных обществом..
   Впрочем,  это все  лирика. Сегодня  мы не будем говорить о перспективах
   развития технологий  связи,  а  остановимся  на вещах уже существующих.
   В частности,речь пойдет о коммутаторах AXE-10 фирмы Ericsson, о том что
   они собой представляют, какой цели служат,как осуществляется управление
   ими и о многом другом.
 

   2.Терминология
   --------------

   Имеет  смысл  очертить  несколько  базовых терминов, которые будут то и
   дело встречаться на протяжении статьи, чтобы люди,далекие от телефонии,
   тоже могли понять о чем идет речь.

   Коммутация - грубо говоря,  процедура соединения (проключения) двух или
   более  абонентских   линий.  Чтобы   было   понятней,  телефонная  сеть
   представляет собой обычную  электрическую  цепь  где  в  качестве узлов
   цепи выступают абонентские терминалы  (телефонные  аппараты). В обычном
   положении  цепь разомкнута, а  когда  пользователь инициирует исходящий
   вызов  или  принимает входящий, цепь  замыкается, образуя таким образом
   связь между конечными абонентами.
 
   Коммутатор  -  устройство,  основное  назначение  которого   состоит  в 
   автоматическом  (то  есть   оператор  в  этом  процессе  не  участвует) 
   соединении   абонентских   линий.  Но  этим   функции   коммутатора  не  
   исчерпываются  -  он также контролирует всю деятельность,  происходящую
   в  телефонной  сети и является своего рода зеркалом состояния  сети.
   Наиболее  распространненным   отечественным  продуктом является линейка 
   систем "КВАНТ", про которые так много можно узнать в старых журналах.
 
   Базовая станция (сота) - любая сеть  мобильной телефонной связи состоит
   как минимум   из  трех  компонентов:  коммутатора,  базовых  станций  и
   абонентских терминалов (обычных мобильных трубок). Причем   абонентские
   аппараты взаимодействуют  с коммутатором  не  напрямую,  а  посредством
   базовых станций, обслуживающих  свои  зоны  покрытия.  Проводя   грубые
   аналогии  с компьютерными сетями, можно представить сеть, состоящую  из
   центрального суперкомпьютера (коммутатор), ряда хабов (базовых станций)
   и   рабочих  станций (абонентских терминалов).  Задача  хаба  проста  -
   пробросить  пакеты, полученные  от  рабочей  станции, суперкомпьютеру и
   наоборот. Ну  и  тут примерно так же - базовая станция выступает в роли 
   "трубы" между абонентом и коммутатором.
 
   AXE-10 - это  полнофункциональный  коммутатор,  разработанный  шведской
   фирмой Ericsson, который в силу ряда причин обрел огромную популярность
   в России, равно как и за ее пределами. Главной особенностью, отличавшей
   его  от  аналогичных  девайсов,  выпускаемых  в то  время, является его 
   модульность. То есть, это почти как компьютер - прикупил дополнительный
   блок, и есть у тебя теперь SMS-центр. Стало  у  тебя  больше  абонентов
   -  докупил  еще один блок, расширив  тем самым номерную емкость и число
   свободных интерфейсов для подключения базовых станций.
   Надо   сказать,  что   современное   коммутационное  оборудование,  что 
   естесственно,претерпело сильные изменения в сравнении с предшествующими
   поколениями девайсов.

   К примеру,в настоящий момент прослеживается тенденция к децентрализации
   сети - появляются   контроллеры   базовых  станций,  которые  выполняют
   часть  функций коммутатора,  обеспечивая  тем  самым  его  разгрузку  и
   сосредоточение  его на основной функции - коммутации абонентских линий.
   И тем не менее, я считаю данную информацию   актуальной   -   поскольку
   оборудование AXE-10 распространено  повсеместно, да и к тому же большие
   сомнения у меня вызывает возможность скорой  замены  оборудования АТС в 
   нашей стране в ближайшие 10 лет в условиях действующей жидократии.

   Оптомультиплексор  -  преобразует электрический интерфейс в оптический,
   то есть преобразует электрический сигнал в сигнал,пригодный дляпередачи
   по оптоволокну (как правило, E1 потоки) и наоборот.


   3.Состав AXE-10
   ---------------

   Рассматриваемый нами девайс может работать в следуюших режимах:

   - коммутатор сети мобильной связи в стандарте NMT-450
   - коммутатор проводной телефонной сети
   - транзитный коммутатор

   Мы,  главным   образом,  сконцентрируемся  на  работе AXE-10 в качестве
   коммутатора  для   мобильной  сети.  Одной  из  интересных особенностей 
   рассматриваемого   девайса  (девайс,   наверное,   слишком    просто  -  
   представьте    себе   с   десяток   шкафчиков,  напичканных   различным 
   оборудованием)  является  то,  все основные блоки в нем дублируются для
   обеспечения  корректности работы и отказоустойчивости. То есть он имеет
   два центральных процессора, два флопа, и так далее.
 
   AXE-10 состоит из следующих __основных__ блоков:

   AMU  (Automatic  maintenance unit) - блок,  следящий  за  правильностью  
   работы обоих процессоров (APZ).

   MT   -  (Magnet  Type)  -  блок, предназначенный  для  записи резервных
   копий  конфигурации  и  файлов  тарификации  звонков на магнитную ленту 
   (стример).

   SPG  -  (SupportProcessorGroup) - суппортпроцессорная группа, управляет
   всей подсистемой I/O, что включает в себя управление файловой системой,
   жесткими дисками, флопами, терминалами, стримером.

   RP   -   (Regional   Processor)   -   региональные    процессоры,   это  
   вспомогательные устройства,  занимающиеся  управлением  такими  блоками
   как  CLM,  TSM,  CCD  и так далее.  То  есть,  по  сути,  они  являются 
   отдельными   процессорами,    работающими   паралельно   основным,   но 
   обслуживающими лишь конкретные блоки.
 
   CCD  -  модуль,  осуществляющий подключение к уже установленному сеансу
   связи - используется для организации  конференц-связи, для тестирования
   линии, а также для спецслужб ).
 
   TSM  -  (Time  Switch  Module) - кристаллическая  решетка, в  которой и
   происходит коммутация линий. На рассвете  телефонии сидел себе оператор
   в  комнатке,  принимал  заказы  на  соединение  и  физически  перетыкал
   провода. В настоящий же момент,  коммутатор  сам  разбирает поступающие
   пакеты,в которых передается A-номер(SRC) и B-номер(DST), и на основании
   этих  данных  решает  кого,  с  кем, и как соединить.

   CLM - генератор тактов, сердце коммутатора.

   Кроме  вышеуказанного  к  основным  элементам также  необходимо отнести
   порты терминалов (обычные COM-порты, либо интерфейсы  ethernet),  через
   которые происходит подключение компьютеров  операторов  к  коммутатору,
   и  интерфейсы базовых станций  (БС), посредством которых осуществляется
   подключение  БС  к  коммутатору.  Тут  стоит  отметить  что  потоки  БС
   заводятся в промежуточное устройство - кросс-коннектор,а вот уже с него
   попадают   на   интерфейсы  подключения   БС   коммутатора.  В   крайне
   упрощенном  варианте  схема соединения выглядит так:

   [коммутатор] <-- [кросс-коннектор] <-- [кросс] <-- [оптомультиплексор]\
  
    <-- [БС] <-- [абонент]

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


    4.IOG/MML
    ---------

    Перейдем к программной части -к управлению сетью.В коммутаторе AXE-10,
    равно   как    и  в  любом  другом  коммутационном  оборудовании  типа 
    маршрутизаторов,  свитчей,  DSL-модемов   и   так  далее  используется
    собственный встроенный программный комплекс IOG -Ericsson Input/Output
    Group. Он  много  сложнее нежели, скажем, Cisco IOS в виду  того,  что
    должен    выполнять   существенно   более  широкий  спектр  функций  и
    обслуживать большее число  различных  аппаратных  блоков.  Естественно
    что   ПО   коммутатора   также   как   и  ПО  других  устройств  имеет 
    возможность   обновления,   поэтому  на   разных  коммутаторах   могут 
    существовать различные версии IOG. Наиболее распространена IOG-11.
 
    Коммутатор  "понимает" стандартный  язык MML (Man-Machine Language), а
    потому все общение с ним оператора построено  на формате команд MML. В
    кратце объясню синтаксис:

    Команда:Параметр=Значение; 

    Команда -состоит из 5 символов латинского алфавита в верхнем регистре.
    Для отделения  названия команды от  параметров используется двоеточие;
    команда должна заканчиваться  точкой  с запятой, если она не составная
    (об этом позже). Команда может не иметь параметров вообще, может иметь
    необязательные параметры - все как в обычных операционных системах.
    Из  нестандартного - параметру может передаваться несколько конкретных
    значений (разделяются амперсандом),  а также их диапазоны (начальное и
    конечное значения разделяются двумя амперсандами). Примеры:

    # параметру передается три значения
    Команда:Параметр=Значение1&Значение2&Значение3; 

    # параметру передается диапазон значений
    Команда:Параметр=НачальноеЗначение&&КонечноеЗначение; 

    Да, про символы, из которых составлено имя команды. Если  вы подумали,
    что  это что-то вроде "SATAN", "HELLO" или "DEATH",  то  мне  придется
    разрушить ваш сказочный мир. Например:

    Команда IOFAT:

    - Первые две буквы - группа, к  которой относится команда (IO - Input/
      Output)
    - Следуюшие две идентифицируют саму команду [FA - File to Alphanumeric
      device]
    - Пятая - действие команды [T - Transfer]

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

    P - print [вывести]
    I - initiate [инициировать, активировать]
    C - change [заменить, изменить] 
    R - reset [сбросить]
    E - end [отменить, удалить, закрыть]
    L - load [загрузить]
    S - setup [установить]
    T - transfer [передать]

    Это  основные  значения  пятого  символа  команды.  В целом это и все.
    Скриптинг  осуществляется   на  уровне  терминального  приложения (как
    правило, эриксоновские  FIOL   или   WinFIOL - скачать  можно  в ed2k,
    простой терминалкой работать не очень удобно). Самих команд существует
    более 10000, не  считая недокументированных - но все их знать нам и не
    нужно. Тут стоит упомянуть, что в принципе,  мы  имеем  все  средства,
    чтобы  делать  с  коммутатором  все что нам заблагорассудится,  однако
    разработчики Ericsson создали нормальные интерфейсы далеко  не ко всем
    имеющимся   функциям,  а  ряд  функций  специально  не  упоминается  в 
    документации, поскольку имеет  специальное   значение  и  предназначен
    для  специальных  служб.  Так   или   иначе,  мы  рассмотрим некоторые 
    наиболее важные и часто используемые команды, применяемые операторами.


    5.Команды
    ---------

    Существует бесчисленное  множество команд, понимаемых AXE-10, служащих
    самым  различным  целям. Многие  из  них  недокументированы. Здесь эти
    команды условно разбиты на четыре группы; в каждой  группе  приводится
    ряд примеров команд, которые используются наиболее часто.
 

    5.1.Управление маршрутами
    -------------------------
   
    По  сути,  маршрут - это логическая группа каналов БС. Типичный пример
    маршрута:

        <strdp:r=route1to;
        DEVICE STATE SURVEY
        R         NDV  NOCC  NIDL  NBLO  RSTAT
        ROUTE1TO    8     1     6     1  NORES
        DEVICE STATE DETAILS
        DEV            STATE  BLS/FS ADM  ABS
        MBTD45-9       BLOC   MBL         H'F2
        MBTD45-28      IDLE               H'00
        MBTD45-29      INCO               H'A2
        MBTD45-46      IDLE               H'00
        MBTD45-47      SEBU               H'10
        MBTD45-49      SEBU               H'30
        MBTD45-51      IDLE               H'00
        MBTD45-56      IDLE               H'00
        END                  

    Команда STRDP выводит информацию о состоянии каналов маршрута.В данном
    случае мы видим,что всего доступно 8 каналов, 1 из которых использован
    для  входящего  соединения,  6  свободно, и 1 в блокировке (MBL значит
    Manualy Blocked, то есть заблокирован непосредственно оператором). Все
    каналы  имеют тип MBTD45, что говорит о их принадлежности к БС, а не к
    какому-либо другому типу каналов.             

    Синтаксис: strdp:r=маршрут[to/ti];
    Также можно отфильтровать каналы по состоянию:

                   strdp:r=маршрут[to/ti], state=IDLE; 

    to и ti - это, соответственно, исходящее и входящее направления.

    Кроме  того, можно использовать strsp - эта команда отображает сводную
    информацию по каждому из заданных маршрутов (или по всем маршрутам):

        <strsp:r=route1i&route2i;
        DEVICE STATE SURVEY
        R         NDV  NOCC  NIDL  NBLO  RSTAT
        ROUTE1I   116     0   115     1  NORES
        ROUTE2I    87    49    36     2  NORES
        END                                 

    Синтаксис: strdp:r=маршрут[o/i]&маршрут2[o/i];
    или
    Синтаксис: strdp:r=ALL;

    o и i - опять же, соответствуют, исходящему и входящему направлениям.

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

    Блокировка/разблокирова каналов:
    --------------------------------

    blodi:dev=mbtd45-28; # блокировка

    Синтаксис: blodi:dev=<тип_канала>-<номер_канала>; 
     
    blode:dev=mbtd45-28; # разблокировка 
 
    Синтаксис: blode:dev=<тип_канала>-<номер_канала>; 

    Можно указывать диапазон каналов, например: blodi:dev=mbtd45-28&&-46;

     
    Работа с контрольными данными маршрута:
    ---------------------------------------

    Вывод текущих данных:
 
    blurp:r=route1to;

    Выводит класс алармов, и их пределы.


    Изменение текущих данных:
    
    blurc:r=route1o,lvb=1&2,acl=a2;    

    Синтаксис: blurc:r=<маршрут>,lvb=<лимиты>,acl=<класс аларма>

    И так далее.


    5.2.Управление БС
    -----------------
  
    Алармы:

    mnbip:bst=bs1,dev=all;  # выводит все текущие алармы по данной БС

        <mnbip:bst=bs1,dev=all;
        BASE STATION ALARM INDICATORS STATUS

        BST     DEV           RCH  DCH  HCH
        CAW                                                  ACL
        BS1     MBTD45-22          YES
        REDUNDANT POWER SUPPLY                               A1
        END                                                           

    В  данном  случае, по каналу 22 БС-1 висит аларм, означающий сбой по
    питанию.
 
    mnbir:bst=bs1,dev=all;  # пытается сбросить все алармы по данной БС

    Можно указывать несколько БС, все БС (значение bst=ALL), и выборочно 
    каналы (вместо dev=all). 

 
    Состояние каналов:

    mncdp:bst=bs1;

    Команда аналогична strdp, но выводит состояние каналов не маршрута, а
    БС. Только тех каналов, которые к ней физически привязаны. 


    5.3.Управление абонентами
    -------------------------

    Что  касается абонентов и их разговоров, то есть тут  небольшой нюанс:
    в системе имеется параметр, задаваемый оператором, определяющий  время
    (например 20 минут), через  которое  будет  выводится предупреждение о 
    слишком длительном звонке.И каждые n минут коммутатор сравнивает новую
    таблицу звонков с предыдущей. Если через 20 минут коммутатор обнаружит
    в таблице абонента, который присутствовал там при предыдущей проверке,
    то  оператору  будет  выведено  об  этом сообщение (называемое PARTIAL
    PRINTOUT). 

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

    Ну а теперь перейдем, собственно, к командам.    
 
    Основная команда:

    suscp:snb=6666,LIST; # 6666 - RID абонента
    
    LIST  -  необязательный  параметр,   который   выводит  дополнительную 
    информацию.

    Выводит информацию о статусе и категориях абонента. 

        <suscp:snb=6666;
        SUBSCRIBER DATA
        SNB        DEV        DETY  SUT  SCL       MIS
        6666                        PB   CBB-0
                                         OBA-215
                                         MCT-1
                                         CTR-1
                                         TRB-1
                                         TRN-4
        END                                      


    Изменение категорий:

    suscc:snb=6666,scl=bic-1&boc-1;

    В данном случае абоненту с RID 6666 добавлены категории BIC-1 и BOC-1,
    то есть блокировку входящих и исходящих вызовов. 


    Отслеживание абонента:

    ctrmi:snb=6666;

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

    Прерывание звонка абонента:

    mnsdi:snb=6666;   # крайне полезная команда :).


    Работа с PIN-кодом абонента:

    mnpwp:snb=6666;   # выводит PIN абонента
  
    mnpwc:snb=6666,mspw=666;   # меняет PIN на 666

    
    Мониторинг линии:

    В сочетании  с  выводом команды ctrmi у нас появляется  возможность не
    только  протеcтировать  качество  связи, но и узнать не простудился ли 
    прослушиваемый абонент :). 

    mocoi:dev=upd0-123;

    На самом деле существует команда,специально заточенная для этого дела,
    но она не документирована. Подробности можно спросить на axenet.ru

    Пожалуй, достаточно.
     

    6.Слушаем чужого абонента
    -------------------------

    В разделе 5.3 вы узнали, что коммутатор проверяет длительность текущих
    звонков, и  по истечении n минут разговора выдает сообщение о том, что
    звонок  по  такому-то  номеру  длится  более  n минут. Если этот номер 
    "приписан" к нашему коммутатору, то нам  не составляет  труда выяснить
    в чем причина - абонент заговорился или же сеанс подвис. Не  смотря на
    то, что  чаще всего "длинные" звонки возникают между абонентами одного
    оператора  (в виду льготных или бесплатных тарифов на разговоры внутри
    сети), иногда бывает что абонент звонит, скажем, на городской номер. 
    Для такой  ситуации   технари  в  Ericsson  не  придумали  специальной
    команды, а следовательно,послушать такой звонок мы вроде как не можем.
    Однако,  поскольку  звонок  идет  через  наш   коммутатор,  то  о  нем
    обязательно должны храниться записи, другое дело что добраться  до них
    будет  сложнее. Вот  пример  сообщения  PARTIAL  PRINTOUT  для  чужого 
    абонента:

    PARTIAL PRINTOUT MSNB(B)=80959802247
    END

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

    1) Входим в режим отладки:
 
    test system;

    На   этом   этапе   должно  появиться сообщение о том, что с такого-то
    терминала был активирован отладочный режим.

    2)  Выводим   список   всех активных телефонных разговоров. Отмечу что
    указанное  в  команде   смещение  является постоянным - там коммутатор
    всегда хранит информацию об активных звонках:

    print var cdr 0-:33;

    После чего появится   следующего  формата список. Строк там может быть
    очень много, я приведу только одну.
 
    H'0048:....) H'3204 H'2278 H'2201 H'5204 H'2234 H'2224 H'7422 H'2204
             
    Часть  "H'0048"  сообщает  нам  адрес  первой  ячейки  в этой  строке.
    Нумерация, как вы уже успели понять, шестнадцатиричная, следовательно,
    после 48, будет 49, а после него 4A, а не 50.

    3)  Ищем   смещение,  соответствующее  нужному  нам  звонку. Для этого
    осуществляем поиск  по списку на предмет последних четырех цифр номера
    в обратном порядке. То есть в нашем случае это 2247, стало быть искать
    нам нужно число 7422.

    H'0048:....) H'3204 H'2278 H'2201 H'5204 H'2234 H'2224 H'7422 H'2204
             
                   48      49    4A     4B     4C     4D     4E     4F

    Итак,  как  мы  можем  видеть,  адресом  искомой  ячейки  является 4E.
    Обращу   ваше   внимание,  что  ячеек  со значением  7422  может  быть
    несколько - поэтому вам нужно найти и проверить все из них.

    4) Проверяем правильный ли мы нашли адрес, выполнив команду: 

    # вместо 4E нужно подставить найденный вами адрес
    print var cdr h'4E:34; 

    на что коммутатор ответит примерно так: 

    CDR VAR H'004E:H'0022=H'F874

    Последние  две цифры вывода соответствуют последним двум цифрам номера
    телефона, записанным  в обратном порядке. В данном случае  мы, похоже,
    нашли то что нужно - 74 это 47,что соответствует последним двум цифрам
    номера 80959802247.


    5) Теперь, имея необходимые данные, получаем адрес разговора:

    # опять же вместо 4E подставте найденный вами адрес
    print var cdr h'4E:164;

    Ответ системы:

    CDR VAR H'004E:H'0022=H'0194

    Интересующее  нас  значение  равно  0194 -  это  и  есть адрес  ячейки
    искомого разговора. 

    6) И наконец, выясняем какие каналы используются для разговора:

    CTRAI:DEV=CLCOF-H'194;


    7.Скриптинг в WinFIOL
    ---------------------

    Ну это довольно просто. Клиент (например, WinFIOL) позволяет выполнять
    ранее  записанные команды  из файла, что  очень удобно и требуется для
    автоматизации :). Вот некоторые из наиболее распространенных команд:

    @CONNECT - подключиться (аналог кнопки F5, можно сократить до @S)
    @RELEASE - отключиться (аналог кнопки Esc, можно сократить до @E)
    @LOG ON <путь_к_файлу> - вести протокол в файл (можно сократить до @L)  
    @CLOSE - закрыть лог-файл
    @ASK <имя_переменной> <значение> - присвоить значение переменной
    @CLEAR - удалить все ранее созданные переменные
    @DEC <имя_переменной> <число> - применить операцию декремента по числу
    @INC <имя_переменной> <число> - инкремент по числу
    @IF <условие> THEN <оператор> - условный оператор
    @! - комментарий
    @T <число_секунд> - вставить задержку (аналог sleep())
    @M <число_минут> - вставить задержку на заданное число минут
    @LABEL <имя_метки> - задать метку
    @J <имя_метки> - безусловный переход к метке
    @C <метка|метка> - условный переход к метке
    @K <HH:MM:SS> - начать выполнение блока команд в заданное время

    Это, пожалуй, основные операторы, хотя  существуют еще несколько более
    специфичных, и реже используемых. Сами команды коммутатора размещаются
    в  файле  как  есть, то  есть им  не  должен предшествовать какой-либо
    оператор или символ "@".


    [-] Трактатъ о системе сигнализации NMT:

        http://nmt.btv.ru/index.php?page=NMTSS
  
    [-] Отличный ресурс по оборудованию AXE-10:

        http://axenet.ru особенно доки из раздела http://axenet.ru/intuse/


                                   К  О  Н  Е  Ц