source: trunk/system/generators/common.php@ 391

Last change on this file since 391 was 288, checked in by george, 15 years ago
  • Upraveno: Doplněno generování DNS pro další podsítě. * Opraveno: Generování firewall mangle pravidel pro podsítě domácností. * Přidáno: Generování pravidel pro NAT NTP serveru.
  • Property svn:executable set to *
File size: 3.9 KB
Line 
1<?php
2
3include_once('../../network_address.php');
4
5function GetMarkByComment($Comment)
6{
7 global $Database;
8
9 $DbResult = $Database->query('SELECT `Id` FROM `NetworkMark` WHERE `Comment`="'.$Comment.'"');
10 if($DbResult->num_rows > 0)
11 {
12 $DbRow = $DbResult->fetch_assoc();
13 return($DbRow['Id']);
14 } else
15 {
16 $DbResult = $Database->query('INSERT INTO `NetworkMark` (`Comment`) VALUES ("'.$Comment.'")');
17 return($Database->insert_id);
18 }
19}
20
21function GetSubgroupByRange($AddressRange)
22{
23 global $Database;
24
25 $DbResult = $Database->query('SELECT `Id` FROM `NetworkMangleSubgroup` WHERE `AddressRange`="'.$AddressRange.'"');
26 if($DbResult->num_rows > 0)
27 {
28 $DbRow = $DbResult->fetch_assoc();
29 return($DbRow['Id']);
30 } else
31 {
32 $DbResult = $Database->query('INSERT INTO `NetworkMangleSubgroup` (`AddressRange`) VALUES ("'.$AddressRange.'")');
33 return($Database->insert_id);
34 }
35}
36
37function InsertToAddressTree(&$Tree, $Address, $Name, $InterSubnets = false, $ForceMark = false)
38{
39 global $Config;
40
41 $Found = false;
42 foreach($Tree['Items'] as $Index => $Node)
43 {
44 if($Node['Address']->Contain($Address))
45 {
46 InsertToAddressTree($Tree['Items'][$Index], $Address, $Name, true);
47 $Found = true;
48 }
49 }
50 if($Found == false)
51 {
52 if($InterSubnets and ($Tree['Address']->Prefix < $Config['MainRouter']['MangleRuleSubgroupMinPrefix']) and
53 ($Address->Prefix > ($Tree['Address']->Prefix + 1)))
54 {
55 $NewAddress = new NetworkAddressIPv4();
56 $NewAddress->Address = $Address->Address;
57 $NewAddress->ChangePrefix($Tree['Address']->Prefix + 1);
58 //echo('InsertToTree('.$NewAddress->AddressToString().'/'.$NewAddress->Prefix.')'."\n");
59 $Tree['Items'][] = array('Address' => $NewAddress, 'Name' => $Name, 'Items' => array(), 'ForceMark' => false);
60 InsertToAddressTree($Tree['Items'][count($Tree['Items']) - 1], $Address, $Name, true);
61 } else
62 {
63
64 $NewNode = array('Address' => $Address, 'Name' => $Name, 'Items' => array(), 'ForceMark' => $ForceMark);
65
66 // Should be existed items placed under new node?
67 $Found = false;
68 foreach($Tree['Items'] as $Index => $Node)
69 {
70 if(($Node['Address']->Address == $NewNode['Address']->Address) and
71 ($Node['Address']->Prefix == $NewNode['Address']->Prefix)) $Found = true;
72
73 //echo($Index.',');
74 if($Address->Contain($Node['Address']))
75 {
76 $NewNode['Items'][] = $Node;
77 unset($Tree['Items'][$Index]);
78 }
79 }
80 if($Found == false) $Tree['Items'][] = $NewNode;
81 }
82 }
83}
84
85function ShowSubnetNode($Node, $Indent = 0)
86{
87 echo(str_repeat(' ', $Indent).$Node['Address']->AddressToString().'/'.$Node['Address']->Prefix.' '.$Node['Name']."\n");
88 foreach($Node['Items'] as $Index => $Item)
89 {
90 ShowSubnetNode($Item, $Indent + 1);
91 }
92}
93
94/*
95function Test()
96{
97 $SubnetTree = array('Address' => new NetworkAddressIPv4(), 'Items' => array());
98
99 $NewAddress = new NetworkAddressIPv4();
100 $NewAddress->AddressFromString('10.145.64.0');
101 $NewAddress->Prefix = 24;
102 InsertToAddressTree($SubnetTree, $NewAddress);
103 $NewAddress = new NetworkAddressIPv4();
104 $NewAddress->AddressFromString('10.145.64.0');
105 $NewAddress->Prefix = 29;
106 InsertToAddressTree($SubnetTree, $NewAddress);
107 $NewAddress = new NetworkAddressIPv4();
108 $NewAddress->AddressFromString('10.145.65.0');
109 $NewAddress->Prefix = 24;
110 InsertToAddressTree($SubnetTree, $NewAddress);
111 $NewAddress = new NetworkAddressIPv4();
112 $NewAddress->AddressFromString('10.145.65.156');
113 $NewAddress->Prefix = 32;
114 InsertToAddressTree($SubnetTree, $NewAddress);
115 $NewAddress = new NetworkAddressIPv4();
116 $NewAddress->AddressFromString('10.145.64.0');
117 $NewAddress->Prefix = 20;
118 InsertToAddressTree($SubnetTree, $NewAddress);
119
120
121 ShowSubnetNode($SubnetTree);
122 die();
123}
124*/
125
126?>
Note: See TracBrowser for help on using the repository browser.