grizzly_ripper Опубликовано 29 мая, 2012 Существует ли возможность изменения параметров ng интерфейса уже поднятой сессии непосредственно на NAS'e? То есть при поднятии сессии mpd получает параметры с RADIUS и в зависимости от какого-либо параметра (IP не подойдет) повышает лимит скорости интерфейса, либо оставляет его без изменений. Через pipe и ipfw, как я понимаю, скорость можно только урезать. Есть какие варианты через консоль mpd, если они вообще есть? Нужно это для реализации "турбо-кнопки". Понятно, что это можно сделать через билинг/RADIUS, чтобы на NAS приходили уже правильные параметры, но ввиду некоторых специфических особенностей организации сети и тарифных планов, хотелось бы сделать все на NAS. mpd5.5 FreeBSD 8.2 Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
terrible Опубликовано 29 мая, 2012 из консоли - никак, только ковырянием ng ноды этого интерфейса походу Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
kaN5300 Опубликовано 29 мая, 2012 Присоединяюсь. Только мы ищем вариант обхода ng_car. Хотим просто снимать скоростные ограничения сразу для всех авторизованных абонентов ночью. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
NiTr0 Опубликовано 29 мая, 2012 CoA же вроде как поддерживается, и изменение скорости по CoA запросу - тоже... Да и снимать ограничения тождественно установке скажем 100 мбит ограничения в общем-то... Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roysbike Опубликовано 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() Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
mrlexus Опубликовано 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* и пр., затем оттуда бралось. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
grizzly_ripper Опубликовано 30 мая, 2012 mrlexus Да, спасибо, что-то в этом духе - теперь понятно куда копать :) Остается актуальным вопрос, что использовать в качестве триггера. IP не подойдет, остальные параметры mpd, как я понимаю, тоже. Можно ли как-то поймать "неважный" параметр от RADIUS'a или включить в словарь новый, чтобы mpd отработал скрипт исходя из его значения? Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
roysbike Опубликовано 30 мая, 2012 mrlexus Да, спасибо, что-то в этом духе - теперь понятно куда копать :) Остается актуальным вопрос, что использовать в качестве триггера. IP не подойдет, остальные параметры mpd, как я понимаю, тоже. Можно ли как-то поймать "неважный" параметр от RADIUS'a или включить в словарь новый, чтобы mpd отработал скрипт исходя из его значения? я не понял вашего вопроса. По логину можно обратится к mpd5 и сменить скорость Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...
grizzly_ripper Опубликовано 9 июня, 2012 roysbike Просто хотелось, чтобы все происходило на NAS в момент поднятия сессии. Пока остановился на том, что скрипт на NAS периодически будет проверять сессии на наличие условного параметра, и при наличии такого менять скорость в зависимости от значения этого параметра. Вставить ник Цитата Ответить с цитированием Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах More sharing options...