\MultiGen
Most awesome FreeRADIUS support implementation ever
Synopsis
class MultiGen
{
- // constants
- const URL_ME = '?module=multigen';
- const URL_PROFILE = '?module=userprofile&username=';
- const CLIENTS = 'mlg_clients';
- const NAS_OPTIONS = 'mlg_nasoptions';
- const NAS_SERVICES = 'mlg_services';
- const NAS_ATTRIBUTES = 'mlg_nasattributes';
- const NAS_ACCT = 'mlg_acct';
- const NAS_POSTAUTH = 'mlg_postauth';
- const NAS_TRAFFIC = 'mlg_traffic';
- const NAS_ISHIMURA = 'mlg_ishimura';
- const USER_STATES = 'mlg_userstates';
- const SCENARIO_PREFIX = 'mlg_';
- const OPTION_LOGGING = 'MULTIGEN_LOGGING';
- const OPTION_RADCLIENT = 'MULTIGEN_RADCLIENT';
- const OPTION_SUDO = 'SUDO';
- const OPTION_INNO = 'MULTIGEN_MAKE_INNODB_GREAT_AGAIN';
- const OPTION_QINQ = 'QINQ_ENABLED';
- const OPTION_SWASSIGN = 'SWITCHPORT_IN_PROFILE';
- const OPTION_UNIVERSALQINQ = 'UNIVERSAL_QINQ_ENABLED';
- const OPTION_FIELDS = 'MULTIGEN_FIELDSACCT';
- const OPTION_UNFFLAG = 'MULTIGEN_UNFACCT';
- const OPTION_DAYS = 'MULTIGEN_DAYSACCT';
- const OPTION_ISHIMURA = 'ISHIMURA_ENABLED';
- const OPTION_USERNAMESTIMEOUT = 'MULTIGEN_UNTIMEOUT';
- const OPTION_EXTNETS = 'NETWORKS_EXT';
- const OPTION_CULPA = 'MEACULPA_ENABLED';
- const LOG_PATH = 'exports/multigen.log';
- const POD_PATH = 'exports/pod_queue_';
- const COA_PATH = 'exports/coa_queue_';
- const MULTIGEN_PID = 'MULTIGEN';
- // members
- protected array $altCfg = ;
- protected array $billCfg = ;
- protected array $allUserData = ;
- protected array $tariffSpeeds = ;
- protected array $userSpeedOverrides = ;
- protected array $userSwitchAssigns = ;
- protected array $switchesQinQ = ;
- protected array $usersQinQ = ;
- protected array $allSvlan = ;
- protected array $allRealms = ;
- protected array $allSwitches = ;
- protected array $userNases = ;
- protected array $allNetworks = ;
- protected array $netExtUsers = ;
- protected array $allNas = ;
- protected array $networkNases = ;
- protected array $allNetHosts = ;
- protected array $nethostsNetworks = ;
- protected array $nasAttributes = ;
- protected array $nasOptions = ;
- protected array $currentAttributes = ;
- protected array $userStates = ;
- protected $messages = '';
- protected array $usernameTypes = ;
- protected array $serviceTypes = ;
- protected array $operators = ;
- protected array $attrModifiers = ;
- protected array $scenarios = ;
- protected array $scenarioStats = ;
- protected array $perfStats = ;
- protected array $acctFieldsRequired = ;
- protected array $acctFieldsAdditional = ;
- protected array $userAcctData = ;
- protected array $services = ;
- protected array $runServices = ;
- protected bool $accurateUserActivity = true;
- protected integer $logging = 0;
- protected integer $inno = 0;
- protected integer $unfinished = 0;
- protected integer $days = 1;
- protected $cache = '';
- protected array $previousTraffic = ;
- protected array $trafficArchive = ;
- protected array $currentTraffic = ;
- protected array $usersTraffic = ;
- protected array $allUsersCash = ;
- protected string $echoPath = '/bin/echo';
- protected string $radclienPath = '/usr/local/bin/radclient -r 3 -t 1';
- protected string $sudoPath = '/usr/local/bin/sudo';
- protected string $printfPath = '/usr/bin/printf';
- protected integer $remotePort = 3799;
- protected integer $ishimuraFlag = 0;
- protected integer $usernamesCachingTimeout = 0;
- protected string $instanceId = '';
- protected $stardust = '';
- protected $meaCulpa = '';
- protected bool $meaCulpaFlag = false;
- // methods
- public void __construct()
- protected void loadHugeRegenData()
- protected void loadConfigs()
- protected void setOptions()
- protected void initMessages()
- protected void initCache()
- protected void initStarDust()
- protected void loadUserData()
- protected void loadUserCash()
- protected void loadTariffSpeeds()
- protected void loadUserSpeedOverrides()
- protected void loadSwithchAssigns()
- protected void loadAllQinQ()
- protected void loadSwitches()
- protected void preprocessUserData()
- protected void loadNetworks()
- protected void loadNetExtUsers()
- protected void loadMeaCulpa()
- protected void loadNases()
- protected void loadNasAttributes()
- protected void loadUserStates()
- protected void loadNasOptions()
- protected void loadNasServices()
- protected void loadNethosts()
- protected void loadScenarios()
- protected void loadAcctData()
- protected void logEvent()
- public string renderNasOptionsEditForm()
- public bool nasHaveOptions()
- public void/string saveNasOptions()
- public void/string saveNasServices()
- protected array getNasAttributes()
- protected array getNasServices()
- public void/string deleteNasAttribute()
- public void flushAllScenarios()
- public void cleanupAccounting()
- public string renderFlushAllScenariosNotice()
- public string renderNasAttributesList()
- public string renderNasAttributesCreateForm()
- public string renderAttributeTemplateEditForm()
- public void/string createNasAttribute()
- public void/string saveNasAttribute()
- protected void createUserState()
- protected void deleteUserState()
- protected void changeUserState()
- protected void saveUserStates()
- protected bool isUserActive()
- protected int checkScenarioAttribute()
- protected void createScenarioAttribute()
- protected void deleteScenarioAttribute()
- protected void writeScenarioStats()
- public void writePerformanceTimers()
- protected void flushBuriedUser()
- protected string getUserStateString()
- protected array parseNetworkDesc()
- protected string transformMacDotted()
- protected string transformMacMinused()
- protected string transformCidrtoMask()
- protected array getUserSpeeds()
- protected int transformSpeedBits()
- public string getAttributeValue()
- public array getAllUserNames()
- protected string getLoginUsername()
- protected string/void getQinQUsername()
- public string getUserLogin()
- public void podOnExternalEvent()
- protected void replaceSingleUser()
- protected void changeFramedIp()
- public void generateNasAttributes()
- protected void savePodQueue()
- protected void saveCoaQueue()
- protected void runPodQueue()
- protected void runCoaQueue()
- public string getNaslabel()
- public strings renderScenarioStats()
- public string nasControlPanel()
- protected string renderNasServicesEditForm()
- protected array/string getNasCopyString()
- protected string renderNasCopyPasteForm()
- protected string renderNasCloneForm()
- public void deleteAllNasConfiguration()
- public void/string cloneNasConfiguration()
- public string pasteNasConfiguration()
- public string renderDateSerachControls()
- public void renderAcctStatsAjlist()
- public string renderAcctStatsContainer()
- public string renderManualPodForm()
- public string renderUserAttributes()
- public void/string deleteUserAttribute()
- public void/string runManualPod()
- public string renderLogControl()
- public void logDownload()
- protected void loadAcctTraffData()
- protected void loadUserTraffData()
- public void aggregateTraffic()
- protected void saveTrafficData()
- protected void savePreviousTraffic()
- public bool isMultigenRunning()
- public void runPidStart()
- public void runPidEnd()
Constants
Name | Value |
---|---|
URL_ME | '?module=multigen' |
URL_PROFILE | '?module=userprofile&username=' |
CLIENTS | 'mlg_clients' |
NAS_OPTIONS | 'mlg_nasoptions' |
NAS_SERVICES | 'mlg_services' |
NAS_ATTRIBUTES | 'mlg_nasattributes' |
NAS_ACCT | 'mlg_acct' |
NAS_POSTAUTH | 'mlg_postauth' |
NAS_TRAFFIC | 'mlg_traffic' |
NAS_ISHIMURA | 'mlg_ishimura' |
USER_STATES | 'mlg_userstates' |
SCENARIO_PREFIX | 'mlg_' |
OPTION_LOGGING | 'MULTIGEN_LOGGING' |
OPTION_RADCLIENT | 'MULTIGEN_RADCLIENT' |
OPTION_SUDO | 'SUDO' |
OPTION_INNO | 'MULTIGEN_MAKE_INNODB_GREAT_AGAIN' |
OPTION_QINQ | 'QINQ_ENABLED' |
OPTION_SWASSIGN | 'SWITCHPORT_IN_PROFILE' |
OPTION_UNIVERSALQINQ | 'UNIVERSAL_QINQ_ENABLED' |
OPTION_FIELDS | 'MULTIGEN_FIELDSACCT' |
OPTION_UNFFLAG | 'MULTIGEN_UNFACCT' |
OPTION_DAYS | 'MULTIGEN_DAYSACCT' |
OPTION_ISHIMURA | 'ISHIMURA_ENABLED' |
OPTION_USERNAMESTIMEOUT | 'MULTIGEN_UNTIMEOUT' |
OPTION_EXTNETS | 'NETWORKS_EXT' |
OPTION_CULPA | 'MEACULPA_ENABLED' |
LOG_PATH | 'exports/multigen.log' |
POD_PATH | 'exports/pod_queue_' |
COA_PATH | 'exports/coa_queue_' |
MULTIGEN_PID | 'MULTIGEN' |
Members
protected
- $acctFieldsAdditional
—
array
Contains additional fields from database acct table - $acctFieldsRequired
—
array
Contains interesting fields from database acct table - $accurateUserActivity
—
bool
User activity detection accuracy flag - $allNas
—
array
Contains available NAS servers as id=>data - $allNetHosts
—
array
Contains available nethosts as ip=>data - $allNetworks
—
array
Contains available networks as id=>data - $allRealms
—
array
Contains all realms - $allSvlan
—
array
Contains available s-vlans - $allSwitches
—
array
Contains array of available switches as id=>switchdata - $allUserData
—
array
Contains all stargazer user data - $allUsersCash
—
array
Contains users current balance cash amount as login=>cash - $altCfg
—
array
Contains system alter.ini config as key=>value - $attrModifiers
—
array
Contains default NAS attributes modifiers as id=>name - $billCfg
—
array
Contains system billing.ini config as key=>value - $cache
—
System caching object instance - $currentAttributes
—
array
Contains previously loaded scenarios attributes as scenario=>username=>attributes - $currentTraffic
—
array
Contains current accounting traffic stats as login=>data - $days
—
int
Contains default accounting display days from OPTION_DAYS - $echoPath
—
string
Contains default echo path - $inno
—
int
Contains innodb usage/optimization flag from OPTION_INNO - $instanceId
—
string
Contains current multigen instance unique ID - $ishimuraFlag
—
int
Ishimura enabled flag - $logging
—
int
Is logging enabled may be exported from MULTIGEN_LOGGING option - $meaCulpa
—
Mea culpa protected instance - $meaCulpaFlag
—
bool
Is mea culpa enabled flag? - $messages
—
System message helper object placeholder - $nasAttributes
—
array
Contains list of available NAS attributes presets to generate as id=>data - $nasOptions
—
array
Contains multigen NAS options like usernames types etc as nasid=>options - $netExtUsers
—
array
Contains all users with ext networks assign - $nethostsNetworks
—
array
Contains array of nethosts to networks bindings like ip=>netid - $networkNases
—
array
Contains array of NASes served networks as netid=>nasids array - $operators
—
array
Contains available operators as operator=>name - $perfStats
—
array
Contains performance timers and stats - $previousTraffic
—
array
Contains previous accounting traffic stats as login=>data - $printfPath
—
string
Contains default path to printf - $radclienPath
—
string
Contains default path and options for radclient - $remotePort
—
int
Default remote radclient port - $runServices
—
array
Contains services names which requires run, like pod or coa - $scenarioStats
—
array
Contains NAS attributes regeneration stats as nasid=>scenario=>statsdata - $scenarios
—
array
Contains available reply scenarios as stringid=>name - $serviceTypes
—
array
Contains available nas service handlers as type=>name - $services
—
array
Contains NAS services templates as nasid=>services data - $stardust
—
stardust process manager instance - $sudoPath
—
string
Contains default path to sudo - $switchesQinQ
—
array
Contains available QinQ data - $tariffSpeeds
—
array
Contains all tariff speeds as tariffname=>speeddata(speeddown/speedup) Kbit/s - $trafficArchive
—
array
Contains ishimura archived year/month traffic stats for current month - $unfinished
—
int
Contains unfinished acct flag from OPTION_UNFFLAG - $userAcctData
—
array
Contains preloaded user accounting data - $userNases
—
array
Contains existing users NAS bindings - $userSpeedOverrides
—
array
Contains user speed overrides as login=>override speed in Kbit/s - $userStates
—
array
Contains previous user states as login=>previous/current/changed state - $userSwitchAssigns
—
array
Contains array of user switch assigns as login=>asigndata - $usernameTypes
—
array
Contains available username types as type=>name - $usernamesCachingTimeout
—
int
Contains default usernames caching timeout in seconds - $usersQinQ
—
array
Contains available users qinq bindings - $usersTraffic
—
array
Contains current stargazer users traffic stats as login=>data D0/U0
Methods
protected
- changeFramedIp() — Replaces old Framed-IP-Address in mlg_reply table
- changeUserState() — Changes user state in database
- checkScenarioAttribute() — Checks is some user attribute available in scenario and is not changed
- createScenarioAttribute() — Pushes some scenario attribute to database
- createUserState() — Creates user state if its not exists
- deleteScenarioAttribute() — Drops some reply attribute from database (required on value changes)
- deleteUserState() — Deletes some user state from states table
- flushBuriedUser() — Flushes buried user attributes if they are exists in database
- getLoginUsername() — Returns transformed username by some type
- getNasAttributes() — Returns list of attribute presets for some NAS
- getNasCopyString() — Returns some NAS text-based configuration info for copy/paste settings
- getNasServices() — Returns list of services for some NAS
- getQinQUsername() — Returns default switch based QinQ username
- getUserSpeeds() — Returns current user speeds including personal override in Kbit/s
- getUserStateString() — Returns user state as string
- initCache() — Inits system caching object for further usage
- initMessages() — Inits system message helper for further usage
- initStarDust() — Inits process manager
- isUserActive() — Checks is user active or not
- loadAcctData() — Loading some accounting data from database
- loadAcctTraffData() — Loads existing aggregated traffic data from database
- loadAllQinQ() — Loads switches QinQ data from database
- loadConfigs() — Loads reqired configss
- loadHugeRegenData() — Loads huge amounts of data, required only for attributes generation/processing
- loadMeaCulpa() — Loads mea culpa instance for further usage
- loadNasAttributes() — Loads existing NAS servers attributes generation optionss
- loadNasOptions() — Loads multigen NAS options from database
- loadNasServices() — Loads NAS services presets
- loadNases() — Loads existing NAS servers from database
- loadNetExtUsers() — Loads users extended networks data
- loadNethosts() — Loads existing nethosts from database
- loadNetworks() — Loads existing networks from database
- loadScenarios() — Loads existing scenarios attributes
- loadSwitches() — Loads all existing switches data from database
- loadSwithchAssigns() — Loads switch port assigns from database
- loadTariffSpeeds() — Loads existing tariffs speeds from database
- loadUserCash() — Loads all existing users data from database
- loadUserData() — Loads all existing users data from database
- loadUserSpeedOverrides() — Loads user speed overrides if they assigned for user
- loadUserStates() — Loads previous user states from database
- loadUserTraffData() — Loads existing aggregated traffic data from database
- logEvent() — Logs data if logging is enabled
- parseNetworkDesc() — Parses network data to network address and network CIDR
- preprocessUserData() — Prepares user to NAS bindings array
- renderNasCloneForm() — Renders nas options/atributes/services cloning form
- renderNasCopyPasteForm() — Renders NAS copy&paste settings form
- renderNasServicesEditForm() — Returns NAS services editing form
- replaceSingleUser() — Replaces old username in mlg_* tables
- runCoaQueue() — Runs CoA queue if not empty and flushes after it
- runPodQueue() — Runs PoD queue if not empty and flushes after it
- saveCoaQueue() — Saves data to CoA queue for furtner run
- savePodQueue() — Saves data to PoD queue for furtner run
- savePreviousTraffic() — Saves current run traffic data into database
- saveTrafficData() — Sets traffic value via stargazer configurator or ishimura ne configurator, lol
- saveUserStates() — Saves user states into database if something changed
- setOptions() — Sets some basic options for further usage
- transformCidrtoMask() — Transforms CIDR notation to xxx.xxx.xxx.xxx netmask
- transformMacDotted() — Transforms mac from xx:xx:xx:xx:xx:xx format to xxxx.xxxx.xxxx
- transformMacMinused() — Transforms mac from xx:xx:xx:xx:xx:xx format to XX-XX-XX-XX-XX-XX
- transformSpeedBits() — Returns speed transformed from kbit/s to bit/s by some offset
- writeScenarioStats() — Writes attributes regeneration stats
public
- __construct() — Creates new MultiGen instance
- aggregateTraffic() — Performs preprocessing of current accounting traffic and stores it into database
- cleanupAccounting() — Performs cleanup of accounting data for some period
- cloneNasConfiguration() — Clones all NAS options, attributes and services
- createNasAttribute() — Creates new NAS attribute preset
- deleteAllNasConfiguration() — Flushes all NAS configuration from database
- deleteNasAttribute() — Deletes some attribute preset
- deleteUserAttribute() — Deletes some user attribute from some scenario by its ID
- flushAllScenarios() — Flushes all attributes for all scenarios
- generateNasAttributes() — Performs generation of user attributes if their NAS requires it.
- getAllUserNames() — Returns array of all possible radius-preprocessed usernames
- getAttributeValue() — Returns attribute templates value with replaced macro
- getNaslabel() — Returns NAS label as IP - name
- getUserLogin() — Returns user login if some username for him found
- isMultigenRunning() — Performs check of multigen-rebuild lock
- logDownload() — Performs downloading of log
- nasControlPanel() — Renders NAS controls panel
- nasHaveOptions() — Checks is NAS basically configured?
- pasteNasConfiguration() — Pastes some configuration string data to some NAS
- podOnExternalEvent() — Need to disconnect user when data like username changed.
- renderAcctStatsAjlist() — Renders preloaded accounting data into JSON
- renderAcctStatsContainer() — Renders multigen acoounting stats container
- renderAttributeTemplateEditForm() — Renders existing NAS attribute template editing forms
- renderDateSerachControls() — Renders controls for acct date search
- renderFlushAllScenariosNotice() — Renders list of flushed scenarios
- renderLogControl() — Renders multigen logs control
- renderManualPodForm() — Renders user manual user POD form
- renderNasAttributesCreateForm() — Renders NAS attributes creation form
- renderNasAttributesList() — Renders list of available attributes for some NAS
- renderNasOptionsEditForm() — Renders NAS options editing form
- renderScenarioStats() — Renders some NAS attributes regeneration stats
- renderUserAttributes() — Renders actual user attributes data in all available scenarios.
- runManualPod() — Executes manual PoD sending if its possilble
- runPidEnd() — Releases Multigen regeneration lock
- runPidStart() — Locks Multigen regeneration
- saveNasAttribute() — Creates new NAS attribute preset
- saveNasOptions() — Saves NAS basic options
- saveNasServices() — Saves NAS services templates
- writePerformanceTimers() — Stores performance timing data for future stats