Сброс сессии в MPD5
Добавлено: Сб мар 14, 2009 7:59 am
Я подкорректировал код функции сброса подключения для NAS MPD5.
Вариант функции, используемый в исходниках abills нормально работает только с конфигом, приведенным в документации здесь на сайте. Причина - есть жесткая привязка с способу именования динамических линков. Имя линка должно начинаться строго на "L-", номер линка должен однозначно соответствовать номеру порта NAS. Такой вариант именования линков неприемлем, если используется несколько независимых шаблонов линка. Например для конфигурации сервера pppoe на нескольких интерфейсах.
Я исправил функцию так, чтобы для выбора нужного соединения использовалось значение аттрибута ACCT_SESSION_ID. Это значение генерируется самим MPD, является уникальным и однозначно связано с сессией. Таким образом обеспечивается выбор нужного соединения независимо от конфигурации MPD.
Ниже приведен код исправленной функции.
Для внесения исправлений необходимо в файле abills/Abills/nas.pl удалить старую функцию и на ее место вписать приведенную ниже.
Надеюсь, что код будет принят в будущие релизы abills.
Вариант функции, используемый в исходниках abills нормально работает только с конфигом, приведенным в документации здесь на сайте. Причина - есть жесткая привязка с способу именования динамических линков. Имя линка должно начинаться строго на "L-", номер линка должен однозначно соответствовать номеру порта NAS. Такой вариант именования линков неприемлем, если используется несколько независимых шаблонов линка. Например для конфигурации сервера pppoe на нескольких интерфейсах.
Я исправил функцию так, чтобы для выбора нужного соединения использовалось значение аттрибута ACCT_SESSION_ID. Это значение генерируется самим MPD, является уникальным и однозначно связано с сессией. Таким образом обеспечивается выбор нужного соединения независимо от конфигурации MPD.
Ниже приведен код исправленной функции.
Для внесения исправлений необходимо в файле abills/Abills/nas.pl удалить старую функцию и на ее место вписать приведенную ниже.
Код: Выделить всё
#*******************************************************************
# HANGUP MPD
# hangup_mpd5($SERVER, $PORT)
#*******************************************************************
sub hangup_mpd5 {
my ($NAS, $PORT, $attr) = @_;
my $ctl_port = $attr->{ACCT_SESSION_ID};
log_print('LOG_DEBUG', " HANGUP: SESSION: $ctl_port NAS_MNG: $NAS->{NAS_MNG_IP_PORT} '$NAS->{NAS_MNG_PASSWORD}'\n");
my @commands=("\t",
"Username: \t$NAS->{NAS_MNG_USER}",
"Password: \t$NAS->{NAS_MNG_PASSWORD}",
"\] \tsession $ctl_port",
"\] \tclose",
"\] \texit");
my $result = telnet_cmd("$NAS->{NAS_MNG_IP_PORT}", \@commands, { debug => 1 });
return 0;
}