четверг, 28 марта 2019 г.

FreePBX Certified Essentials - что это?


реши пройти давеча сертификацию по FreePBX, благо у нас в России сначала знакомятся с ней, а потом узнают нативный астериск. Насколько этот подход хорош или нет пусть каждый судит сам для себя, но вернемся к экзамену. Экзамен состоит из сорока вопросов, чтобы сдать надо ответить на 80% или 32 из 40 вопросов.

Если все пройдет успешно, то будет так:




И дадут тут же сертификат:





Дам пару примеров вам дорогие читатели
Вот правильный ответ:
А вот не правильный:




Что хочу отметить:

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

Всем удачной сдачи, для практики знаний и закрепления рекомендую

Конец!

AVAYA:как сервер уходит в свободный полет

Вдруг откуда не возьмись с утра заметил я что есть такая ситуация при подключении к АТС через ASA выдало: connection failed, timeout

Такое бывало из-за глюка в ASA, помогало открыть закрыть или гарантированно - качал свежую версию, но здесь не так, не мог зайти и через PUTTY по телнет и SSH.

Интересы пошли когда пошел смотреть на веб.
Как мы знаем на веб у авайи три адреса:
1) Адрес ноды
2) первый сервер
3) второй сервер

Из особенностей то что нода живет на активном сервере.

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

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

Информация по IPSI платам. для проверки:
 Процессы в системе, самое простое это запомнить что их должно быть около 80 и что левый с правым должны совпадать, как-то сколько всего/сколько работает:
 Поближе:
 После перезагрузке можно попасть снова на первый
 
Вот он выключен:

Вот ARP серверов в обмене, если дампить, то хорошо видно как ищат друг друга:
 Вот и поднялся, заняло ~ 5-7 минут:
В разделе диагностики много логов на любой вкус, но вывод на самом деле не очень, если не любите линукс, то для вас будет супер, если хорошо чувствуете себя в консоле - то не ваше будет т.к. грепать тут не выйдет или как либо иначе выгружать и делать выборку, а при попытке самому пойти в /var/log/ Вы получите фигу - закрыто все даже на ппросмотр, все можно только пользователю авайи, а остальным практически ничего:
 Вот список всех возможных выводов, в целом достаточно, но я так для себя и не выяснил что произошло, единственное что осталось - это то что в 11:42 прекратилась обработка вызовов:
Да, и нюанс, те голосовые порты, что были в работе при отключение основного сервера, подвисли. Выражалось это в исправном состоянии при

status station {extension}

Но тишина в трубке, помогало только

busyout station {extension}
release station {extension}

Можно по портам напрямую:
busyout port 01С0716
release port {01[ABCD]XXYY}

где
01 - номер PN
A, B, C, D - кабинеты в PN (G650 8 юнитов шлюз, как раз он)

XX - плата, в G650 14 универсальных плат

YY - порт, абонентские платы на 24 порта, 110 кросс как раз под них

Пока хватит

вторник, 26 марта 2019 г.

Памятка по логам в Asterisk


Расположение                                       Описание
/var/log/asterisk/fail2ban                        Журнал событий модуля fail2ban
/var/log/asterisk/freepbx.log                   Журнал событий модулей FreePBX
/var/log/asterisk/freepbx_security.log     Журнал событий безопасности
/var/log/asterisk/full                                Журнал событий Asterisk каждого
                                                                уровня. Обычно используется для
                                                                поиска трассировок старых звонков
/var/log/dmesg                                        Журнал событий уровня ядра
/var/log/httpd/access_log                        Журнал событий доступа к Apache
/var/log/httpd/error_log                          Журнал ошибок web сервера Apache
/var/log/messages                                   Системный журнал событий Linux
/var/log/yum.log                                     Журнал действий,выполненных через
                                                               yum

Чисто журналы смотреть тяжело, поэтому пользуемся активно сортировками:

Мониторим номер и его изменения:
tail -f /var/log/asterisk/full | grep 101

Вывод лога за число по группе вызовов
cat /var/log/asterisk/full-20181022 |grep 602

Мониторинг fail2ban и полного лога в он-лайн
tail -f /var/log/fail2ban.log
tail -f /var/log/asterisk/full

Поиск по вызовам(имя файла сокращено)
find /var/spool/asterisk/monitor/ -name "out-1234567.wav"

Ищем в логах по ID
grep 220-00005f3e /var/log/asterisk/full*
grep 220-00005f3e /var/log/asterisk/full-20181221

Проверяем по IP-адресу что стучался на web
grep 192.168.100 /etc -R | grep -v /etc/httpd/logs/access_log

Проверяем донабор DISA
tail -f /var/log/asterisk/full | grep disa-dtmf

Смотрим регистрации:
egrep "(Rea|UNREA|Register)" /var/log/asterisk/full*

Удобный просмотр лога
less /var/log/asterisk/full-дата

Удобный просмотр лога, где {name} - имя регистрации
grep {name} /var/log/asterisk/messages 

Удобный просмотр лога, где {name} - адрес, который ищем
tail -f /var/log/asterisk/messages | grep {ip}


Конец!

пятница, 22 марта 2019 г.

Определение требуемой пропускной способностидля передачи потока Е1


Необходимая пропускная  способность для  передачи  потока  Е1 рассчитывается  по формуле


При расчетах получим:

        размер пакета 312 байт;
        требуемая полоса пропускания 2437 кбит/с; 

Логично, честный Е1(2048 кбит/с) мы упаковываем в СПД и к каждому пакету добавляем заголовки IP и Ethernet

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

Подробнее смотрим в документе ОС-1-СПД-0454

В инструкции упрощено, и не дается разбор по заголовкам протоколов, на всякий случай:


Вот в таком виде красиво и многофункционально:

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

Полоса пропускания в расчете на вызов может быть вычислена по формуле:
Voice Bandwidth = PPS · Packet Size,      

где:
PPS – число генерируемых кодеком пакетов в секунду, пакетов/с,
Packet Size – размер речевого пакета, бит.

Размер речевого пакета определяется по формуле:
Packet Size = L2 + L3 + Payload, 

где:
L2 – размер заголовка Ethernet, байт,
L3 – сумма заголовков IP/UDP/RTP, байт,

Payload – размер генерируемого ко.деком пакета, бит.

Размер генерируемого кодеком пакета определяется по формуле:

Payload = V · N · TPDU, 

где:
V – скорость кодека, бит/с,
N – количество кадров в пакете,
TPDU – размер одного
речевого кадра, мс.

Количество генерируемых кодеком пакетов в секунду определим по формуле:

PPS = V / Payload 

Параметры стандарта G.729
Параметр
Значение
V
8
TPDU
10
N
2
L2
18
L3
40

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

Payload = 8000 · 0,01 · 2 = 160 бит;
PPS = 8000 / 160 = 50 пакетов/с;
Packet Size = 160 + 8 · (40+18) = 624 бит;
Voice Bandwidth = 50 · 624 = 31,2 кбит/с.

Полосу пропускания для обработки всех голосовых каналов можно определить по формуле:

Bandwidthi = (Voice Bandwidth + Signal Bandwidth) · Ni · 2,

где:
Ni – количество абонентов на узле,
Signal Bandwidth – полоса пере.дачи сигнализации одного вызова, кбит/с.

Трафик сигнализации требует пропускной способности в 0,2 кбит/с.
Произведем расчет полосы пропускания для обработки всех голосовых каналов по формуле:

Bandwidth = (31,2 + 0,2) · 30 · 2 = 1,884 кбит/c ≈ 1.9 Мбит/с;
Ну и под конец какая-нибудь таблица сравнения:
 
Вот такая заметка, выводы можно сделать самим



Стандарт G.703/G.704 - вроде рядом и вроде нет

Решил сделать памятку по МСЭ
На некоторых мультиплексорах на портах Е1 пишут G.703, а на других
G.704 и вдруг думаю забудут разницу между ними или не помнят, а то и
смогут подумать что производитель ошибся))

G.703 - это синхронный физический интерфейс 2 Мбит/с.

Посмотрим на пару картинок-выдержек из стандарта:

Правила кодирования:
 Параметры импульса сигнала:
Уровни и усиление сигнала, есть для любого сигнала и даже с расчетами, интегралами и всем-всем-всем сопутствующем для этого:



Дальше перешли к глаз-диаграмам STM-1, мы видели подобное только в универе на лабораторных, но вот теперь можно посмотреть для чего это и где в реальности используется и задается стандарты:


G.704 - описывает фрейминг на более высоком уровне, т.е. деление всего  потока 2048 Кбит/c на 32 канала по 64Кбит/с.
Если в общих чертах, то, по каким законам фреймировать поток  для передачи голоса, а нефреймированный использовать для передачи данных со скоростями более 64Кбит/с.

Правила кодирования битов:

Работа с мультифреймами:

А вот LDAP даже не ожидал увидеть здесь, описывают хорошо и по делу:



G.703, применительно к интерфейсу, - 2МБ(есть и другие скорося) канал передачи с данными неопределенной структуры.

G.703 - стандарт, который  определяет только физический уровень интерфейса.

G704 - это тот же "G703", но ОБЯЗАТЕЛЬНО нарезанный на 30 каналов по 64кбит + 2 служебных канала. G704 - это стандарт который определяет СТРУКТУРУ данных в канале.

среда, 20 марта 2019 г.

Что за 100.64.0.0/10


Появился интересный документ, о коем и близко не слышал раньше: RFC-6598:  «Зарезервированный IANA префикс IPv4 для общего адресного пространства»

 Выдержка из аннотации:

   В этом документе запрашивается выделение блока адресов IPv4 / 10
   используеться в качестве общего адресного пространства для удовлетворения потребностей
   Устройства класса NAT (CGN). Ожидается, что поставщики услуг
   будет использовать это общее адресное пространство для нумерации интерфейсов, к которым
   подключаются устройства CGN к оборудованию для помещений клиента (CPE).

   Общее адресное пространство отличается от частного адресного пространства RFC 1918
   тем что он предназначен для использования в сетях поставщика услуг.
   Тем не менее, он может быть использован в виде привтной сети, как сети из RFC 1918 
   частных адресных пространств на оборудовании маршрутизации, которое может сделать адрес
   трансляция через интерфейсы маршрутизатора, когда адреса идентичны
   на двух разных интерфейсах. Подробности приведены в тексте
 
  Ее ни в коем случае нельзя объявлять в мир, ресолвить в мир, 
  а также желательно фильтровать на входе из мира. Вышло это все в 2012 году, 
  но только сейчас докатилось до меня при включении клиента
 
  Обусловлен развитием Carrier Grade NAT для выпуска в Интернет миллионов клиентов,
  как понимаю, в пользу этого говорит вот такой прекрасный оборот: 

  «Ряд операторов заявили о необходимости специального назначения
   Распределение адресов IPv4 описано в этом документе. В течение
   Обсуждая, сообщество IETF продемонстрировало очень грубое согласие
   в пользу выделения.»
 
Все что было в документе про выбор подсети: 


Соображения IANA

IANA записала распределение IPv4 / 10 для использования в качестве общего ресурса Адресное пространство. Диапазон адресов общего адресного пространства - 100.64.0.0/10.
 

К сожалению, разборов и мат части почему и кк выбрали именно эту сеть и почему по /10  а не более кратная 2 сеть, я так и не узнал

Есть нюанс как в RIPE о ней говорят:

NetRange:       100.64.0.0 - 100.127.255.255
CIDR:           100.64.0.0/10
NetName:        SHARED-ADDRESS-SPACE-RFCTBD-IANA-RESERVED
NetHandle:      NET-100-64-0-0-1
Parent:         NET100 (NET-100-0-0-0-0)
NetType:        IANA Special Use
OriginAS:      
Organization:   Internet Assigned Numbers Authority (IANA)
RegDate:        2012-03-13
Updated:        2016-04-11

А вот как объявляются "серые" сети:

NetRange:       192.168.0.0 - 192.168.255.255
CIDR:           192.168.0.0/16
NetName:        PRIVATE-ADDRESS-CBLK-RFC1918-IANA-RESERVED
NetHandle:      NET-192-168-0-0-1
Parent:         NET192 (NET-192-0-0-0-0)
NetType:        IANA Special Use
OriginAS:      
Organization:   Internet Assigned Numbers Authority (IANA)
RegDate:        1994-03-15
Updated:        2013-08-30

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

К примеру: не запустилась циска на таком айпи, паблик её не указать т.к. она на внешнем адресе почти, но при это по топологии на серой за шлюзом клиента.

вторник, 19 марта 2019 г.

Робот трассировщик в Telegram

       Давно нашел и вот решил поделиться, часто таким нет смыла пользоваться, но интересное приложение, может быть интересно.

Выбираем локацию и любой ip из России:

     Можно примерно оценить задержки между странами и посмотреть на точки дебаркации трафика, для ознакомления как раз

Конец!

Таблица: про длины и волокна


Часто бывает - никак не вспомнить , какой ОМ на какую максимальную длину работает и на какой максимальной скорости. Собрали все в одну таблицу - пользуйтесь!

Подробнее: https://704ka.ru/blog/pro-dliny-i-volokna/


MySQL: памятка по сбросу пароля

Cвободная реляционная система управления базами данных. Разработку и поддержку MySQL осуществляет корпорация Oracle.

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

1) Смотрим версию

mysql --version

mysql  Ver 14.14 Distrib 5.7.25, for Linux (x86_64) using  EditLine wrapper

2)  Стопорим базу

sudo systemctl stop mysql

3) Запускаем без проверки привелегий и разрешений

sudo mysqld_safe --skip-grant-tables --skip-networking &

& - процесс запустится в фоне

4) Если вы видите ошибку, как у меня, то нашел подсказку:   
   mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists. 

  Делаем следующие команды:


   sudo mkdir -p /var/run/mysqld 
   sudo chown mysql:mysql /var/run/mysqld

5) Пробуем повторно:

sudo mysqld_safe --skip-grant-tables --skip-networking &

6) Подключаемся к базе:

mysql -u root

Выдаст что-то примерно такое:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.25-0ubuntu0.16.04.2 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.


7) Перегружаем таблицы привилегий

FLUSH PRIVILEGES;

8) Меняем пароль:

ALTER USER 'root'@'localhost' IDENTIFIED BY 'новый_пароль';

9) Заново перечитываем привелегии

FLUSH PRIVILEGES;

Если везде выдавало :
Query OK, 0 rows affected (0,00 sec)

То все отлично и выходим из БД

10) Перезапускаем сервер, последовательно выполняя команды:

sudo kill `sudo cat /var/run/mysqld/mysqld.pid`

sudo systemctl start mysql

11) Проверяем работу нового пароля:

mysql -u root

Конец!

понедельник, 18 марта 2019 г.

iperf: памятка по использованию

Моя любимая выдержка из WIKI:

Iperf — кроссплатформенная консольная клиент-серверная программа — генератор TCP и UDP трафика для тестирования пропускной способности сети.

Iperf3 — кроссплатформенная консольная клиент-серверная программа — генератор TCP, UDP и SCTP трафика для тестирования пропускной способности сети. Написана с нуля и не совместима с предыдущей реализацией, хотя и содержит часть кода предыдущей реализации.

Рабочий порт для iPerf — 5001, для iPerf3 — 5201

 Запускал самой простой командой(сервером будет ПК):

iperf -s

А вот на мобильно приложении немного больше указал(клиент):

Здесь тестим 60 секунд с 5 секундным интервалом
 Здесь прогоняем файл в 1 Гб:

Памятка по параметрам:

Общие для сервера и клиента:
 
Ключ Описание
-p Определить порт, на котором будет слушать сервер или отправлять запросы клиент
-f Формат отчетов — kmgKMG (Kbits, Mbits, KBytes, MBytes, ...)
-i Задать интервал, в течение которого выполняется одна проверка
-F Указать файл, из которого будут взяты входные данные для запуска
-A Степень нагрузки на процессор
-B Указать, через какой сетевой интерфейс работать
-V Детализированные сообщения в консоли
-J Вывод в формате json
--logfile Весь вывод в отдельный лог-файл
-d Режим отладки (много сообщений)
-v Показать версию программы
-h Вызвать справку по работе с программой  

Для сервера:
 
Ключ Описание
-s Запустить iPerf в режиме сервера
-D Запустить как демона (как службу)
-I Указать pid-файл
-1 Принять запрос от одного клиента и завершить работу

Для клиента:
 
Ключ Описание
-c Запустить iPerf в режиме клиента
-u Отправлять UDP-пакеты
-b Формат отчетов для bandwidth (средней скорости)
-t Количество секунд, в течение которых будет идти проверка скорости
-n Объем данных для проверки (применяется вместо времени -t)
-k Количество пакетов для проверки (вместо -t или -n)
-l Длина буфера записи/чтения
-P Число параллельных запросов
-R Обратный режим — сервер отправляет, клиент принимает
-w Размер сетевого окна
-C Установить алгоритм управления перегрузкой TCP
-M Задать максимальный размер MTU
-4 Работать только для IPv4
-6 Работать только для IPv6
-Z Использовать метод «нулевой копии» для отправки данных
-O Опустить первые n секунд
-T Задать префикс для каждой строки вывода

Если не можете пользоваться у себя сервером или нет возможности запустить по каким либо проблемам, то есть публичные сервера:

https://iperf.fr/iperf-servers.php#public-servers


Конец!

вторник, 12 марта 2019 г.

Linux: разница между iproute2 и ifconfig

IP-address можно в консоли посмотреть 2мя способами.
Через iproute2:

Cherkasov-VoIP:~$ ip addr show enp3s0

И Через ifconfig:

Cherkasov-VoIP:~$ ifconfig enp3s0

И вродебы все хорошо и есть выбор между утилитами и в одном дистрибутиве стоит один по дефолту, а в другом другой, а где-то и оба, чтобы не путаться, но наткнулся на такое:

Разницу в отображение IP-адресов все заметили?

Оказывается, что не смотря на возможность добавления IP-адреса обоими:

ip address add 192.168.1.100/24 brd + dev enp3s0
ifconfig enp3s0 inet up 192.168.1.100 netmask 255.255.255.0

Но!!!

ifconfig непосредственно не поддерживает несколько IP-адресов на одном сетевом интерфейсе (только в виде псевдонимов). Поэтому secondary - адрес в выводе ifconfig отображаться не будет - вот и разгадка феномена.

Узнал фишку, но не пользуюсь правда:

 Для реализации ifconfig - совместимого способа использования нескольких IP-адресов на одном сетевом интерфейсе следует в команде ip addr add использовать параметр label:

ip addr add 192.168.11.11/24 brd + dev eth1 label eth1:add

В Убунту правда, не смотря на метку, не отображался в терминале ifconfig,
а вот так метку видел хорошо:

ip addr show enp3s0

На этом все!

понедельник, 11 марта 2019 г.

M-200: пример ОКС-7


То что вычитал с их вики:

Конфигурирование сети ОКС 7 в станции М-200

Для конфигурирования сети ОКС 7 в станции М-200, необходимо определить следующие параметры:
  • узнать OPC станции и NI сети в которую будет включаться станция М-200;
  • узнать DPC всех станций с которыми будет взаимодействовать станция M-200;
  • узнать параметры сигнальных звеньев (номер сигнального временного интервала и SLC);
  • определить порядок нумерации идентификаторов CIC в каждом из трактов ИКМ во всех направлениях связи.

В АТС M-200 используются уникальные понятия необходимые для настройки ОКС 7:
  • CCS7ID – порядковый номер подсистемы ОКС 7 в станции М-200. Используется для логического разделения подсистем обслуживающих системы сигнализации с разными OPC. Диапазон значений 00-15.
  • LinkSetID – номер направления между OPC и DPC. Используется для логического разделения направлений к разным станциям. Диапазон значений 00-15.


Описание уровня MTP

Необходимо описать профиль сигнализации, в котором указать обязательные параметры: OPC, DPC, NI, sigLinks при этом:
  • формат OPC и DPC, десятичные число, диапазон значений 0.. 16383. Значение может быть в шестнадцатеричном виде (в конфигурации станции М-200 все значения указываются в десятичном виде).
  • формат NI, десятичное число, диапазон значений 0-3.
  • формат sigLinks строка вида: “m:p:t-s”, где
    • m – номер модуля,
    • p – номер PCM в модуле,
    • t – номер задействованного временного интервала,
    • s – значение SLC данного сигнального звена.


Описание уровня ISUP

Для каждого направления, необходимо описать профиль SIG_ISUP. Для этого необходимо строго назначить конкретному временному интервалу, конкретный CIC. Это осуществляется с помощью записи NUMBERA:
  • формат NUMBERA строка вида: = “=OPC-DPC-CCCC+”, где
    • OPC – OPC данного сигнального звена,
    • DPC – DPC данного сигнального звена,
    • CCCC – CIC закрепляемый за этим портом.

К примеру, так выглядит настроенный поток на уровне МТР:

MODULE [127]
    {
        TYPE = MODULE_MP  NAME = ""  PROFIL = 2

        PCM [1] { PROFIL = 3              // TYPE PCM = PCM_MTP
            PORT [2-30] { PROFIL = 4      // SIG = SIG_ISUP
                GROUP = 1
                NUMBERA = "=00722-00414-0034+"
            }
            PORT [31] { PROFIL = 5      // SIG = SIG_ISUP
                GROUP = 1
                NUMBERA = "=00722-00414-0063"
            }
        }

А теперь посмотрим на что ссылаются
Профили, вот здесь описываем OPC и DPC:

 PROFIL [3] { TYPE = PCM_MTP
        CRC4 = YES
        DPC = 414
        OPC = 722
        linksetID = 10
        networkIndicator = 3
        sigLinks = ( "127:32:1-0" "127:1:1-1" )
    }
    PROFIL [4] { TYPE = SIG_ISUP
        CalledPN_NatureOfAddressInd = 3
        CalledPN_NumberingPlanInd = 1
        CallingPN_NatureOfAddressInd = 3
        CallingPN_NumberingPlanInd = 1
        CallingPN_PresentationRestrictedInd = 0
        CallingPN_ScreeningInd = 3
        CallingPartyCategory = 10
    }

Группа, дающая привязку к маршруту:

GROUP [1] { ROUTE = 9 }

Маршрут:

 }
    ROUTE [9] { NAME = "to_radius"
        RECORD "4951234567" AON "4957654321" ERROR
        RECORD "4952799997" 27



А теперь памятка про направления, направления вешаем на профиль:

    DIR [1] { NAME = "cab-telephone" 18  }
    DIR [2] { NAME = "cisco" 12  }
    DIR [3] { NAME = "Sovintel"  }
    DIR [4] { NAME = "mera" 6  }
    DIR [5] { NAME = "huawei"  }
    DIR [6] { NAME = "Office" 3  }
    DIR [7] { NAME = "MTS"  }
    DIR [8] { NAME = "client" 10  }
    DIR [9] { NAME = "test-m200" 20  }


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

Так мы смотрим МТР:

Так смотрим ISUP:




Linux/UNIX: unixtimestamp - что заперевод, где играет и какая его роль?

         Сейчас, когда пишу, время у меня 1659086347 или  Fri Jul 29 2022 12:19:07 GMT+0300 (Москва, стандартное время)  Забегая вперед, спо...