| forum.bitel.ru http://forum.bitel.ru/  | 
|
| Не вызывается connectionModify при включении сервиса http://forum.bitel.ru/viewtopic.php?f=44&t=7103  | 
	Страница 1 из 1 | 
| Автор: | vkulakov [ 13 авг 2012, 20:44 ] | 
| Заголовок сообщения: | Не вызывается connectionModify при включении сервиса | 
Если отключить сервис на договоре при активной сессии, то происходит отправка CoA-запросов на Cisco, после чего активные опции у сессии отключаются и включаются фейковые, которые перечислены в параметре sa.radius.service.disable. При этом в логах видно, что происходит вызов метода connectionModify. Если же попытаться включить сервис на договоре, то в логах виден только вызов метода serviceModify без connectionModify. Соответственно, на сессию не вешаются "нормальные" опции сервиса и, грубо говоря, интернета абонент не получает. Это так и задумано, или всё-таки это ошибка? По логике сервис должен как включаться, так и выключаться нормально (с изменениями на cisco). Или это регулируется какими-то опциями? P. S. Речь идёт про Cisco ISG. Сессия во время экспериментов не разрывается.  | 
	|
| Автор: | Amir [ 14 авг 2012, 15:33 ] | 
| Заголовок сообщения: | Re: Не вызывается connectionModify при включении сервиса | 
Цитата: после чего активные опции у сессии отключаются и включаются фейковые, которые перечислены в параметре 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 ); } }  | 
	|
| Автор: | vkulakov [ 14 авг 2012, 17:06 ] | 
| Заголовок сообщения: | Re: Не вызывается connectionModify при включении сервиса | 
Сейчас обнаружил следующее: В файле 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 назначен обработчиком процессора протокола.  | 
	|
| Автор: | Amir [ 14 авг 2012, 17:32 ] | 
| Заголовок сообщения: | Re: Не вызывается connectionModify при включении сервиса | 
Да, я перепутал, должен быть radius.serviceName.disable=. Именно по этому параметру определяется текущее состояние, а не по sa.radius.service.disable (по этому параметру выдаются сервисы в состоянии отключен, но определение текущего состояния - отдельная задача, т.к. вариантов может быть несколько). Исправил в соседней ветке.  | 
	|
| Автор: | vkulakov [ 14 авг 2012, 17:45 ] | 
| Заголовок сообщения: | Re: Не вызывается connectionModify при включении сервиса | 
Поправил конфиг. Теперь при ручном отключении сервиса в биллинге в логах вижу State is disable. Только не понятно, какое это имеет отношение к проблеме? State is disable/enable я могу увидеть только в том случае, если начинается/заканчивается аккаунтинг для disabled-сессий. Но проблема в том, что при отключении сервиса вызывается connectionModify и стартуют disabled-сессии, а при обратном включении сервиса connectionModify не вызывается, соответственно, CoA-запрос не посылается и disabled-сессии не останавливаются. Т. е. State is enable я принципиально не могу увидеть. Как сделать, чтобы при включении сервиса вызывался метод connectionModify?  | 
	|
| Автор: | Amir [ 14 авг 2012, 17:52 ] | 
| Заголовок сообщения: | Re: Не вызывается connectionModify при включении сервиса | 
Основная проблема была в том, что Accounting не знал, что сессия в disable режиме, т.е. когда вы включали сервис, Accounting думал, что сессия уже и так включена, поэтому ничего с ней не делал. В договоре у сессии состояние отключена? Может быть не дождались? За включение отключенных сессий отвечает Код: # Трекер (обработка сессий без наработки): 
		
		# пауза между заданиями трекинга accounting.worker.1.tracking.1.delay=20 # максимальное количество проверенных соединений за задание accounting.worker.1.tracking.1.batchSize=100  | 
	|
| Автор: | Amir [ 14 авг 2012, 18:04 ] | 
| Заголовок сообщения: | Re: Не вызывается connectionModify при включении сервиса | 
И radius.disable.pattern.attributes= не указан в конфиге? В текущем случае он точно не нужен, будет только мешать.  | 
	|
| Автор: | vkulakov [ 14 авг 2012, 19:16 ] | 
| Заголовок сообщения: | Re: Не вызывается connectionModify при включении сервиса | 
Параметр radius.disable.pattern.attributes не нашёл, зато нашёл radius.disable.attributes, который безжалостно закомментировал. Также добавил следующий параметр: Код: # Нужно ли посылать CoA при переводе из disable в enable (при withoutBreak=false) sa.radius.connection.coa.onEnable=1 После включения onEnable всё заработало как положено.  | 
	|
| Автор: | vkulakov [ 14 авг 2012, 19:20 ] | 
| Заголовок сообщения: | Re: Не вызывается connectionModify при включении сервиса | 
Ещё заметил ошибку в классе 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 ) ); }  | 
	|
| Страница 1 из 1 | Часовой пояс: UTC + 5 часов [ Летнее время ] | 
| Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/  | 
|