BiTel

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

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




Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу Пред.  1, 2
Автор Сообщение
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 27 ноя 2012, 17:03 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Выложили обновление.
В конфигурации устройства/типа устройства
Код:
radius.inetOption.template=Speed=$speed
radius.inetOption.1.template=Title=$optionTitle
radius.inetOption.1.local.template=
В конфигурации опции
Код:
speed=1000
myString={@optionTitle}
, конфигурация опций наследуется.

Для изменения логики выдачи обработчик активации сервисов должен имплиментировать интерфейс ru.bitel.bgbilling.modules.inet.radius.RadiusAccessRequestHandler, метод addResponseAttributes должен возвращать true, чтобы не работала стандартная выдача.
В динамическом классе AbstractRadiusProtocolHandler есть реализация выдачи, идентичная стандартной, но этот метод не вызывается, т.к. класс не имплиментирует интерфейс RadiusAccessRequestHandler.

Также:
InetOptionRuntimeMap
InetOptionRuntime


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 28 ноя 2012, 08:46 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Спасибо, сразу поймал ошибку, отписался в хелпдеске.

Ещё по конфигу устройств - неплохо бы вести где-то документацию по возможным параметрам конфигурации устройств: параметры конфига для RadiusProcessor, параметры для конкретных ServiceActivator-ов и т.п.
На wiki есть примеры конфигов в описаниях решений, но эта информация быстро устаревает.
Хотя бы в javadoc к соответствующим классам описывать все параметры которые они используют.
Ну и сводный список конфигов устройства.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 28 ноя 2012, 08:49 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
..и типов устройств, конечно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 28 ноя 2012, 12:10 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Прекрасно же!

Изображение

Осталось только, чтобы оно заработало :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 28 ноя 2012, 13:35 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Придумал ещё одно применение для RadiusAccessRequestHandler - выдача атрибутов сервисов Cisco ISG
Сейчас, чтобы авторизовать сервисы ISG, нужно заводить служебный договор, где для каждого сервиса ISG создавать сервис (логин) Inet и вешать ему соответствующий набор атрибутов.
Из wiki:
Цитата:
Сервисы типа ISG описание сервиса добавляются на один договор и используются для передачи ISG параметров конкретного ISG сервиса.

(c) http://wiki.bgbilling.ru/index.php/Cisc ... 1%80%D0%B0

Договор нам всё равно понадобится, только сервис можно завести всего один, в предобработке авторизации подменять username, сохранять его в опцию радиус-пакета, а в addResponseAttributes подставлять нужные атрибуты для соответствующего сервиса.

Попробую сегодня-завтра написать код активатора.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 28 ноя 2012, 14:54 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Цитата:
Спасибо, сразу поймал ошибку, отписался в хелпдеске.
Выложили обновление.
Кстати, значение параметра, который будет потом использован в другом параметре сейчас не обязательно начинать с @.
{@param} можно указать любой параметр из конфига.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 29 ноя 2012, 13:48 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Amir писал(а):
Для изменения логики выдачи обработчик активации сервисов должен имплиментировать интерфейс ru.bitel.bgbilling.modules.inet.radius.RadiusAccessRequestHandler

Только не обработчик активации сервисов, а protocol handler :\


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 03 дек 2012, 06:52 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Проверил новые шаблоны:
1. Если параметр не определён, пишет null в строку. Лучше, чтобы было пусто. Или так и оставлять в виде шаблона.
2. Параметры из конфигов опций подставляются только в пределах одной опции. Т.е. в случае из картинки выше
параметры @turbo.timeout.1h и т.п. не определятся для дочерних опций. Если задать без '@' - то же самое.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 03 дек 2012, 14:44 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Написал свои классы для Cisco PPPoE + ISG:

ISGServiceActivator
ISGProtocolHandler
ISGServiceAuthProtocolHandler

Копипаста у Битела, с доработками:
* ISGServiceActivator:
- соответствие "опция - сервис ISG" берётся из optionRadiusAttributesMap, чтобы работали новые шаблоны атрибутов
- в соответствие "опция - сервис ISG" добавлена зависимость от realm-а
- убрано всё, что касается DHCP
* ISGProtocolHandler:
- убрано всё, что касается DHCP
* ISGServiceAuthProtocolHandler
- класс для выдачи атрибутов ISG-сервисам. Используется с отдельным типом устройства и отдельным Access-сервером
- на служебном договоре заводится всего 1 служебный логин, с которого выдаются параметры для _всех_ сервисов ISG через скрипты предобработки. Радиус-атрибуты берутся из опций Inet по совпадению имени опции и имени сервиса.


Могу выложить, если кому надо :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 04 дек 2012, 16:23 
Не в сети
Разработчик
Аватара пользователя

Зарегистрирован: 19 дек 2006, 21:04
Сообщения: 5970
Карма: 256
Цитата:
Проверил новые шаблоны:
1. Если параметр не определён, пишет null в строку. Лучше, чтобы было пусто. Или так и оставлять в виде шаблона.
2. Параметры из конфигов опций подставляются только в пределах одной опции. Т.е. в случае из картинки выше
параметры @turbo.timeout.1h и т.п. не определятся для дочерних опций. Если задать без '@' - то же самое.
Выложили обновление.

Цитата:
Могу выложить, если кому надо :)
Может на wiki? :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 05 дек 2012, 08:14 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Работает!
Изображение

На вики попозже выложу, когда введём в эксплуатацию - в процессе всё ещё может измениться.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 24 июл 2013, 12:51 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
Я думаю, разработчикам есть смысл запилить это у себя, т.к. CoA с сервисами, заданными в виде
radius.inetOption.1.template=cisco-SSG-Account-Info=A$optionTitle в стандартном ISGServiceActivator не работают:

Cromeshnic писал(а):
Копипаста у Битела, с доработками:
* ISGServiceActivator:
- соответствие "опция - сервис ISG" берётся из optionRadiusAttributesMap, чтобы работали новые шаблоны атрибутов
- в соответствие "опция - сервис ISG" добавлена зависимость от realm-а
- убрано всё, что касается DHCP


Вот мой ISGServiceActivator:

Код:
package ru.dsi.bgbilling.modules.inet.dyn.device.cisco;

import org.apache.log4j.Logger;
import ru.bitel.bgbilling.kernel.network.radius.RadiusAttribute;
import ru.bitel.bgbilling.kernel.network.radius.RadiusAttributeSet;
import ru.bitel.bgbilling.kernel.network.radius.RadiusPacket;
import ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivator;
import ru.bitel.bgbilling.modules.inet.access.sa.ServiceActivatorEvent;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetConnection;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDevice;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetDeviceType;
import ru.bitel.bgbilling.modules.inet.api.common.bean.InetServ;
import ru.bitel.bgbilling.modules.inet.dyn.device.radius.AbstractRadiusServiceActivator;
import ru.bitel.bgbilling.modules.inet.runtime.InetOptionRuntimeMap;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.ParameterMap;
import ru.bitel.common.Utils;

import java.util.*;

/**
 * Конфигурация устройства:
 * sa.radius.connection.coa.mode = 1
 *      режим отправки CoA:
 *          0 - отправка в атрибуте cisco-SSG-Command-Code в одном пакете
 *          1 - (default) отправка в атрибуте cisco-SSG-Command-Code по отдельному пакету на сервис
 *          2 - отправка в атрибуте cisco-avpair="subscriber:command=deactivate-service"
 *
 * sa.radius.service.disable =
 *      имена сервисов, при котором доступ отключен
 *      отправляются в режиме Reject-To-Accept
 *      по-умолчанию не указано
 *
 * sa.radius.connection.close.mode = 2
 *      что делать для закрытия соединения:
 *          1 - ничего не делать
 *          2 - (default) посылаем PoD
 *          3 - посылаем subscriber:command=account-logoff
 *
 * sa.radius.connection.close.disableServices = 0
 *      отключать ли сервисы ISG при закрытии
 *          0 - (default) не отключать
 *          1 - отключать (посылаем CoA на отключение всех сервисов перед тем как закрыть соединение по sa.radius.connection.close.mode)
 */
public class ISGServiceActivator
        extends AbstractRadiusServiceActivator
        implements ServiceActivator
{
    private static final Logger logger = Logger.getLogger( ISGServiceActivator.class );

    /**
     * per-realm:
     *      код опции -> набор сервисов ISG
     */
    protected Map<String,Map<Integer, Set<String>>> optionISGServiceMap = new HashMap<String,Map<Integer, Set<String>>>();

    /**
     * имя(имена) сервиса, при котором доступ отключен.
     */
    protected Set<String> disableServiceNames;

    /**
     * Отправка в атрибуте cisco-SSG-Command-Code в одном пакете
     */
    protected static final int COA_MODE_SSG_COMMAND_PACKET = 0;

    /**
     * Отправка в атрибуте cisco-SSG-Command-Code по отдельному пакету на сервис
     */
    protected static final int COA_MODE_SSG_COMMAND = 1;

    /**
     * Отправка в атрибуте cisco-avpair="subscriber:command=deactivate-service"
     */
    protected static final int COA_MODE_SUBSCR_COMMAND = 2;

    /**
     * Режим отправки команд
     */
    protected int coaMode;

    @Deprecated
    protected static final int CLOSE_MODE_POD_DEPRECATED = 0;

    protected static final int CLOSE_MODE_NONE = 1;
    protected static final int CLOSE_MODE_POD = 2;
    protected static final int CLOSE_MODE_SUBSCR_COMMAND = 3;

    protected int closeMode;
    protected boolean disableServicesOnClose;

    public ISGServiceActivator()
    {
        super( null, false, "Acct-Session-Id", false );
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Object init( Setup setup, int moduleId, InetDevice device, InetDeviceType deviceType, ParameterMap deviceConfig )
            throws Exception
    {
        super.init( setup, moduleId, device, deviceType, deviceConfig );

        this.coaMode = deviceConfig.getInt( "sa.radius.connection.coa.mode", deviceConfig.getInt( "radius.coa.mode", deviceConfig.getInt( "coa.mode", COA_MODE_SSG_COMMAND ) ) );

        //вендор атрибута cisco-SSG-Account-Info (9)
        int ciscoSSGAccountInfo_attribute_vendor=9;
        //id атрибута cisco-SSG-Account-Info (250)
        int ciscoSSGAccountInfo_attribute_id=250;

        Map<Integer, Set<String>> map;
        Set<String> set;
        List<RadiusAttribute<?>> raList;
        InetOptionRuntimeMap inetOptionRuntimeMap = InetOptionRuntimeMap.getInstance(moduleId);
        // определение сервисов на каждой из опций
        for(Map.Entry<String, Map<Integer, RadiusAttributeSet>> e_realm : this.optionRadiusAttributesMap.getRealmMap().entrySet()){

            map = this.optionISGServiceMap.get(e_realm.getKey());
            if(null==map){
                map = new HashMap<Integer, Set<String>>();
                this.optionISGServiceMap.put(e_realm.getKey(), map);
            }
            //Перебираем опции в realm-е
            for(Map.Entry<Integer, RadiusAttributeSet> e_option : e_realm.getValue().entrySet()){
                logger.info("option = "+inetOptionRuntimeMap.get(e_option.getKey()).title+"("+e_option.getKey()+"), realm = "+e_realm.getKey()+", ra = "+e_option.getValue());
                set = null;
                raList = e_option.getValue().getAttributes(ciscoSSGAccountInfo_attribute_vendor, ciscoSSGAccountInfo_attribute_id);
                if(raList!=null){
                    for(RadiusAttribute<?> attr : raList){
                        if(null==set){
                            set = new HashSet<String>();
                        }
                        //вырезаем из атрибута cisco-SSG-Account-Info=ASERVICENAME имя сервиса SERVICENAME
                        set.add(attr.getValue().toString().substring(1));
                    }
                    if(set!=null && set.size()>0){
                        map.put(e_option.getKey(), set);
                    }
                }
            }
        }

        // сервис(ы), отправляемый в режиме Reject-To-Accept
        List<String> disableServiceNames = Utils.toList( deviceConfig.get( "sa.radius.service.disable", deviceConfig.get( "radius.serviceName.disable", "" ) ) );// INET_FAKE
        if( disableServiceNames.size() > 0 )
        {
            this.disableServiceNames = Collections.newSetFromMap( new LinkedHashMap<String, Boolean>() );
            this.disableServiceNames.addAll( disableServiceNames );
        }
        else
        {
            this.disableServiceNames = null;
        }

        logger.info( "Disable services: " + disableServiceNames );

        this.closeMode = deviceConfig.getInt( "sa.radius.connection.close.mode", CLOSE_MODE_POD );
        this.disableServicesOnClose = deviceConfig.getInt( "sa.radius.connection.close.disableServices", 0 ) > 0;

        return null;
    }

    /**
     *
     * {@inheritDoc}
     */
    @Override
    public Object connectionModify( ServiceActivatorEvent e )//TODO добавить timeout, чтобы не отправлять слишком быстро. Дожидаться ответов например.
            throws Exception
    {
        logger.info( "Connection modify: oldState: " + e.getOldState() + "; newState: " + e.getNewState() + "; oldOptionSet: " + e.getOldOptions() + "; newOptionSet: " + e.getNewOptions() );

        final InetConnection connection = e.getConnection();

        if( e.getNewState() == InetServ.STATE_DISABLE )
        {
            if( !withoutBreak )
            {
                return connectionClose( e );
            }

            // устанавливаем флаг, что нужно будет поменять состояние соединения в базе
            if( needConnectionStateModify )
            {
                e.setConnectionStateModified( true );
            }

            return sendCommands( connection, optionsToServiceNames(e.getRealm(), e.getOldOptions()), disableServiceNames );
        }

        if( e.getOldState() == InetServ.STATE_DISABLE )
        {
            if( !withoutBreak )
            {
                return connectionClose( e );
            }

            // устанавливаем флаг, что нужно будет поменять состояние соединения в базе
            if( needConnectionStateModify )
            {
                e.setConnectionStateModified( true );
            }

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

        Collection<Integer> removeOptions = e.getOptionsToRemove();
        Collection<Integer> addOptions = e.getOptionsToAdd();

        return sendCommands( connection, optionsToServiceNames(e.getRealm(), removeOptions), optionsToServiceNames(e.getRealm(), addOptions ) );
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public Object connectionClose( ServiceActivatorEvent e )
            throws Exception
    {
        logger.info( "Connection close" );

        Object result;

        final InetConnection connection = e.getConnection();

        if( disableServicesOnClose )
        {
            result = sendCommands( connection, optionsToServiceNames(e.getRealm(), e.getOldOptions()), disableServiceNames );
        }
        else
        {
            result = null;
        }

        switch( closeMode )
        {
            default:
            case CLOSE_MODE_NONE:
            {
                break;
            }

            case CLOSE_MODE_POD_DEPRECATED:
            case CLOSE_MODE_POD:
            {
                RadiusPacket request = radiusClient.createDisconnectRequest();
                prepareRequest( request, connection );

                logger.info( "Send PoD: \n" + request );
                result = radiusClient.sendAsync( request );

                break;
            }

            case CLOSE_MODE_SUBSCR_COMMAND:
            {
                logger.info( "Connection close (logoff)" );

                RadiusPacket packet = radiusClient.createModifyRequest();
                prepareRequest( packet, connection );

                packet.addAttribute( new RadiusAttribute.RadiusAttributeString( 9, 1, "subscriber:command=account-logoff" ) );

                logger.info( "Send logoff CoA:\n" + packet );
                result = radiusClient.sendAsync( packet );

                break;
            }
        }

        return result;
    }

    protected Collection<String> optionsToServiceNames(String realm, final Collection<Integer> options)//, final Collection<String> serviceNames )
    {
        if( options == null || options.size() == 0 )
        {
            return null;
        }

        if(null==realm || "".equals(realm)){
            realm = "default";
        }

        final Set<String> result = Collections.newSetFromMap( new LinkedHashMap<String, Boolean>( options.size() + 2 ) );

        for( Integer option : options )
        {
            Set<String> serviceNames = this.optionISGServiceMap.get(realm).get(option);
            if( serviceNames == null ){
                serviceNames = this.optionISGServiceMap.get("default").get(option);
            }
            if( serviceNames != null )
            {
                result.addAll( serviceNames );
            }
        }

        return result;
    }

    /**
     * Отправка команд на деактивацию и активацию сервисов
     * @param connection - InetConnection
     * @param serviceNamesDeactivate - список сервисов, которые нужно деактивировать
     * @param serviceNamesActivate - список сервисов, которые нужно активировать
     * @return
     * @throws Exception
     */
    protected Object sendCommands( final InetConnection connection, final Collection<String> serviceNamesDeactivate, final Collection<String> serviceNamesActivate )
            throws Exception
    {
        Object result = null;

        if(logger.isInfoEnabled()){
            logger.info("Sending commands to deactivate services (mode="+this.coaMode+"): ["+Utils.toString(serviceNamesDeactivate)+"]");
            logger.info("Sending commands to activate services (mode="+this.coaMode+"): ["+Utils.toString(serviceNamesActivate)+"]");
        }

        switch( coaMode )
        {
            case COA_MODE_SSG_COMMAND_PACKET:
            {
                if( serviceNamesDeactivate != null && serviceNamesDeactivate.size() > 0 )
                {
                    RadiusPacket packet = radiusClient.createModifyRequest();
                    prepareRequest( packet, connection );

                    for( String serviceName : serviceNamesDeactivate )
                    {
                        String value = "\\0xc" + serviceName;
                        // добавление cisco-SSG-Command-Code
                        packet.addAttribute( new RadiusAttribute.RadiusAttributeString( 9, 252, value ) );
                    }

                    result = radiusClient.sendAsync( packet );
                    //logger.info( "Send deactivate services CoA:\n" + packet );
                }

                if( serviceNamesActivate != null && serviceNamesActivate.size() > 0 )
                {
                    RadiusPacket packet = radiusClient.createModifyRequest();
                    prepareRequest( packet, connection );

                    for( String serviceName : serviceNamesActivate )
                    {
                        String value = "\\0xb" + serviceName;
                        // добавление cisco-SSG-Command-Code
                        packet.addAttribute( new RadiusAttribute.RadiusAttributeString( 9, 252, value ) );
                    }

                    result = radiusClient.sendAsync( packet );
                    //logger.info( "Send activate services CoA:\n" + packet );
                }

                break;
            }

            case COA_MODE_SSG_COMMAND:
            {
                if( serviceNamesDeactivate != null && serviceNamesDeactivate.size() > 0 )
                {
                    for( String serviceName : serviceNamesDeactivate )
                    {
                        RadiusPacket packet = radiusClient.createModifyRequest();
                        prepareRequest( packet, connection );

                        String value = "\\0xc" + serviceName;
                        // добавление cisco-SSG-Command-Code
                        packet.addAttribute( new RadiusAttribute.RadiusAttributeString( 9, 252, value ) );

                        //logger.info( "Send deactivate service CoA:\n" + packet );
                        result = radiusClient.sendAsync( packet );
                    }
                }

                if( serviceNamesActivate != null && serviceNamesActivate.size() > 0 )
                {
                    for( String serviceName : serviceNamesActivate )
                    {
                        RadiusPacket packet = radiusClient.createModifyRequest();
                        prepareRequest( packet, connection );

                        String value = "\\0xb" + serviceName;
                        // добавление cisco-SSG-Command-Code
                        packet.addAttribute( new RadiusAttribute.RadiusAttributeString( 9, 252, value ) );

                        //logger.info( "Send activate service CoA:\n" + packet );
                        result = radiusClient.sendAsync( packet );
                    }
                }

                break;
            }

            case COA_MODE_SUBSCR_COMMAND:
            default:
            {
                if( serviceNamesDeactivate != null && serviceNamesDeactivate.size() > 0 )
                {
                    for( String serviceName : serviceNamesDeactivate )
                    {
                        RadiusPacket packet = radiusClient.createModifyRequest();
                        prepareRequest( packet, connection );

                        packet.addAttribute( new RadiusAttribute.RadiusAttributeString( 9, 1, "subscriber:service-name=" + serviceName ) );
                        packet.addAttribute( new RadiusAttribute.RadiusAttributeString( 9, 1, "subscriber:command=deactivate-service" ) );

                        //logger.info( "Send deactivate service CoA:\n" + packet );
                        result = radiusClient.sendAsync( packet );
                    }
                }

                if( serviceNamesActivate != null && serviceNamesActivate.size() > 0 )
                {
                    for( String serviceName : serviceNamesActivate )
                    {
                        RadiusPacket packet = radiusClient.createModifyRequest();
                        prepareRequest( packet, connection );

                        packet.addAttribute( new RadiusAttribute.RadiusAttributeString( 9, 1, "subscriber:service-name=" + serviceName ) );
                        packet.addAttribute( new RadiusAttribute.RadiusAttributeString( 9, 1, "subscriber:command=activate-service" ) );

                        //logger.info( "Send activate service CoA:\n" + packet );
                        result = radiusClient.sendAsync( packet );
                    }
                }

                break;
            }
        }

        return result;
    }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 16 сен 2014, 06:33 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 20 апр 2009, 12:03
Сообщения: 3092
Откуда: Иркутск
Карма: 338
йеп

ДОБАВЛЕНО Inet: Поддержка template-конфигураций опций Inet для ISGServiceActivator.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Оптимизация конфига устройств
СообщениеДобавлено: 29 апр 2015, 15:43 
Не в сети

Зарегистрирован: 14 мар 2010, 03:38
Сообщения: 171
Откуда: Москва
Карма: 0
Вам-то yep!

:D

А вот у меня в SmartEdgeServiceActivator такое не заработало че-то :(


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 44 ]  На страницу Пред.  1, 2

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


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

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


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

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