1 | <?php
|
---|
2 |
|
---|
3 | $Enabled = 1;
|
---|
4 | $ClassesEnabled = 1;
|
---|
5 | $SessionDisable = true;
|
---|
6 | include_once('../../global.php');
|
---|
7 | $Finance = &$System->Modules['Finance'];
|
---|
8 | $Finance->LoadMonthParameters(0);
|
---|
9 |
|
---|
10 | // Generate traffic shaping rules
|
---|
11 | //$TotalMaxSpeedIn = 4048; //$RealMaxSpeed; //1536;
|
---|
12 | //TotalMaxSpeedOut = 3048; //$RealMaxSpeed; //1536;
|
---|
13 | //$UsersMaxSpeedIn = 1900; //$MaxSpeed;
|
---|
14 | //$UsersMaxSpeedOut = 1900; //$MaxSpeed;
|
---|
15 |
|
---|
16 | $InDivider = 1;
|
---|
17 | $OutDivider = 1;
|
---|
18 | $TotalMaxSpeedIn = round($Finance->RealMaxSpeed / $InDivider) * 1024;
|
---|
19 | $TotalMaxSpeedOut = round($Finance->RealMaxSpeed / $OutDivider) * 1024;
|
---|
20 | $UsersMaxSpeedIn = round($Finance->MaxSpeed / $InDivider) * 1024;
|
---|
21 | $UsersMaxSpeedOut = round($Finance->MaxSpeed / $OutDivider) * 1024;
|
---|
22 | $VoipMaxSpeedIn = $TotalMaxSpeedIn - 136;
|
---|
23 | $VoipMaxSpeedOut = $TotalMaxSpeedOut - 136;
|
---|
24 | $VoipSpeedIn = 100; //$SpeedReserve;
|
---|
25 | $VoipSpeedOut = 100; //$SpeedReserve;
|
---|
26 | $OutInterface = 'eth1';
|
---|
27 | $InInterface = 'ifb0';
|
---|
28 | $FreeInetSpeed = 64 * 1024;
|
---|
29 |
|
---|
30 | $InetInterface = 'ether3';
|
---|
31 | $Router = '192.168.0.11';
|
---|
32 |
|
---|
33 | $Commands = array();
|
---|
34 | $Commands[] = '/ip firewall mangle { remove [find] }';
|
---|
35 | $Commands[] = '/queue tree { remove [find] }';
|
---|
36 |
|
---|
37 | // Root of tree and main limit
|
---|
38 | $PacketMark = 1;
|
---|
39 | $Commands[] = ' /queue tree add name=main-out limit-at='.$UsersMaxSpeedIn.' max-limit='.$UsersMaxSpeedIn.' parent=global-out';
|
---|
40 | $Commands[] = ' /ip firewall mangle add chain=forward out-interface='.$InetInterface.' action=jump jump-target=inet-out';
|
---|
41 | $Commands[] = ' /queue tree add name=main-in limit-at='.$UsersMaxSpeedOut.' max-limit='.$UsersMaxSpeedOut.' parent=global-out';
|
---|
42 | $Commands[] = ' /ip firewall mangle add chain=forward in-interface='.$InetInterface.' action=jump jump-target=inet-in';
|
---|
43 |
|
---|
44 | // Divide rules by subnet number
|
---|
45 | foreach(array(0, 1, 2, 3, 4, 5, 7) as $Subnet)
|
---|
46 | {
|
---|
47 | $Commands[] = ' /ip firewall mangle add chain=inet-out src-address=192.168.'.$Subnet.'.0/24 out-interface='.$InetInterface.' action=jump jump-target=inet-out-'.$Subnet;
|
---|
48 | $Commands[] = ' /ip firewall mangle add chain=inet-in dst-address=192.168.'.$Subnet.'.0/24 in-interface='.$InetInterface.' action=jump jump-target=inet-in-'.$Subnet;
|
---|
49 | }
|
---|
50 |
|
---|
51 | // Slow free internet
|
---|
52 | $Commands[] = ' /ip firewall mangle add chain=inet-out out-interface='.$InetInterface.' action=mark-packet new-packet-mark='.$PacketMark.' comment="Free inet"';
|
---|
53 | $Commands[] = ' /queue tree add name=free-out limit-at='.$FreeInetSpeed.' max-limit='.$FreeInetSpeed.' parent=main-out packet-mark='.$PacketMark.' queue=wireless-default';
|
---|
54 | $PacketMark++;
|
---|
55 | $Commands[] = ' /ip firewall mangle add chain=inet-in in-interface='.$InetInterface.' action=mark-packet new-packet-mark='.$PacketMark.' comment="Free inet"';
|
---|
56 | $Commands[] = ' /queue tree add name=free-in limit-at='.$FreeInetSpeed.' max-limit='.$FreeInetSpeed.' parent=main-in packet-mark='.$PacketMark.' queue=wireless-default';
|
---|
57 | $PacketMark++;
|
---|
58 |
|
---|
59 | // Process users
|
---|
60 | $Index = 0;
|
---|
61 | $DbResult = $Database->query('SELECT Member.*, Subject.Name FROM Member LEFT JOIN Subject ON Subject.Id = Member.Subject');
|
---|
62 | while($Member = $DbResult->fetch_array())
|
---|
63 | {
|
---|
64 | $Member['Name'] = strtr(strtolower(trim($Member['Name'])), array(' ' => '-', '(' => '-', ')' => '-',
|
---|
65 | 'č' => 'c', 'š' => 's', 'ě' => 'e', 'ř' => 'r', 'ž' => 'z', 'ý' => 'y', 'á' => 'a', 'í' => 'i', 'é' => 'e', 'ů' => 'u', 'ú' => 'u', 'ď' => 'd', 'ť' => 't', 'ň' => 'n', 'ó' => 'o',
|
---|
66 | 'Č' => 'c', 'Š' => 's', 'Ě' => 'e', 'Ř' => 'r', 'Ž' => 'z', 'Ý' => 'y', 'Á' => 'a', 'Í' => 'i', 'É' => 'e', 'Ů' => 'u', 'Ú' => 'u', 'Ď' => 'd', 'Ť' => 't', 'Ň' => 'n', 'Ó' => 'o',
|
---|
67 | ));
|
---|
68 |
|
---|
69 | echo('Uživatel '.$Member['Name'].": ");
|
---|
70 | $Tariff = $Finance->Tarify[$Member['InternetTariffCurrentMonth']];
|
---|
71 | $SpeedIn = round($Tariff['min_speed'] / $InDivider);
|
---|
72 | $SpeedOut = round($Tariff['min_speed'] / $OutDivider);
|
---|
73 | $UserMaxSpeedIn = round($Tariff['max_speed'] / $InDivider);
|
---|
74 | $UserMaxSpeedOut = round($Tariff['max_speed'] / $OutDivider);
|
---|
75 | $Quantum = $Tariff['speed_factor'] * 1500;
|
---|
76 | $Commands[] = ' /queue tree add name='.$Member['Name'].'-out limit-at='.$SpeedIn.' max-limit='.$UserMaxSpeedIn.' parent=main-out queue=wireless-default';
|
---|
77 | $Commands[] = ' /queue tree add name='.$Member['Name'].'-in limit-at='.$SpeedOut.' max-limit='.$UserMaxSpeedOut.' parent=main-in queue=wireless-default';
|
---|
78 |
|
---|
79 | $DbResult2 = $Database->select('hosts', 'COUNT(*)', "block=0 AND MAC!='' AND user=".$Member['Id']);
|
---|
80 | $Row = $DbResult2->fetch_array();
|
---|
81 | $HostCount = $Row[0];
|
---|
82 | $HostSpeedIn = round($SpeedIn / $HostCount);
|
---|
83 | $HostSpeedOut = round($SpeedOut / $HostCount);
|
---|
84 |
|
---|
85 | $DbResult2 = $Database->select('hosts', '*', "block=0 AND MAC!='' AND user=".$Member['Id']);
|
---|
86 | while($Host = $DbResult2->fetch_array())
|
---|
87 | {
|
---|
88 | $Host['name'] = strtolower($Host['name']);
|
---|
89 | echo($Host['name'].', ');
|
---|
90 | $IPParts = explode('.', $Host['IP']);
|
---|
91 | $Subnet = $IPParts[2];
|
---|
92 | $Commands[] = ' /ip firewall mangle add chain=inet-out-'.$Subnet.' src-address='.$Host['IP'].' out-interface='.$InetInterface.' action=mark-packet new-packet-mark='.$PacketMark.' passthrough=no comment="'.$Host['name'].'"';
|
---|
93 | $Commands[] = ' /queue tree add name='.$Host['name'].'-out limit-at='.$HostSpeedIn.' max-limit='.$UserMaxSpeedIn.' parent='.$Member['Name'].'-out packet-mark='.$PacketMark.' queue=wireless-default';
|
---|
94 | $PacketMark++;
|
---|
95 | $Commands[] = ' /ip firewall mangle add chain=inet-in-'.$Subnet.' dst-address='.$Host['IP'].' in-interface='.$InetInterface.' action=mark-packet new-packet-mark='.$PacketMark.' passthrough=no comment="'.$Host['name'].'"';
|
---|
96 | $Commands[] = ' /queue tree add name='.$Host['name'].'-in limit-at='.$HostSpeedOut.' max-limit='.$UserMaxSpeedOut.' parent='.$Member['Name'].'-in packet-mark='.$PacketMark.' queue=wireless-default';
|
---|
97 | $PacketMark++;
|
---|
98 |
|
---|
99 | // Posílej po menších částech
|
---|
100 | if($Index > 50)
|
---|
101 | {
|
---|
102 | $Commands = addslashes(implode(';', $Commands));
|
---|
103 | $Command = '/usr/bin/ssh -l admin-ssh -i id_dsa '.$Router.' "'.$Commands.'"';
|
---|
104 | //echo($Command."\n");
|
---|
105 | exec($Command, $Output);
|
---|
106 | print_r($Output);
|
---|
107 | $Commands = array();
|
---|
108 | $Index = 0;
|
---|
109 | }
|
---|
110 | $Index++;
|
---|
111 | }
|
---|
112 | echo("\n");
|
---|
113 | }
|
---|
114 | //print_r($Commands);
|
---|
115 | $Commands = addslashes(implode(';', $Commands));
|
---|
116 | $Command = '/usr/bin/ssh -l admin-ssh -i id_dsa '.$Router.' "'.$Commands.'"';
|
---|
117 | //echo($Command."\n");
|
---|
118 | exec($Command, $Output);
|
---|
119 | //array_pop($Output);
|
---|
120 | print_r($Output);
|
---|
121 |
|
---|
122 | ?>
|
---|