]>
git.ipfire.org Git - ipfire-2.x.git/blob - html/cgi-bin/shaping.cgi
5 # Copyright 2003-04-06 David Kilpatrick <dave@thunder.com.au>
7 # $Id: shaping.cgi,v 1.3.2.15 2005/02/27 13:42:05 eoberlander Exp $
12 # enable only the following on debugging purpose
14 #use CGI::Carp 'fatalsToBrowser';
16 require '/var/ipfire/general-functions.pl';
17 require "${General::swroot}/lang.pl";
18 require "${General::swroot}/header.pl";
20 #workaround to suppress a warning when a variable is used only once
21 my @dummy = ( ${Header
::table2colour
}, ${Header
::colouryellow
} );
24 my %shapingsettings=();
25 my $configfile = "${General::swroot}/shaping/config";
26 my $settingsfile = "${General::swroot}/shaping/settings";
27 my $errormessage = '';
29 &Header
::showhttpheaders
();
31 $shapingsettings{'ACTION'} = '';
32 $shapingsettings{'ENABLE'} = 'off';
33 $shapingsettings{'VALID'} = '';
34 $shapingsettings{'UPLINK'} = '';
35 $shapingsettings{'DOWNLINK'} = '';
36 $shapingsettings{'SERVICE_ENABLED'} = '';
37 $shapingsettings{'SERVICE_PROT'} = '';
38 $shapingsettings{'SERVICE_PRIO'} = '';
39 $shapingsettings{'SERVICE_PORT'} = '';
41 &Header
::getcgihash
(\
%shapingsettings);
43 open(FILE
, "$configfile") or die 'Unable to open shaping config file.';
47 if ($shapingsettings{'ACTION'} eq $Lang::tr
{'save'})
49 if (!($shapingsettings{'UPLINK'} =~ /^\d+$/) ||
50 ($shapingsettings{'UPLINK'} < 2))
52 $errormessage = $Lang::tr
{'invalid uplink speed'};
56 if (!($shapingsettings{'DOWNLINK'} =~ /^\d+$/) ||
57 ($shapingsettings{'DOWNLINK'} < 2))
59 $errormessage = $Lang::tr
{'invalid downlink speed'};
65 $shapingsettings{'VALID'} = 'no'; }
67 $shapingsettings{'VALID'} = 'yes'; }
69 open(FILE
,">$settingsfile") or die 'Unable to open shaping settings file.';
71 print FILE
"VALID=$shapingsettings{'VALID'}\n";
72 print FILE
"ENABLE=$shapingsettings{'ENABLE'}\n";
73 print FILE
"UPLINK=$shapingsettings{'UPLINK'}\n";
74 print FILE
"DOWNLINK=$shapingsettings{'DOWNLINK'}\n";
77 if ($shapingsettings{'VALID'} eq 'yes') {
78 system('/usr/local/bin/restartshaping');
81 if ($shapingsettings{'ACTION'} eq $Lang::tr
{'add'})
83 unless($shapingsettings{'SERVICE_PROT'} =~ /^(tcp|udp)$/) { $errormessage = $Lang::tr
{'invalid input'}; }
84 unless($shapingsettings{'SERVICE_PRIO'} =~ /^(10|20|30)$/) { $errormessage = $Lang::tr
{'invalid input'}; }
85 unless(&General
::validport
($shapingsettings{'SERVICE_PORT'})) { $errormessage = $Lang::tr
{'invalid port'}; }
89 if ($shapingsettings{'EDITING'} eq 'no')
91 open(FILE
,">>$configfile") or die 'Unable to open shaping config file';
93 print FILE
"$shapingsettings{'SERVICE_PROT'},$shapingsettings{'SERVICE_PORT'},$shapingsettings{'SERVICE_PRIO'},$shapingsettings{'SERVICE_ENABLED'}\n";
95 open(FILE
,">$configfile") or die 'Unable to open shaping config file';
98 foreach my $line (@current)
102 my @temp = split(/\,/,$line);
103 if ($shapingsettings{'EDITING'} eq $id) {
104 print FILE
"$shapingsettings{'SERVICE_PROT'},$shapingsettings{'SERVICE_PORT'},$shapingsettings{'SERVICE_PRIO'},$shapingsettings{'SERVICE_ENABLED'}\n";
106 print FILE
"$line\n";
111 undef %shapingsettings;
112 system ('/usr/local/bin/restartshaping');
114 # stay on edit mode if an error occur
115 if ($shapingsettings{'EDITING'} ne 'no')
117 $shapingsettings{'ACTION'} = $Lang::tr
{'edit'};
118 $shapingsettings{'ID'} = $shapingsettings{'EDITING'};
123 if ($shapingsettings{'ACTION'} eq $Lang::tr
{'edit'})
126 foreach my $line (@current)
129 if ($shapingsettings{"ID"} eq $id)
132 my @temp = split(/\,/,$line);
133 $shapingsettings{'SERVICE_PROT'} = $temp[0];
134 $shapingsettings{'SERVICE_PORT'} = $temp[1];
135 $shapingsettings{'SERVICE_PRIO'} = $temp[2];
136 $shapingsettings{'SERVICE_ENABLED'} = $temp[3];
141 if ($shapingsettings{'ACTION'} eq $Lang::tr
{'remove'} || $shapingsettings{'ACTION'} eq $Lang::tr
{'toggle enable disable'})
143 open(FILE
, ">$configfile") or die 'Unable to open config file.';
146 foreach my $line (@current)
149 unless ($shapingsettings{"ID"} eq $id) { print FILE
"$line"; }
150 elsif ($shapingsettings{'ACTION'} eq $Lang::tr
{'toggle enable disable'})
153 my @temp = split(/\,/,$line);
154 if ($temp[3] eq "on") {
155 print FILE
"$temp[0],$temp[1],$temp[2],off\n";
157 print FILE
"$temp[0],$temp[1],$temp[2],on\n";
162 system ('/usr/local/bin/restartshaping');
165 &General
::readhash
("${General::swroot}/shaping/settings", \
%shapingsettings);
167 if ($shapingsettings{'ACTION'} eq '')
169 $shapingsettings{'SERVICE_ENABLED'} = 'on';
170 $shapingsettings{'SERVICE_PROT'} = 'tcp';
171 $shapingsettings{'SERVICE_PRIO'} = '20';
172 $shapingsettings{'SERVICE_PORT'} = '';
176 $checked{'ENABLE'}{'off'} = '';
177 $checked{'ENABLE'}{'on'} = '';
178 $checked{'ENABLE'}{$shapingsettings{'ENABLE'}} = "checked='checked'";
180 my %service_checked=();
181 $service_checked{'SERVICE_ENABLED'}{'off'} = '';
182 $service_checked{'SERVICE_ENABLED'}{'on'} = '';
183 $service_checked{'SERVICE_ENABLED'}{$shapingsettings{'SERVICE_ENABLED'}} = "checked='checked'";
185 my %service_selected=();
186 $service_selected{'SERVICE_PROT'}{'udp'} = '';
187 $service_selected{'SERVICE_PROT'}{'tcp'} = '';
188 $service_selected{'SERVICE_PROT'}{$shapingsettings{'SERVICE_PROT'}} = "selected='selected'";
190 $service_selected{'SERVICE_PRIO'}{'10'} = '';
191 $service_selected{'SERVICE_PRIO'}{'20'} = '';
192 $service_selected{'SERVICE_PRIO'}{'30'} = '';
193 $service_selected{'SERVICE_PRIO'}{$shapingsettings{'SERVICE_PRIO'}} = "selected='selected'";
195 &Header
::openpage
($Lang::tr
{'traffic shaping settings'}, 1, '');
197 &Header
::openbigbox
('100%', 'left', '', $errormessage);
200 &Header
::openbox
('100%', 'left', $Lang::tr
{'error messages'});
201 print "<font class='base'>$errormessage </font>\n";
205 print "<form method='post' action='$ENV{'SCRIPT_NAME'}'>\n";
207 &Header
::openbox
('100%', 'left', "$Lang::tr{'settings'}:");
211 <td><input type='checkbox' name='ENABLE' $checked{'ENABLE'}{'on'} /></td>
212 <td class='base' colspan='2'>$Lang::tr{'traffic shaping'}</td>
216 <td width='30%' class='base'>$Lang::tr{'downlink speed'}: </td>
217 <td width='70%'><input type='text' name='DOWNLINK' value='$shapingsettings{'DOWNLINK'}' size='5' /></td>
221 <td class='base'>$Lang::tr{'uplink speed'}: </td>
222 <td><input type='text' name='UPLINK' value='$shapingsettings{'UPLINK'}' size='5' /></td>
228 <td width='50%'> </td>
229 <td width='50%' align='center'><input type='submit' name='ACTION' value='$Lang::tr{'save'}' /></td>
237 print "<form method='post' action='$ENV{'SCRIPT_NAME'}'>\n";
239 my $buttontext = $Lang::tr
{'add'};
240 if($shapingsettings{'ACTION'} eq $Lang::tr
{'edit'}) {
241 $buttontext = $Lang::tr
{'update'};
242 &Header
::openbox
('100%', 'left', $Lang::tr
{'edit service'});
244 &Header
::openbox
('100%', 'left', $Lang::tr
{'add service'});
251 <td class='base'>$Lang::tr{'priority'}: </td>
252 <td><select name='SERVICE_PRIO'>
253 <option value='10' $service_selected{'SERVICE_PRIO'}{'10'}>$Lang::tr{'high'}</option>
254 <option value='20' $service_selected{'SERVICE_PRIO'}{'20'}>$Lang::tr{'medium'}</option>
255 <option value='30' $service_selected{'SERVICE_PRIO'}{'30'}>$Lang::tr{'low'}</option>
257 <td width='20%' class='base' align='right'>$Lang::tr{'port'}: </td>
258 <td><input type='text' name='SERVICE_PORT' value='$shapingsettings{'SERVICE_PORT'}' size='5' /></td>
259 <td width='20%' class='base' align='right'>$Lang::tr{'protocol'}: </td>
260 <td><select name='SERVICE_PROT'>
261 <option value='tcp' $service_selected{'SERVICE_PROT'}{'tcp'}>TCP</option>
262 <option value='udp' $service_selected{'SERVICE_PROT'}{'udp'}>UDP</option>
264 <td width='20%' class='base' align='right'>$Lang::tr{'enabled'} </td>
265 <td width='20%'><input type='checkbox' name='SERVICE_ENABLED' $service_checked{'SERVICE_ENABLED'}{'on'} /></td>
271 <td width='50%'> </td>
272 <td width='50%' align='center'><input type='submit' name='SUBMIT' value='$buttontext' /><input type='hidden' name='ACTION' value='$Lang::tr{'add'}' /></td>
279 if ($shapingsettings{'ACTION'} eq $Lang::tr
{'edit'}) {
280 print "<input type='hidden' name='EDITING' value='$shapingsettings{'ID'}' />\n";
282 print "<input type='hidden' name='EDITING' value='no' />\n";
287 &Header
::openbox
('100%', 'left', $Lang::tr
{'shaping list options'});
289 <table width='100%' align='center'>
291 <td width='33%' align='center' class='boldbase'><b>$Lang::tr{'priority'}</b></td>
292 <td width='33%' align='center' class='boldbase'><b>$Lang::tr{'port'}</b></td>
293 <td width='33%' align='center' class='boldbase'><b>$Lang::tr{'protocol'}</b></td>
294 <td align='center' class='boldbase' colspan='3'><b>$Lang::tr{'action'}</b></td>
300 open(SERVICES
, "$configfile") or die 'Unable to open shaping config file.';
308 my @temp = split(/\,/,$_);
309 if ($temp[3] eq "on") {
310 $gif = 'on.gif'; $gdesc=$Lang::tr
{'click to disable'}; }
312 $gif = 'off.gif'; $gdesc=$Lang::tr
{'click to enable'}; }
313 if ($shapingsettings{'ACTION'} eq $Lang::tr
{'edit'} && $shapingsettings{'ID'} eq $id) {
314 print "<tr bgcolor='${Header::colouryellow}'>\n"; }
316 print "<tr bgcolor='${Header::table1colour}'>\n"; }
318 print "<tr bgcolor='${Header::table2colour}'>\n"; }
319 if ($temp[2] eq "10") { $prio = $Lang::tr
{'high'}; }
320 if ($temp[2] eq "20") { $prio = $Lang::tr
{'medium'}; }
321 if ($temp[2] eq "30") { $prio = $Lang::tr
{'low'}; }
324 <td align='center'>$prio</td>
325 <td align='center'>$temp[1]</td>
326 <td align='center'>$temp[0]</td>
329 <form method='post' action='$ENV{'SCRIPT_NAME'}' name='frma$id'>
330 <input type='image' name='$Lang::tr{'toggle enable disable'}' src='/images/$gif' alt='$gdesc' title='$gdesc' />
331 <input type='hidden' name='ACTION' value='$Lang::tr{'toggle enable disable'}' />
332 <input type='hidden' name='ID' value='$id' />
337 <form method='post' name='frmb$id' action='$ENV{'SCRIPT_NAME'}'>
338 <input type='image' name='$Lang::tr{'edit'}' src='/images/edit.gif' title='$Lang::tr{'edit'}' alt='$Lang::tr{'edit'}' />
339 <input type='hidden' name='ID' value='$id' />
340 <input type='hidden' name='ACTION' value='$Lang::tr{'edit'}' />
345 <form method='post' name='frmc$id' action='$ENV{'SCRIPT_NAME'}'>
346 <input type='image' name='$Lang::tr{'remove'}' src='/images/delete.gif' title='$Lang::tr{'remove'}' alt='$Lang::tr{'remove'}' />
347 <input type='hidden' name='ID' value='$id' />
348 <input type='hidden' name='ACTION' value='$Lang::tr{'remove'}' />
365 &Header
::closebigbox
();