Revision b45630bf
Added by Jim Pingle about 14 years ago
usr/local/www/diag_arp.php | ||
---|---|---|
88 | 88 |
$p = 0; |
89 | 89 |
// Put everything together again |
90 | 90 |
while($i < $leases_count) { |
91 |
/* split the line by space */
|
|
92 |
$data = explode(" ", $leases_content[$i]);
|
|
93 |
/* walk the fields */
|
|
94 |
$f = 0;
|
|
95 |
$fcount = count($data);
|
|
96 |
/* with less then 20 fields there is nothing useful */
|
|
97 |
if($fcount < 20) {
|
|
98 |
$i++;
|
|
99 |
continue;
|
|
100 |
}
|
|
101 |
while($f < $fcount) {
|
|
102 |
switch($data[$f]) {
|
|
103 |
case "failover":
|
|
104 |
$pools[$p]['name'] = $data[$f+2];
|
|
105 |
$pools[$p]['mystate'] = $data[$f+7];
|
|
106 |
$pools[$p]['peerstate'] = $data[$f+14];
|
|
107 |
$pools[$p]['mydate'] = $data[$f+10];
|
|
108 |
$pools[$p]['mydate'] .= " " . $data[$f+11];
|
|
109 |
$pools[$p]['peerdate'] = $data[$f+17];
|
|
110 |
$pools[$p]['peerdate'] .= " " . $data[$f+18];
|
|
111 |
$p++;
|
|
112 |
$i++;
|
|
113 |
continue 3;
|
|
114 |
case "lease":
|
|
115 |
$leases[$l]['ip'] = $data[$f+1];
|
|
116 |
$leases[$l]['type'] = "dynamic";
|
|
117 |
$f = $f+2;
|
|
118 |
break;
|
|
119 |
case "starts":
|
|
120 |
$leases[$l]['start'] = $data[$f+2];
|
|
121 |
$leases[$l]['start'] .= " " . $data[$f+3];
|
|
122 |
$f = $f+3;
|
|
123 |
break;
|
|
124 |
case "ends":
|
|
125 |
$leases[$l]['end'] = $data[$f+2];
|
|
126 |
$leases[$l]['end'] .= " " . $data[$f+3];
|
|
127 |
$f = $f+3;
|
|
128 |
break;
|
|
129 |
case "tstp":
|
|
130 |
$f = $f+3;
|
|
131 |
break;
|
|
132 |
case "tsfp":
|
|
133 |
$f = $f+3;
|
|
134 |
break;
|
|
135 |
case "atsfp":
|
|
136 |
$f = $f+3;
|
|
137 |
break;
|
|
138 |
case "cltt":
|
|
139 |
$f = $f+3;
|
|
140 |
break;
|
|
141 |
case "binding":
|
|
142 |
switch($data[$f+2]) {
|
|
143 |
case "active":
|
|
144 |
$leases[$l]['act'] = "active";
|
|
145 |
break;
|
|
146 |
case "free":
|
|
147 |
$leases[$l]['act'] = "expired";
|
|
148 |
$leases[$l]['online'] = "offline";
|
|
149 |
break;
|
|
150 |
case "backup":
|
|
151 |
$leases[$l]['act'] = "reserved";
|
|
152 |
$leases[$l]['online'] = "offline";
|
|
153 |
break;
|
|
154 |
}
|
|
155 |
$f = $f+1;
|
|
156 |
break;
|
|
157 |
case "next":
|
|
158 |
/* skip the next binding statement */
|
|
159 |
$f = $f+3;
|
|
160 |
break;
|
|
91 |
/* split the line by space */
|
|
92 |
$data = explode(" ", $leases_content[$i]);
|
|
93 |
/* walk the fields */
|
|
94 |
$f = 0;
|
|
95 |
$fcount = count($data);
|
|
96 |
/* with less then 20 fields there is nothing useful */
|
|
97 |
if($fcount < 20) {
|
|
98 |
$i++;
|
|
99 |
continue;
|
|
100 |
}
|
|
101 |
while($f < $fcount) {
|
|
102 |
switch($data[$f]) {
|
|
103 |
case "failover":
|
|
104 |
$pools[$p]['name'] = $data[$f+2];
|
|
105 |
$pools[$p]['mystate'] = $data[$f+7];
|
|
106 |
$pools[$p]['peerstate'] = $data[$f+14];
|
|
107 |
$pools[$p]['mydate'] = $data[$f+10];
|
|
108 |
$pools[$p]['mydate'] .= " " . $data[$f+11];
|
|
109 |
$pools[$p]['peerdate'] = $data[$f+17];
|
|
110 |
$pools[$p]['peerdate'] .= " " . $data[$f+18];
|
|
111 |
$p++;
|
|
112 |
$i++;
|
|
113 |
continue 3;
|
|
114 |
case "lease":
|
|
115 |
$leases[$l]['ip'] = $data[$f+1];
|
|
116 |
$leases[$l]['type'] = "dynamic";
|
|
117 |
$f = $f+2;
|
|
118 |
break;
|
|
119 |
case "starts":
|
|
120 |
$leases[$l]['start'] = $data[$f+2];
|
|
121 |
$leases[$l]['start'] .= " " . $data[$f+3];
|
|
122 |
$f = $f+3;
|
|
123 |
break;
|
|
124 |
case "ends":
|
|
125 |
$leases[$l]['end'] = $data[$f+2];
|
|
126 |
$leases[$l]['end'] .= " " . $data[$f+3];
|
|
127 |
$f = $f+3;
|
|
128 |
break;
|
|
129 |
case "tstp":
|
|
130 |
$f = $f+3;
|
|
131 |
break;
|
|
132 |
case "tsfp":
|
|
133 |
$f = $f+3;
|
|
134 |
break;
|
|
135 |
case "atsfp":
|
|
136 |
$f = $f+3;
|
|
137 |
break;
|
|
138 |
case "cltt":
|
|
139 |
$f = $f+3;
|
|
140 |
break;
|
|
141 |
case "binding":
|
|
142 |
switch($data[$f+2]) {
|
|
143 |
case "active":
|
|
144 |
$leases[$l]['act'] = "active";
|
|
145 |
break;
|
|
146 |
case "free":
|
|
147 |
$leases[$l]['act'] = "expired";
|
|
148 |
$leases[$l]['online'] = "offline";
|
|
149 |
break;
|
|
150 |
case "backup":
|
|
151 |
$leases[$l]['act'] = "reserved";
|
|
152 |
$leases[$l]['online'] = "offline";
|
|
153 |
break;
|
|
154 |
}
|
|
155 |
$f = $f+1;
|
|
156 |
break;
|
|
157 |
case "next":
|
|
158 |
/* skip the next binding statement */
|
|
159 |
$f = $f+3;
|
|
160 |
break;
|
|
161 | 161 |
case "rewind": |
162 | 162 |
/* skip the rewind binding statement */ |
163 | 163 |
$f = $f+3; |
164 | 164 |
break; |
165 |
case "hardware":
|
|
166 |
$leases[$l]['mac'] = $data[$f+2];
|
|
167 |
/* check if it's online and the lease is active */
|
|
168 |
if($leases[$l]['act'] == "active") {
|
|
169 |
$online = exec("/usr/sbin/arp -an |/usr/bin/awk '/{$leases[$l]['ip']}/ {print}'|wc -l");
|
|
170 |
if ($online == 1) {
|
|
171 |
$leases[$l]['online'] = 'online';
|
|
172 |
} else {
|
|
173 |
$leases[$l]['online'] = 'offline';
|
|
174 |
}
|
|
175 |
}
|
|
176 |
$f = $f+2;
|
|
177 |
break;
|
|
178 |
case "client-hostname":
|
|
179 |
if($data[$f+1] <> "") {
|
|
180 |
$leases[$l]['hostname'] = preg_replace('/"/','',$data[$f+1]);
|
|
181 |
} else {
|
|
182 |
$hostname = gethostbyaddr($leases[$l]['ip']);
|
|
183 |
if($hostname <> "") {
|
|
184 |
$leases[$l]['hostname'] = $hostname;
|
|
185 |
}
|
|
186 |
}
|
|
187 |
$f = $f+1;
|
|
188 |
break;
|
|
189 |
case "uid":
|
|
190 |
$f = $f+1;
|
|
191 |
break;
|
|
192 |
}
|
|
193 |
$f++;
|
|
194 |
}
|
|
195 |
$l++;
|
|
196 |
$i++;
|
|
165 |
case "hardware":
|
|
166 |
$leases[$l]['mac'] = $data[$f+2];
|
|
167 |
/* check if it's online and the lease is active */
|
|
168 |
if($leases[$l]['act'] == "active") {
|
|
169 |
$online = exec("/usr/sbin/arp -an |/usr/bin/awk '/{$leases[$l]['ip']}/ {print}'|wc -l");
|
|
170 |
if ($online == 1) {
|
|
171 |
$leases[$l]['online'] = 'online';
|
|
172 |
} else {
|
|
173 |
$leases[$l]['online'] = 'offline';
|
|
174 |
}
|
|
175 |
}
|
|
176 |
$f = $f+2;
|
|
177 |
break;
|
|
178 |
case "client-hostname":
|
|
179 |
if($data[$f+1] <> "") {
|
|
180 |
$leases[$l]['hostname'] = preg_replace('/"/','',$data[$f+1]);
|
|
181 |
} else {
|
|
182 |
$hostname = gethostbyaddr($leases[$l]['ip']);
|
|
183 |
if($hostname <> "") {
|
|
184 |
$leases[$l]['hostname'] = $hostname;
|
|
185 |
}
|
|
186 |
}
|
|
187 |
$f = $f+1;
|
|
188 |
break;
|
|
189 |
case "uid":
|
|
190 |
$f = $f+1;
|
|
191 |
break;
|
|
192 |
}
|
|
193 |
$f++;
|
|
194 |
}
|
|
195 |
$l++;
|
|
196 |
$i++;
|
|
197 | 197 |
} |
198 | 198 |
|
199 | 199 |
/* remove duplicate items by mac address */ |
200 | 200 |
if(count($leases) > 0) { |
201 |
$leases = remove_duplicate($leases,"ip");
|
|
201 |
$leases = remove_duplicate($leases,"ip");
|
|
202 | 202 |
} |
203 | 203 |
|
204 | 204 |
if(count($pools) > 0) { |
205 |
$pools = remove_duplicate($pools,"name");
|
|
206 |
asort($pools);
|
|
205 |
$pools = remove_duplicate($pools,"name");
|
|
206 |
asort($pools);
|
|
207 | 207 |
} |
208 | 208 |
|
209 | 209 |
// Put this in an easy to use form |
... | ... | |
239 | 239 |
} |
240 | 240 |
} |
241 | 241 |
|
242 |
function _getHostName($mac,$ip) |
|
243 |
{ |
|
242 |
function _getHostName($mac,$ip) { |
|
244 | 243 |
global $dhcpmac, $dhcpip; |
245 | 244 |
|
246 | 245 |
if ($dhcpmac[$mac]) |
Also available in: Unified diff
Fix whitespace.