grizzly_ripper Posted May 29, 2012 Posted May 29, 2012 Существует ли возможность изменения параметров ng интерфейса уже поднятой сессии непосредственно на NAS'e? То есть при поднятии сессии mpd получает параметры с RADIUS и в зависимости от какого-либо параметра (IP не подойдет) повышает лимит скорости интерфейса, либо оставляет его без изменений. Через pipe и ipfw, как я понимаю, скорость можно только урезать. Есть какие варианты через консоль mpd, если они вообще есть? Нужно это для реализации "турбо-кнопки". Понятно, что это можно сделать через билинг/RADIUS, чтобы на NAS приходили уже правильные параметры, но ввиду некоторых специфических особенностей организации сети и тарифных планов, хотелось бы сделать все на NAS. mpd5.5 FreeBSD 8.2 Вставить ник Quote
terrible Posted May 29, 2012 Posted May 29, 2012 из консоли - никак, только ковырянием ng ноды этого интерфейса походу Вставить ник Quote
kaN5300 Posted May 29, 2012 Posted May 29, 2012 Присоединяюсь. Только мы ищем вариант обхода ng_car. Хотим просто снимать скоростные ограничения сразу для всех авторизованных абонентов ночью. Вставить ник Quote
NiTr0 Posted May 29, 2012 Posted May 29, 2012 CoA же вроде как поддерживается, и изменение скорости по CoA запросу - тоже... Да и снимать ограничения тождественно установке скажем 100 мбит ограничения в общем-то... Вставить ник Quote
roysbike Posted May 29, 2012 Posted May 29, 2012 CoA же вроде как поддерживается, и изменение скорости по CoA запросу - тоже... Да и снимать ограничения тождественно установке скажем 100 мбит ограничения в общем-то... ВОт наша turbo кнопка. #!/usr/bin/env python from datetime import datetime import string import sys import os hosts = ["192.168.53.2", "192.168.53.7", "192.168.53.8", "192.168.53.9", "192.168.53.10", "192.168.53.11", "192.168.53.14", "192.168.53.15", "192.168.53.13"] port = 3799 password = "password" radclient = "/usr/local/bin/radclient" logins = [] logFile = open("/var/log/billing/turbo.log", "a+") logFile.write("%s [sTART] Set Turbo Mode\n" % datetime.now()) if len(sys.argv) > 1 and os.path.isfile(sys.argv[1]): logFile.write("%s [ARGUMENTS] %s \n" % (datetime.now(), sys.argv[1])) lgns = open(sys.argv[1]) for login in lgns: logins.append(login.rstrip()) logFile.write("%s [ADD] To List %s\n" % (datetime.now(), login.rstrip())) lgns.close() os.unlink(sys.argv[1]) for login in logins: for host in hosts: lgn = login.split("-")[0] speed = login.split("-")[1] set_speed_command = "echo \"User-Name := %s, mpd-limit += 'in#1=all rate-limit %s', mpd-limit += 'out#1=all rate-limit %s'\" | %s %s:%d coa %s" % (lgn, speed, speed, radclient, host, port, password) os.system(set_speed_command) logFile.write("%s [sEND] %s\n" % (datetime.now(), set_speed_command)) logFile.write("%s [TURBO] Username: %s\n" %(datetime.now(), lgn)) logFile.write("%s [sTOP]\n" % datetime.now()) logFile.close() Вставить ник Quote
mrlexus Posted May 29, 2012 Posted May 29, 2012 Кусок моего старого скрипта динамического шейпера под utm5. Как один из вариантов управления скоростью: $ebs=floor($speed_shape/8); $cbs=$ebs/2; $if_up="/usr/sbin/ngctl msg ".$interface.":inet.1-0-m setconf { upstream={ cbs=".$cbs." ebs=".$ebs." cir=".$speed_shape." greenAction=1 yellowAction=1 redAction=2 mode=3 } downstream={ cbs=".$cbs." ebs=".$ebs." cir=".$speed_shape." greenAction=1 yellowAction=1 redAction=2 mode=3 } }"; $if_dw="/usr/sbin/ngctl msg ".$interface.":inet.0-0-m setconf { upstream={ cbs=".$cbs." ebs=".$ebs." cir=".$speed_shape." greenAction=1 yellowAction=1 redAction=2 mode=3 } downstream={ cbs=".$cbs." ebs=".$ebs." cir=".$speed_shape." greenAction=1 yellowAction=1 redAction=2 mode=3 } }"; exec($if_up); exec($if_dw); Где: $speed_shape - скорость в Кбит/с, $interface - ngXX Соотвественно, надо заранее знать имя ноды. У меня сохранялость в самодельную табличку скриптами up/down значения login/ip/ng* и пр., затем оттуда бралось. Вставить ник Quote
grizzly_ripper Posted May 30, 2012 Author Posted May 30, 2012 mrlexus Да, спасибо, что-то в этом духе - теперь понятно куда копать :) Остается актуальным вопрос, что использовать в качестве триггера. IP не подойдет, остальные параметры mpd, как я понимаю, тоже. Можно ли как-то поймать "неважный" параметр от RADIUS'a или включить в словарь новый, чтобы mpd отработал скрипт исходя из его значения? Вставить ник Quote
roysbike Posted May 30, 2012 Posted May 30, 2012 mrlexus Да, спасибо, что-то в этом духе - теперь понятно куда копать :) Остается актуальным вопрос, что использовать в качестве триггера. IP не подойдет, остальные параметры mpd, как я понимаю, тоже. Можно ли как-то поймать "неважный" параметр от RADIUS'a или включить в словарь новый, чтобы mpd отработал скрипт исходя из его значения? я не понял вашего вопроса. По логину можно обратится к mpd5 и сменить скорость Вставить ник Quote
grizzly_ripper Posted June 9, 2012 Author Posted June 9, 2012 roysbike Просто хотелось, чтобы все происходило на NAS в момент поднятия сессии. Пока остановился на том, что скрипт на NAS периодически будет проверять сессии на наличие условного параметра, и при наличии такого менять скорость в зависимости от значения этого параметра. Вставить ник Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.