BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 10 май 2024, 20:28

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
СообщениеДобавлено: 13 авг 2012, 20:44 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Если отключить сервис на договоре при активной сессии, то происходит отправка CoA-запросов на Cisco, после чего активные опции у сессии отключаются и включаются фейковые, которые перечислены в параметре sa.radius.service.disable. При этом в логах видно, что происходит вызов метода connectionModify.
Если же попытаться включить сервис на договоре, то в логах виден только вызов метода serviceModify без connectionModify. Соответственно, на сессию не вешаются "нормальные" опции сервиса и, грубо говоря, интернета абонент не получает.

Это так и задумано, или всё-таки это ошибка? По логике сервис должен как включаться, так и выключаться нормально (с изменениями на cisco). Или это регулируется какими-то опциями?

P. S. Речь идёт про Cisco ISG. Сессия во время экспериментов не разрывается.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 авг 2012, 15:33 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Цитата:
после чего активные опции у сессии отключаются и включаются фейковые, которые перечислены в параметре sa.radius.service.disable
Т.е. стартует сервисная сессия с именем сервиса, который есть в sa.radius.service.disable?
ISGProtocolHandler прописан, как обработчик процессора протокола? Он должен в логах написать
Код:
State is disable (from start disable service)
State is enable (from stop disable service)

Код:
         // если указан сервис, при котором доступ ограничен - проверяем, не его ли это аккаунтинг,
         // и, если это так, переключаем состояние соединения
         if( disableServiceNames != null && disableServiceNames.contains( serviceName ) )
         {
            // start или update
            if( acctStatusType == 1 || acctStatusType == 3 )
            {
               logger.debug( "State is disable (from start disable service)" );
               request.setOption( InetRadiusProcessor.DEVICE_STATE, InetServ.STATE_DISABLE );
            }
            else
            {
               logger.debug( "State is enable (from stop disable service)" );
               request.setOption( InetRadiusProcessor.DEVICE_STATE, InetServ.STATE_ENABLE );
            }
         }


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 авг 2012, 17:06 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Сейчас обнаружил следующее:
В файле ISGPPPoEServiceActivator есть строчка
Код:
List<String> disableServiceNames = Utils.toList( deviceConfig.get( "sa.radius.service.disable", deviceConfig.get( "radius.serviceName.disable", "" ) ) );// INET_FAKE

А в файле ISGProtocolHandler -
Код:
List<String> disableServiceNames = Utils.toList( deviceConfig.get( "radius.serviceName.disable", "" ) );// INET_FAKE

В конфиге у меня
Код:
sa.radius.service.disable=PORTAL,REDIRECT

В результате при вызове функции preprocessAccountingRequest disableServiceNames всегда null! Эт чё за хрень? В общем в логах я принципиально не увижу State is disable/State is enable. Должна быть опция radius.service.disable? Сейчас буду менять.

Amir писал(а):
Цитата:
после чего активные опции у сессии отключаются и включаются фейковые, которые перечислены в параметре sa.radius.service.disable
Т.е. стартует сервисная сессия с именем сервиса, который есть в sa.radius.service.disable?

Да, при ручном отключении сервиса в клиенте стартуют сессии, перечисленные в опции sa.radius.service.disable

ISGProtocolHandler назначен обработчиком процессора протокола.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 авг 2012, 17:32 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Да, я перепутал, должен быть radius.serviceName.disable=. Именно по этому параметру определяется текущее состояние, а не по sa.radius.service.disable (по этому параметру выдаются сервисы в состоянии отключен, но определение текущего состояния - отдельная задача, т.к. вариантов может быть несколько). Исправил в соседней ветке.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 авг 2012, 17:45 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Поправил конфиг. Теперь при ручном отключении сервиса в биллинге в логах вижу State is disable. Только не понятно, какое это имеет отношение к проблеме? State is disable/enable я могу увидеть только в том случае, если начинается/заканчивается аккаунтинг для disabled-сессий. Но проблема в том, что при отключении сервиса вызывается connectionModify и стартуют disabled-сессии, а при обратном включении сервиса connectionModify не вызывается, соответственно, CoA-запрос не посылается и disabled-сессии не останавливаются. Т. е. State is enable я принципиально не могу увидеть. Как сделать, чтобы при включении сервиса вызывался метод connectionModify?

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 авг 2012, 17:52 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Основная проблема была в том, что Accounting не знал, что сессия в disable режиме, т.е. когда вы включали сервис, Accounting думал, что сессия уже и так включена, поэтому ничего с ней не делал.
В договоре у сессии состояние отключена?
Может быть не дождались? За включение отключенных сессий отвечает
Код:
# Трекер (обработка сессий без наработки):
# пауза между заданиями трекинга
accounting.worker.1.tracking.1.delay=20
# максимальное количество проверенных соединений за задание
accounting.worker.1.tracking.1.batchSize=100


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 авг 2012, 18:04 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
И radius.disable.pattern.attributes= не указан в конфиге? В текущем случае он точно не нужен, будет только мешать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 авг 2012, 19:16 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Параметр radius.disable.pattern.attributes не нашёл, зато нашёл radius.disable.attributes, который безжалостно закомментировал.
Также добавил следующий параметр:
Код:
# Нужно ли посылать CoA при переводе из disable в enable (при withoutBreak=false)
sa.radius.connection.coa.onEnable=1

После включения onEnable всё заработало как положено.

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 14 авг 2012, 19:20 
Не в сети
Клиент

Зарегистрирован: 07 мар 2012, 15:02
Сообщения: 932
Откуда: Воронеж
Карма: 35
Ещё заметил ошибку в классе ISGServiceActivator:
Код:
if( e.getOldState() == InetServ.STATE_DISABLE )
{
   if( !withoutBreak )
   {
      // убрать из DHCP, чтобы выдало NaK
      EventProcessor.getInstance().request( new InetConnectionManager.ConnectionRemoveEvent( connection ) );
      if( !coaOnEnable )
      {
         return null;
      }
   }
         
   // устанавливаем флаг, что нужно будет поменять состояние соединения в базе
   if( needConnectionStateModify )
   {
      e.setConnectionStateModified( true );
   }

   // отключаем disable сервис и включаем активные опции
-->   return sendCommands( connection, optionsToServiceNames( removeOptions, disableServiceNames ), optionsToServiceNames( addOptions, null ) );
}


Похоже, что должно быть так:
Код:
if( e.getOldState() == InetServ.STATE_DISABLE )
{
   if( !withoutBreak )
   {
      // убрать из DHCP, чтобы выдало NaK
      EventProcessor.getInstance().request( new InetConnectionManager.ConnectionRemoveEvent( connection ) );
      if( !coaOnEnable )
      {
         return null;
      }
   }
         
   // устанавливаем флаг, что нужно будет поменять состояние соединения в базе
   if( needConnectionStateModify )
   {
      e.setConnectionStateModified( true );
   }

   // отключаем disable сервис и включаем активные опции
-->   return sendCommands( connection, optionsToServiceNames( null, disableServiceNames ), optionsToServiceNames( e.getNewOptions(), null ) );
}

_________________

Клиент: вер. 6.2.873 / 04.12.2017 19:38:11
os: Windows 7; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_65
Сервер: вер. 6.2.1202 / 04.12.2017 19:39:21
os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_91


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.057s | 38 Queries | GZIP : On ]