source: trunk/system/generators/traffic_shaping_routerboard.php@ 176

Last change on this file since 176 was 171, checked in by george, 16 years ago
  • Opraveno: Konfigurační skripty síťových zařízení opraveny pro nové tabulky Member a Subject.
  • Property svn:executable set to *
File size: 6.1 KB
Line 
1<?php
2
3$Enabled = 1;
4$ClassesEnabled = 1;
5$SessionDisable = true;
6include_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
45foreach(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');
62while($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");
118exec($Command, $Output);
119//array_pop($Output);
120print_r($Output);
121
122?>
Note: See TracBrowser for help on using the repository browser.