Начиная с версии 3.14.5 в рамках ECSS-10 реализован механизм, позволяющий на уровне лицензии ограничивать услуги, доступные пользователям ECSS-10, а так же их количество.

Кроме того, для существующих заказчиков, сделана обратная совместимость, т.е. если на уровне лицензии не включено лицензирование услуг — то на ECSS-10 работа с услугами останется прежней. Данный механизм лицензирования услуг мы назвали «Лицензирование услуг на основе пакетов».  

Лицензионный пакет услуг (далее просто пакет услуг) — идентифицируется именем пакета, состоит из:

  • Cписка услуг, входящих в этот пакет;
  • Количества лицензий на услуги, входящие в этот пакет.

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

Одна лицензия ECSS-10 может содержать несколько лицензионных пакетов услуг. При этом, услуги в пакетах могут повторяться. «Лицензии услуг» изначально (после добавления лицензии) доступны всем абонентам софтсвича, без явной привязки к доменам. Но если администратору софтсвича необходимо явно выделить часть лицензий из лицензионного пакета услуг в определенный домен — он может это сделать через настройки «ограничений домена». В этом случае, выделенные лицензии смогут занимать только абоненты данного домена.

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

Тезисы, описывающие лицензирование услуг

  • Услуги лицензируются пакетами;
  • Разные лицензионные пакеты услуг могут включать в себя одни и те же услуги;
  • У каждого пакета услуг есть свое уникальное имя;
  • На уровне лицензии, пакет услуг состоит из:
    • Имени пакета;
    • Cписка имен услуг (которые входят в этот пакет);
    • Текстового описания пакета;
    • Количества лицензий.
  • Администратор системы может выделять лицензии пакета услуг определенным доменам — в этом случае лицензии будут закреплены за данным доменом;
  • Администратор системы может не выделять лицензии пакета услуг определенным доменам — в этом случае лицензии будут доступны во всех доменах;
  • Одному абоненту может быть назначено несколько лицензий из разных пакетов услуг (по одной лицензии из каждого пакета). При этом, абоненту будут доступны услуги из всех назначенных пакетов;
  • Лицензионные ограничения накладываются «поверх» текущих ограничений на услуги (access-list-ы услуг на домене, параметр enable на конкретной услуге абонента)

    Пример

    В лицензии доступна услуга A — абоненту она будет доступна только в том случае, если:

    • Услуга A доступна в домене;
    • Параметр enable для услуги 1 равен true для данного абонента.
  • Если лицензия на услуги будет «отозвана» у абонента — все услуги из этого пакета (если их нет в других лицензиях, доступных абоненту) будут недоступны;
  • Абоненту доступны только те услуги, которые:
    • Входят в пакеты услуг;
    • Назначены данному пользователю.

Команды управления лицензиями пакетов услуг

Выделить часть лицензий пакетов услуг на домен

Путь команды:

/domain/<DOMAIN>/properties/restrictions/set ss_package

Синтаксис:

domain/<DOMAIN>/properties/restrictions/set ss_package <LICENCE_SS_PACKAGE> <LICENCE_COUNT>

Параметры:

  • <DOMAIN> — имя домена;
  • <LICENCE_SS_PACKAGE> — имя лицензионного пакета услуг, который необходимо выделить на домен;
  • <LICENCE_COUNT> — количество выделяемых лицензий.

Пример:

domain/p.city/properties/restrictions/set ss_package ECSS-GEN 5
Restriction ss_package set to ECSS-GEN: 5.

domain/p.city/properties/restrictions/set ss_package ECSS-ADV 15
Error: New value for limit more than licence limit ss package ECSS-ADV on 5 counts.

domain/p.city/properties/restrictions/set ss_package ECSS-EMPTY 5
Command error: Package ECSS-EMPTY not found.

Просмотреть выделенные на домен пакеты услуг

Путь команды:

domain/<DOMAIN>/properties/restrictions/info

Синтаксис:

domain/<DOMAIN>/properties/restrictions/info

Параметры:

  • <DOMAIN> — имя домена;

Пример:

domain/p.city/properties/restrictions/info
┌────────────────────────────────┬──────────────┬────────────────────────────────────────────────────────────────┐
│          Restriction           │    Value     │                          Description                           │
├────────────────────────────────┼──────────────┼────────────────────────────────────────────────────────────────┤
...
│ss_package                      │ECSS-ADV+ : 8 │Count of licence from ss package in current domain              │
│                                │ECSS-ADV : 10 │                                                                │
│                                │ECSS-BAS+ : 10│                                                                │
│                                │ECSS-BAS : 10 │                                                                │
│                                │ECSS-GEN : 5  │                                                                │
...
└────────────────────────────────┴──────────────┴────────────────────────────────────────────────────────────────┘

Забрать часть лицензий пакетов услуг с определенного домена

Путь команды:

domain/<DOMAIN>/properties/restrictions/clean ss_package

Синтаксис:

domain/<DOMAIN>/properties/restrictions/clean ss_package <LICENCE_SS_PACKAGE>

Параметры:

  • <DOMAIN> — имя домена;
  • <LICENCE_SS_PACKAGE> — имя лицензионного пакета услуг, который необходимо забрать с домена

Пример:

domain/p.city/properties/restrictions/clean ss_package ECSS-GEN
Restriction ss_package was unset.

Выделение лицензии на пакет услуг абоненту

Путь команды:

/domain/<DOMAIN>/ss/licence/allocate

Синтаксис:

/domain/<DOMAIN>/ss/licence/allocate <ADDRESS_RANGE> <LICENCE_SS_PACKAGE> [--priority]

Параметры:

  • <DOMAIN> — имя домена;
  • <ADDRESS_RANGE> — номер/диапазон номеров абонента, на который выделяется пакет услуг;
  • <LICENCE_SS_PACKAGE> — имя лицензионного пакета услуг, на который выделяется лицензия;
  • --priority — в случае наличия флага --priority при деградации лицензии у абонента с данным флагом услуг будет блокироваться в последнюю очередь

Пример:

/domain/p.city/ss/licence/allocate 72{0-5} ECSS-ADV

Licence package ECSS-ADV successfully allocated.

Отозвать лицензии на пакет услуг у абонентов

Путь команды:

/domain/<DOMAIN>/ss/licence/free

Синтаксис:

/domain/<DOMAIN>/ss/licence/free <ADDRESS_RANGE> <LICENCE_SS_PACKAGE>

Параметры:

  • <DOMAIN> — имя домена;
  • <ADDRESS_RANGE> — номер/диапазон номеров абонента, на который выделяется пакет услуг;
  • <LICENCE_SS_PACKAGE> — имя лицензионного пакета услуг, на который выделяется лицензия;

Пример:

/domain/p.city/ss/licence/free 72{0-5} ECSS-ADV

Licence package ECSS-ADV successfully free on subscribers.

Просмотр распределенных/использованных лицензий на пакеты услуг

Путь команды:

/domain/<DOMAIN>/ss/limit

cluster/storage/<DS_CLUSTER>/ss/limit

Синтаксис:

/domain/<DOMAIN>/ss/limit [<OPTIONS>]

cluster/storage/<DS_CLUSTER>/ss/limit [<OPTIONS>]

Параметры:

  • <DOMAIN> — имя домена;
  • <DS_CLUSTER> — имя кластера DS;
  • <OPTIONS> :: SHOW-ALIASES | SORT-BY-TIME | SHOW-SS
    • SHOW-ALIASES — показывать абонентов, которым выделена данная лицензия (по умолчанию: false);
    • SORT-BY-TIME — сортировать абонентов по времени выделения услуг (по молчанию: false). Применяется только вместе с флагом --show-aliases.
    • SHOW-SS — показывать список услуг, которые входят в данный пакет (по умолчанию: false)

Пример выполнения команды для домена:

domain/p.city/ss/limit
┌─────────┬────────────┬──────────────────────────┐
│  Name   │    Used    │       Description        │
├─────────┼────────────┼──────────────────────────┤
│ECSS-GEN │2 / infinity│Стандартные услуги (РД 45)│
│ECSS-BAS │9 / 10      │Базовые услуги (РД 45)    │
│ECSS-BAS+│10 / 10     │Расширение базовых услуг  │
│ECSS-ADV │10 / 10     │Дополнительные услуги     │
│ECSS-ADV+│8 / 8       │Дополнительные услуги     │
└─────────┴────────────┴──────────────────────────┘
Legend:
  Used: UsedLicence / AvailableLicence

domain/p.city/ss/limit --show-aliases --show-ss
┌─────────┬────────────┬──────────────────────────┬───────┬─────────────────────────┐
│  Name   │    Used    │       Description        │Aliases│         SS List         │
├─────────┼────────────┼──────────────────────────┼───────┼─────────────────────────┤
│ECSS-GEN │2 / infinity│Стандартные услуги (РД 45)│    721│cc_agent                 │
│         │            │                          │    725│cfb                      │
│         │            │                          │       │cfnr                     │
│         │            │                          │       │cfos                     │
│         │            │                          │       │cfu                      │
│         │            │                          │       │chold                    │
│         │            │                          │       │clip                     │
│         │            │                          │       │cnip                     │
│         │            │                          │       │ctr                      │
│         │            │                          │       │cw                       │
│         │            │                          │       │direct_call              │
│         │            │                          │       │mcid                     │
│         │            │                          │       │qsig_cfb                 │
│         │            │                          │       │qsig_cfnr                │
│         │            │                          │       │qsig_cfu                 │
│         │            │                          │       │teleconference           │
│         │            │                          │       │teleconference_manager   │
│         │            │                          │       │tsmn_request             │
...
│ECSS-ADV+│8 / 8       │Дополнительные услуги     │720-727│assistant                │
│         │            │                          │       │avatar                   │
│         │            │                          │       │boss_group               │
│         │            │                          │       │cpip                     │
│         │            │                          │       │distinctive_picture      │
│         │            │                          │       │distinctive_ring         │
│         │            │                          │       │flexicall                │
│         │            │                          │       │fxo_trunk                │
│         │            │                          │       │intervention             │
│         │            │                          │       │introduce                │
│         │            │                          │       │message                  │
│         │            │                          │       │multicast_listen         │
│         │            │                          │       │multicast_page           │
│         │            │                          │       │personal_ivr             │
│         │            │                          │       │privacy                  │
│         │            │                          │       │remote_phone             │
│         │            │                          │       │remote_ring              │
│         │            │                          │       │smart_cancel             │
│         │            │                          │       │voice_page               │
│         │            │                          │       │voice_page_control       │
│         │            │                          │       │walkie_talkie            │
│         │            │                          │       │zone_page                │
└─────────┴────────────┴──────────────────────────┴───────┴─────────────────────────┘
Legend:
  Used: UsedLicence / AvailableLicence

Пример выполнения команды для кластера:

cluster/storage/ds1/ss/limit
┌─────────┬───────┬─────────────┬──────────────────────────┐
│  Name   │ Used  │   Domain    │       Description        │
│         │       │pre-allocated│                          │
├─────────┼───────┼─────────────┼──────────────────────────┤
│ECSS-GEN │3 / 15 │            5│Стандартные услуги (РД 45)│
│ECSS-BAS │9 / 15 │           10│Базовые услуги (РД 45)    │
│ECSS-BAS+│10 / 15│           10│Расширение базовых услуг  │
│ECSS-ADV │10 / 10│           10│Дополнительные услуги     │
│ECSS-ADV+│9 / 12 │           12│Дополнительные услуги     │
└─────────┴───────┴─────────────┴──────────────────────────┘
Legend:
  Used: UsedLicence / AvailableLicence

cluster/storage/ds1/ss/limit --show-aliases
┌─────────┬───────┬─────────────┬──────────────────────────┬────────┬────────┐
│  Name   │ Used  │   Domain    │       Description        │Aliases │Priority│
│         │       │pre-allocated│                          │        │Aliases │
├─────────┼───────┼─────────────┼──────────────────────────┼────────┼────────┤
│ECSS-GEN │3 / 15 │            5│Стандартные услуги (РД 45)│d.city: │        │
│         │       │             │                          │     800│        │
│         │       │             │                          │p.city: │        │
│         │       │             │                          │     721│        │
│         │       │             │                          │     725│        │
│ECSS-BAS │9 / 15 │           10│Базовые услуги (РД 45)    │p.city: │        │
│         │       │             │                          │ 721-729│        │
│ECSS-BAS+│10 / 15│           10│Расширение базовых услуг  │p.city: │        │
│         │       │             │                          │ 720-729│        │
│ECSS-ADV │10 / 10│           10│Дополнительные услуги     │p.city: │        │
│         │       │             │                          │ 720-729│        │
│ECSS-ADV+│9 / 12 │           12│Дополнительные услуги     │p.city: │d.city: │
│         │       │             │                          │ 720-727│     800│
└─────────┴───────┴─────────────┴──────────────────────────┴────────┴────────┘
Legend:
  Used: UsedLicence / AvailableLicence

Пример настройки услуг для абонента

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

antoniy@[ds1@ecss1#ECSS-D-MECHANIC]:/$ domain/p.city/ss/limit --show-ss
┌─────────┬────────────┬──────────────────────────┬─────────────────────────┐
│  Name   │    Used    │       Description        │         SS List         │
├─────────┼────────────┼──────────────────────────┼─────────────────────────┤
│ECSS-GEN │2 / infinity│Стандартные услуги (РД 45)│cc_agent                 │
│         │            │                          │cfb                      │
│         │            │                          │cfnr                     │
│         │            │                          │cfos                     │
│         │            │                          │cfu                      │
│         │            │                          │chold                    │
│         │            │                          │clip                     │
│         │            │                          │cnip                     │
│         │            │                          │ctr                      │
│         │            │                          │cw                       │
│         │            │                          │direct_call              │
│         │            │                          │mcid                     │
│         │            │                          │qsig_cfb                 │
│         │            │                          │qsig_cfnr                │
│         │            │                          │qsig_cfu                 │
│         │            │                          │teleconference           │
│         │            │                          │teleconference_manager   │
│         │            │                          │tsmn_request             │
│ECSS-BAS │9 / 10      │Базовые услуги (РД 45)    │3way                     │
│         │            │                          │cfnr_type2               │
│         │            │                          │cfu_type2                │
│         │            │                          │clir                     │
│         │            │                          │cliro                    │
│         │            │                          │dnd                      │
│         │            │                          │ml                       │
│         │            │                          │pickup                   │
│         │            │                          │redial                   │
└─────────┴────────────┴──────────────────────────┴─────────────────────────┘

Выделяем найденный пакет услуг абоненту

domain/p.city/ss/licence/allocate 725 ECSS-GEN
Licence package ECSS-GEN successfully allocated.

Теперь абонент может пользоваться любыми услугами в рамках пакета ECSS-GEN (в случае, если администратор домена разрешит (enable) пользоваться этими услугами)

Деградация лицензии

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

В рамках лицензирования пакетов услуг задача механизма по деградации лицензии узнать:

  • Какое количество лицензий на определенный пакет услуг предоставлено абонентам ECSS-10;
  • Какое количество лицензий на определенный пакет услуг доступно в рамках текущей лицензии.

Если количество лицензий, доступных в рамках текущей лицензии, меньше, чем количество лицензий, предоставленных абонентам ECSS-10, задача механизма — заблокировать лишние лицензии у части абонентов так, чтобы свести баланс в ноль (при этом, если в будущем лицензии на пакеты услуг снова появятся — блокировка будет снята).

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

Пример
  1. Компания приобрела пакет услуги A на 10 лицензий;
  2. После чего приобрела еще 10 дополнительных временных лицензий услуги А;
  3. Администратор системы назначил лицензии только 15-ти абонентам;
  4. Дополнительная лицензия истекла — услуга А блокируется у 5 последних абонентов, которым она была назначена;
  5. После покупки недостающих лицензий для абонентов — услуга автоматически становится доступной.

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

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

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

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