mirror of
https://github.com/pfsense/pfsense.git
synced 2025-10-26 11:38:35 +00:00
parent
fee8ef4f55
commit
9573afa82f
@ -64,15 +64,16 @@
|
||||
##|*MATCH=status_ipsec.php*
|
||||
##|-PRIV
|
||||
|
||||
require("guiconfig.inc");
|
||||
require_once("ipsec.inc");
|
||||
|
||||
global $g;
|
||||
|
||||
$pgtitle = array(gettext("Status"), gettext("IPsec"), gettext("Overview"));
|
||||
$shortcut_section = "ipsec";
|
||||
|
||||
require("guiconfig.inc");
|
||||
include("head.inc");
|
||||
require_once("ipsec.inc");
|
||||
// If this is just an AJAX call to update the table body, just generate the body and quit
|
||||
if ($_REQUEST['ajax']) {
|
||||
print_ipsec_body();
|
||||
exit;
|
||||
}
|
||||
|
||||
if ($_GET['act'] == 'connect') {
|
||||
if (ctype_digit($_GET['ikeid'])) {
|
||||
@ -111,9 +112,379 @@ if (!is_array($config['ipsec']['phase1'])) {
|
||||
$config['ipsec']['phase1'] = array();
|
||||
}
|
||||
|
||||
$a_phase1 = &$config['ipsec']['phase1'];
|
||||
// Table body is composed here so that it can be more easily updated via AJAX
|
||||
function print_ipsec_body() {
|
||||
global $config;
|
||||
|
||||
$status = ipsec_list_sa();
|
||||
$a_phase1 = &$config['ipsec']['phase1'];
|
||||
$status = ipsec_list_sa();
|
||||
$ipsecconnected = array();
|
||||
|
||||
if (is_array($status)) {
|
||||
foreach ($status as $ikeid => $ikesa) {
|
||||
$con_id = substr($ikeid, 3);
|
||||
|
||||
if ($ikesa['version'] == 1) {
|
||||
$ph1idx = substr($con_id, 0, strrpos(substr($con_id, 0, -1), '00'));
|
||||
$ipsecconnected[$ph1idx] = $ph1idx;
|
||||
} else {
|
||||
$ipsecconnected[$con_id] = $ph1idx = $con_id;
|
||||
}
|
||||
|
||||
print("<tr>\n");
|
||||
print("<td>\n");
|
||||
print(htmlspecialchars(ipsec_get_descr($ph1idx)));
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
if (!empty($ikesa['local-id'])) {
|
||||
if ($ikesa['local-id'] == '%any') {
|
||||
print(gettext('Any identifier'));
|
||||
} else {
|
||||
print(htmlspecialchars($ikesa['local-id']));
|
||||
}
|
||||
} else {
|
||||
print(gettext("Unknown"));
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
if (!empty($ikesa['local-host'])) {
|
||||
print(htmlspecialchars($ikesa['local-host']));
|
||||
} else {
|
||||
print(gettext("Unknown"));
|
||||
}
|
||||
|
||||
/*
|
||||
* XXX: local-nat-t was defined by pfSense
|
||||
* When strongswan team accepted the change, they changed it to
|
||||
* nat-local. Keep both for a while and remove local-nat-t in
|
||||
* the future
|
||||
*/
|
||||
if (isset($ikesa['local-nat-t']) || isset($ikesa['nat-local'])) {
|
||||
print("NAT-T");
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
$identity = "";
|
||||
if (!empty($ikesa['remote-id'])) {
|
||||
if ($ikesa['remote-id'] == '%any') {
|
||||
$identity = htmlspecialchars(gettext('Any identifier'));
|
||||
} else {
|
||||
$identity = htmlspecialchars($ikesa['remote-id']);
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($ikesa['remote-xauth-id'])) {
|
||||
echo htmlspecialchars($ikesa['remote-xauth-id']);
|
||||
echo "<br/>{$identity}";
|
||||
} elseif (!empty($ikesa['remote-eap-id'])) {
|
||||
echo htmlspecialchars($ikesa['remote-eap-id']);
|
||||
echo "<br/>{$identity}";
|
||||
} else {
|
||||
if (empty($identity)) {
|
||||
print(gettext("Unknown"));
|
||||
} else {
|
||||
print($identity);
|
||||
}
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
if (!empty($ikesa['remote-host'])) {
|
||||
print(htmlspecialchars($ikesa['remote-host']));
|
||||
} else {
|
||||
print(gettext("Unknown"));
|
||||
}
|
||||
/*
|
||||
* XXX: remote-nat-t was defined by pfSense
|
||||
* When strongswan team accepted the change, they changed it to
|
||||
* nat-remote. Keep both for a while and remove remote-nat-t in
|
||||
* the future
|
||||
*/
|
||||
if (isset($ikesa['remote-nat-t']) || isset($ikesa['nat-remote'])) {
|
||||
print(" NAT-T");
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
print("IKEv" . htmlspecialchars($ikesa['version']));
|
||||
print("<br/>\n");
|
||||
|
||||
if ($ikesa['initiator'] == 'yes') {
|
||||
print("initiator");
|
||||
} else {
|
||||
print("responder");
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
print(htmlspecialchars($ikesa['reauth-time']) . gettext(" seconds (") . convert_seconds_to_hms($ikesa['reauth-time']) . ")");
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
print(htmlspecialchars($ikesa['encr-alg']));
|
||||
print("<br/>");
|
||||
print(htmlspecialchars($ikesa['integ-alg']));
|
||||
print("<br/>");
|
||||
print(htmlspecialchars($ikesa['prf-alg']));
|
||||
print("<br/>\n");
|
||||
print(htmlspecialchars($ikesa['dh-group']));
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
if ($ikesa['state'] == 'ESTABLISHED') {
|
||||
print('<span class="text-success">');
|
||||
} else {
|
||||
print('<span>');
|
||||
}
|
||||
|
||||
print(ucfirst(htmlspecialchars($ikesa['state'])));
|
||||
print("<br/>" . htmlspecialchars($ikesa['established']) . gettext(" seconds (" . convert_seconds_to_hms($ikesa['established']) . ") ago"));
|
||||
print("</span>");
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
if ($ikesa['state'] != 'ESTABLISHED') {
|
||||
|
||||
print('<a href="status_ipsec.php?act=connect&ikeid=' . $con_id . '" class="btn btn-xs btn-success" data-toggle="tooltip" title="' . gettext("Connect VPN"). '" >');
|
||||
print('<i class="fa fa-sign-in icon-embed-btn"></i>');
|
||||
print(gettext("Connect VPN"));
|
||||
print("</a>\n");
|
||||
|
||||
} else {
|
||||
|
||||
print('<a href="status_ipsec.php?act=ikedisconnect&ikeid=' . $con_id . '" class="btn btn-xs btn-danger" data-toggle="tooltip" title="' . gettext("Disconnect VPN") . '">');
|
||||
print('<i class="fa fa-trash icon-embed-btn"></i>');
|
||||
print(gettext("Disconnect"));
|
||||
print("</a><br />\n");
|
||||
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("</tr>\n");
|
||||
print("<tr>\n");
|
||||
print("<td colspan = 10>\n");
|
||||
|
||||
if (is_array($ikesa['child-sas']) && (count($ikesa['child-sas']) > 0)) {
|
||||
|
||||
print('<div id="btnchildsa-' . $ikeid . '">');
|
||||
print('<a type="button" onclick="show_childsa(\'childsa-' . $ikeid . '\',\'btnchildsa-' . $ikeid. '\');" class="btn btn-sm btn-info">');
|
||||
print('<i class="fa fa-plus-circle icon-embed-btn"></i>');
|
||||
print(gettext('Show child SA entries'));
|
||||
print("</a>\n");
|
||||
print(" </div>\n");
|
||||
|
||||
print('<table class="table table-hover table-condensed" id="childsa-' . $ikeid . '" style="display:none">');
|
||||
print("<thead>\n");
|
||||
print('<tr class="bg-info">');
|
||||
print('<th><?=gettext("Local subnets")?></th>');
|
||||
print('<th><?=gettext("Local SPI(s)")?></th>');
|
||||
print('<th><?=gettext("Remote subnets")?></th>');
|
||||
print('<th><?=gettext("Times")?></th>');
|
||||
print('<th><?=gettext("Algo")?></th>');
|
||||
print('<th><?=gettext("Stats")?></th>');
|
||||
print('<th><!-- Buttons --></th>');
|
||||
print("</tr\n");
|
||||
print("</thead>\n");
|
||||
print("<tbody>\n");
|
||||
|
||||
foreach ($ikesa['child-sas'] as $childid => $childsa) {
|
||||
print("<tr>");
|
||||
print("<td>\n");
|
||||
|
||||
if (is_array($childsa['local-ts'])) {
|
||||
foreach ($childsa['local-ts'] as $lnets) {
|
||||
print(htmlspecialchars(ipsec_fixup_network($lnets)) . "<br />");
|
||||
}
|
||||
} else {
|
||||
print(gettext("Unknown"));
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
if (isset($childsa['spi-in'])) {
|
||||
print(gettext("Local: ") . htmlspecialchars($childsa['spi-in']));
|
||||
}
|
||||
|
||||
if (isset($childsa['spi-out'])) {
|
||||
print('<br/>' . gettext('Remote: ') . htmlspecialchars($childsa['spi-out']));
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
if (is_array($childsa['remote-ts'])) {
|
||||
foreach ($childsa['remote-ts'] as $rnets) {
|
||||
print(htmlspecialchars(ipsec_fixup_network($rnets)) . '<br />');
|
||||
}
|
||||
} else {
|
||||
print(gettext("Unknown"));
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
print(gettext("Rekey: ") . htmlspecialchars($childsa['rekey-time']) . gettext(" seconds (") . convert_seconds_to_hms($childsa['rekey-time']) . ")");
|
||||
print('<br/>' . gettext('Life: ') . htmlspecialchars($childsa['life-time']) . gettext(" seconds (") . convert_seconds_to_hms($childsa['life-time']) . ")");
|
||||
print('<br/>' . gettext('Install: ') .htmlspecialchars($childsa['install-time']) . gettext(" seconds (") . convert_seconds_to_hms($childsa['install-time']) . ")");
|
||||
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
print(htmlspecialchars($childsa['encr-alg']) . '<br/>');
|
||||
print(htmlspecialchars($childsa['integ-alg']) . '<br/>');
|
||||
|
||||
if (!empty($childsa['prf-alg'])) {
|
||||
print(htmlspecialchars($childsa['prf-alg']) . '<br/>');
|
||||
}
|
||||
|
||||
if (!empty($childsa['dh-group'])) {
|
||||
print(htmlspecialchars($childsa['dh-group']) . '<br/>');
|
||||
}
|
||||
|
||||
if (!empty($childsa['esn'])) {
|
||||
print(htmlspecialchars($childsa['esn']) . '<br/>');
|
||||
}
|
||||
|
||||
print(gettext("IPComp: "));
|
||||
if (!empty($childsa['cpi-in']) || !empty($childsa['cpi-out'])) {
|
||||
print(htmlspecialchars($childsa['cpi-in']) . " " . htmlspecialchars($childsa['cpi-out']));
|
||||
} else {
|
||||
print(gettext('none'));
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
print(gettext("Bytes-In: ") . htmlspecialchars(number_format($childsa['bytes-in'])) . ' (' . htmlspecialchars(format_bytes($childsa['bytes-in'])) . ')<br/>');
|
||||
print(gettext("Packets-In: ") . htmlspecialchars(number_format($childsa['packets-in'])) . '<br/>');
|
||||
print(gettext("Bytes-Out: ") . htmlspecialchars(number_format($childsa['bytes-out'])) . ' (' . htmlspecialchars(format_bytes($childsa['bytes-out'])) . ')<br/>');
|
||||
print(gettext("Packets-Out: ") . htmlspecialchars(number_format($childsa['packets-out'])) . '<br/>');
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
print('<a href="status_ipsec.php?act=childdisconnect&ikeid=' . $con_id . '&ikesaid=' . $childsa['uniqueid'] . '" class="btn btn-xs btn-warning" data-toggle="tooltip" title="' . gettext('Disconnect Child SA') . '">');
|
||||
print('<i class="fa fa-trash icon-embed-btn"></i>');
|
||||
print(gettext("Disconnect"));
|
||||
print("</a>\n");
|
||||
print("</td>\n");
|
||||
print("</tr>\n");
|
||||
|
||||
}
|
||||
|
||||
print("</tbody>\n");
|
||||
print(" </table>\n");
|
||||
print("</td>\n");
|
||||
print(" /tr>\n");
|
||||
|
||||
}
|
||||
|
||||
unset($con_id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$rgmap = array();
|
||||
foreach ($a_phase1 as $ph1ent) {
|
||||
if (isset($ph1ent['disabled'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$rgmap[$ph1ent['remote-gateway']] = $ph1ent['remote-gateway'];
|
||||
|
||||
if ($ipsecconnected[$ph1ent['ikeid']]) {
|
||||
continue;
|
||||
}
|
||||
|
||||
print("<tr>\n");
|
||||
print("<td>\n");
|
||||
|
||||
print(htmlspecialchars($ph1ent['descr']));
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
list ($myid_type, $myid_data) = ipsec_find_id($ph1ent, "local");
|
||||
|
||||
if (empty($myid_data)) {
|
||||
print(gettext("Unknown"));
|
||||
} else {
|
||||
print(htmlspecialchars($myid_data));
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
$ph1src = ipsec_get_phase1_src($ph1ent);
|
||||
|
||||
if (empty($ph1src)) {
|
||||
print(gettext("Unknown"));
|
||||
} else {
|
||||
print(htmlspecialchars($ph1src));
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
|
||||
list ($peerid_type, $peerid_data) = ipsec_find_id($ph1ent, "peer", $rgmap);
|
||||
|
||||
if (empty($peerid_data)) {
|
||||
print(gettext("Unknown"));
|
||||
} else {
|
||||
print(htmlspecialchars($peerid_data));
|
||||
}
|
||||
print(" </td>\n");
|
||||
print(" <td>\n");
|
||||
$ph1src = ipsec_get_phase1_dst($ph1ent);
|
||||
|
||||
if (empty($ph1src)) {
|
||||
print(gettext("Unknown"));
|
||||
} else {
|
||||
print(htmlspecialchars($ph1src));
|
||||
}
|
||||
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
print("</td>\n");
|
||||
|
||||
if (isset($ph1ent['mobile'])) {
|
||||
|
||||
print("<td>\n");
|
||||
print(gettext("Awaiting connections"));
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
print("</td>\n");
|
||||
print("</td>\n");
|
||||
} else {
|
||||
|
||||
print("<td>\n");
|
||||
print(gettext("Disconnected"));
|
||||
print("</td>\n");
|
||||
print("<td>\n");
|
||||
print('<a href="status_ipsec.php?act=connect&ikeid=' . $ph1ent['ikeid'] . '" class="btn btn-xs btn-success">');
|
||||
print('<i class="fa fa-sign-in icon-embed-btn"></i>');
|
||||
print(gettext("Connect VPN"));
|
||||
print("</a>\n");
|
||||
print("</td>\n");
|
||||
|
||||
}
|
||||
print("</tr>\n");
|
||||
}
|
||||
|
||||
unset($ipsecconnected, $phase1, $rgmap);
|
||||
}
|
||||
|
||||
$pgtitle = array(gettext("Status"), gettext("IPsec"), gettext("Overview"));
|
||||
$shortcut_section = "ipsec";
|
||||
|
||||
include("head.inc");
|
||||
|
||||
$tab_array = array();
|
||||
$tab_array[] = array(gettext("Overview"), true, "status_ipsec.php");
|
||||
@ -141,400 +512,91 @@ display_top_tabs($tab_array);
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
$ipsecconnected = array();
|
||||
|
||||
if (is_array($status)) {
|
||||
foreach ($status as $ikeid => $ikesa) {
|
||||
$con_id = substr($ikeid, 3);
|
||||
|
||||
if ($ikesa['version'] == 1) {
|
||||
$ph1idx = substr($con_id, 0, strrpos(substr($con_id, 0, -1), '00'));
|
||||
$ipsecconnected[$ph1idx] = $ph1idx;
|
||||
} else {
|
||||
$ipsecconnected[$con_id] = $ph1idx = $con_id;
|
||||
}
|
||||
?>
|
||||
<tbody id="ipsec-body">
|
||||
<tr>
|
||||
<td>
|
||||
<?=htmlspecialchars(ipsec_get_descr($ph1idx))?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
if (!empty($ikesa['local-id'])) {
|
||||
if ($ikesa['local-id'] == '%any') {
|
||||
print(gettext('Any identifier'));
|
||||
} else {
|
||||
print(htmlspecialchars($ikesa['local-id']));
|
||||
}
|
||||
} else {
|
||||
print(gettext("Unknown"));
|
||||
}
|
||||
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
if (!empty($ikesa['local-host'])) {
|
||||
print(htmlspecialchars($ikesa['local-host']));
|
||||
} else {
|
||||
print(gettext("Unknown"));
|
||||
}
|
||||
/*
|
||||
* XXX: local-nat-t was defined by pfSense
|
||||
* When strongswan team accepted the change, they changed it to
|
||||
* nat-local. Keep both for a while and remove local-nat-t in
|
||||
* the future
|
||||
*/
|
||||
if (isset($ikesa['local-nat-t']) || isset($ikesa['nat-local'])) {
|
||||
print(" NAT-T");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
$identity = "";
|
||||
if (!empty($ikesa['remote-id'])) {
|
||||
if ($ikesa['remote-id'] == '%any') {
|
||||
$identity = htmlspecialchars(gettext('Any identifier'));
|
||||
} else {
|
||||
$identity = htmlspecialchars($ikesa['remote-id']);
|
||||
}
|
||||
}
|
||||
if (!empty($ikesa['remote-xauth-id'])) {
|
||||
echo htmlspecialchars($ikesa['remote-xauth-id']);
|
||||
echo "<br/>{$identity}";
|
||||
} elseif (!empty($ikesa['remote-eap-id'])) {
|
||||
echo htmlspecialchars($ikesa['remote-eap-id']);
|
||||
echo "<br/>{$identity}";
|
||||
} else {
|
||||
if (empty($identity)) {
|
||||
print(gettext("Unknown"));
|
||||
} else {
|
||||
print($identity);
|
||||
}
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
if (!empty($ikesa['remote-host'])) {
|
||||
print(htmlspecialchars($ikesa['remote-host']));
|
||||
} else {
|
||||
print(gettext("Unknown"));
|
||||
}
|
||||
/*
|
||||
* XXX: remote-nat-t was defined by pfSense
|
||||
* When strongswan team accepted the change, they changed it to
|
||||
* nat-remote. Keep both for a while and remove remote-nat-t in
|
||||
* the future
|
||||
*/
|
||||
if (isset($ikesa['remote-nat-t']) || isset($ikesa['nat-remote'])) {
|
||||
print(" NAT-T");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
IKEv<?=htmlspecialchars($ikesa['version'])?>
|
||||
<br/>
|
||||
<?php
|
||||
if ($ikesa['initiator'] == 'yes') {
|
||||
print("initiator");
|
||||
} else {
|
||||
print("responder");
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?=htmlspecialchars($ikesa['reauth-time']) . gettext(" seconds (") . convert_seconds_to_hms($ikesa['reauth-time']) . ")";?>
|
||||
</td>
|
||||
<td>
|
||||
<?=htmlspecialchars($ikesa['encr-alg'])?>
|
||||
<br/>
|
||||
<?=htmlspecialchars($ikesa['integ-alg'])?>
|
||||
<br/>
|
||||
<?=htmlspecialchars($ikesa['prf-alg'])?>
|
||||
<br/>
|
||||
<?=htmlspecialchars($ikesa['dh-group'])?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
if ($ikesa['state'] == 'ESTABLISHED') {
|
||||
print('<span class="text-success">');
|
||||
} else {
|
||||
print('<span>');
|
||||
}
|
||||
?>
|
||||
<?=ucfirst(htmlspecialchars($ikesa['state']))?>
|
||||
<br/><?=htmlspecialchars($ikesa['established']) . gettext(" seconds (" . convert_seconds_to_hms($ikesa['established']) . ") ago")?>
|
||||
</span>
|
||||
</td>
|
||||
<td >
|
||||
<?php
|
||||
if ($ikesa['state'] != 'ESTABLISHED') {
|
||||
?>
|
||||
<a href="status_ipsec.php?act=connect&ikeid=<?=$con_id; ?>" class="btn btn-xs btn-success" data-toggle="tooltip" title="<?=gettext("Connect VPN");?>" >
|
||||
<i class="fa fa-sign-in icon-embed-btn"></i>
|
||||
<?=gettext("Connect VPN")?>
|
||||
</a>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
<a href="status_ipsec.php?act=ikedisconnect&ikeid=<?=$con_id; ?>" class="btn btn-xs btn-danger" data-toggle="tooltip" title="<?=gettext("Disconnect VPN");?>">
|
||||
<i class="fa fa-trash icon-embed-btn"></i>
|
||||
<?=gettext("Disconnect")?>
|
||||
</a><br />
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<td colspan="9">
|
||||
<?=print_info_box(gettext("Collecting IPSec status information"), warning, "")?>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td colspan = 10>
|
||||
<?php
|
||||
if (is_array($ikesa['child-sas']) && (count($ikesa['child-sas']) > 0)) {
|
||||
?>
|
||||
<div id="btnchildsa-<?=$ikeid?>">
|
||||
<a type="button" onclick="show_childsa('childsa-<?=$ikeid?>','btnchildsa-<?=$ikeid?>');" class="btn btn-sm btn-info" />
|
||||
<i class="fa fa-plus-circle icon-embed-btn"></i>
|
||||
<?=gettext('Show child SA entries')?>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<table class="table table-hover table-condensed" id="childsa-<?=$ikeid?>" style="display:none">
|
||||
<thead>
|
||||
<tr class="bg-info">
|
||||
<th><?=gettext("Local subnets")?></th>
|
||||
<th><?=gettext("Local SPI(s)")?></th>
|
||||
<th><?=gettext("Remote subnets")?></th>
|
||||
<th><?=gettext("Times")?></th>
|
||||
<th><?=gettext("Algo")?></th>
|
||||
<th><?=gettext("Stats")?></th>
|
||||
<th><!-- Buttons --></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
foreach ($ikesa['child-sas'] as $childid => $childsa) {
|
||||
?>
|
||||
<tr>
|
||||
<td>
|
||||
<?php
|
||||
if (is_array($childsa['local-ts'])) {
|
||||
foreach ($childsa['local-ts'] as $lnets) {
|
||||
print(htmlspecialchars(ipsec_fixup_network($lnets)) . "<br />");
|
||||
}
|
||||
} else {
|
||||
print(gettext("Unknown"));
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
if (isset($childsa['spi-in'])) {
|
||||
print(gettext("Local: ") . htmlspecialchars($childsa['spi-in']));
|
||||
}
|
||||
|
||||
if (isset($childsa['spi-out'])) {
|
||||
print('<br/>' . gettext('Remote: ') . htmlspecialchars($childsa['spi-out']));
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
if (is_array($childsa['remote-ts'])) {
|
||||
foreach ($childsa['remote-ts'] as $rnets) {
|
||||
print(htmlspecialchars(ipsec_fixup_network($rnets)) . '<br />');
|
||||
}
|
||||
} else {
|
||||
print(gettext("Unknown"));
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
print(gettext("Rekey: ") . htmlspecialchars($childsa['rekey-time']) . gettext(" seconds (") . convert_seconds_to_hms($childsa['rekey-time']) . ")");
|
||||
print('<br/>' . gettext('Life: ') . htmlspecialchars($childsa['life-time']) . gettext(" seconds (") . convert_seconds_to_hms($childsa['life-time']) . ")");
|
||||
print('<br/>' . gettext('Install: ') .htmlspecialchars($childsa['install-time']) . gettext(" seconds (") . convert_seconds_to_hms($childsa['install-time']) . ")");
|
||||
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
print(htmlspecialchars($childsa['encr-alg']) . '<br/>');
|
||||
print(htmlspecialchars($childsa['integ-alg']) . '<br/>');
|
||||
|
||||
if (!empty($childsa['prf-alg'])) {
|
||||
print(htmlspecialchars($childsa['prf-alg']) . '<br/>');
|
||||
}
|
||||
if (!empty($childsa['dh-group'])) {
|
||||
print(htmlspecialchars($childsa['dh-group']) . '<br/>');
|
||||
}
|
||||
if (!empty($childsa['esn'])) {
|
||||
print(htmlspecialchars($childsa['esn']) . '<br/>');
|
||||
}
|
||||
|
||||
print(gettext("IPComp: "));
|
||||
if (!empty($childsa['cpi-in']) || !empty($childsa['cpi-out'])) {
|
||||
print(htmlspecialchars($childsa['cpi-in']) . " " . htmlspecialchars($childsa['cpi-out']));
|
||||
} else {
|
||||
print(gettext('none'));
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
print(gettext("Bytes-In: ") . htmlspecialchars(number_format($childsa['bytes-in'])) . ' (' . htmlspecialchars(format_bytes($childsa['bytes-in'])) . ')<br/>');
|
||||
print(gettext("Packets-In: ") . htmlspecialchars(number_format($childsa['packets-in'])) . '<br/>');
|
||||
print(gettext("Bytes-Out: ") . htmlspecialchars(number_format($childsa['bytes-out'])) . ' (' . htmlspecialchars(format_bytes($childsa['bytes-out'])) . ')<br/>');
|
||||
print(gettext("Packets-Out: ") . htmlspecialchars(number_format($childsa['packets-out'])) . '<br/>');
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<a href="status_ipsec.php?act=childdisconnect&ikeid=<?=$con_id; ?>&ikesaid=<?=$childsa['uniqueid']; ?>" class="btn btn-xs btn-warning" data-toggle="tooltip" title="<?=gettext('Disconnect Child SA')?>">
|
||||
<i class="fa fa-trash icon-embed-btn"></i>
|
||||
<?=gettext("Disconnect")?>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
|
||||
</tbody>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
|
||||
unset($con_id);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$rgmap = array();
|
||||
foreach ($a_phase1 as $ph1ent) {
|
||||
if (isset($ph1ent['disabled'])) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$rgmap[$ph1ent['remote-gateway']] = $ph1ent['remote-gateway'];
|
||||
|
||||
if ($ipsecconnected[$ph1ent['ikeid']]) {
|
||||
continue;
|
||||
}
|
||||
?>
|
||||
<tr>
|
||||
<td>
|
||||
<?php
|
||||
print(htmlspecialchars($ph1ent['descr']));
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
list ($myid_type, $myid_data) = ipsec_find_id($ph1ent, "local");
|
||||
if (empty($myid_data)) {
|
||||
print(gettext("Unknown"));
|
||||
} else {
|
||||
print(htmlspecialchars($myid_data));
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
$ph1src = ipsec_get_phase1_src($ph1ent);
|
||||
|
||||
if (empty($ph1src)) {
|
||||
print(gettext("Unknown"));
|
||||
} else {
|
||||
print(htmlspecialchars($ph1src));
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
list ($peerid_type, $peerid_data) = ipsec_find_id($ph1ent, "peer", $rgmap);
|
||||
if (empty($peerid_data)) {
|
||||
print(gettext("Unknown"));
|
||||
} else {
|
||||
print(htmlspecialchars($peerid_data));
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
<?php
|
||||
$ph1src = ipsec_get_phase1_dst($ph1ent);
|
||||
if (empty($ph1src)) {
|
||||
print(gettext("Unknown"));
|
||||
} else {
|
||||
print(htmlspecialchars($ph1src));
|
||||
}
|
||||
?>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<?php
|
||||
if (isset($ph1ent['mobile'])) {
|
||||
?>
|
||||
<td>
|
||||
<?=gettext("Awaiting connections")?>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
<td>
|
||||
<?=gettext("Disconnected")?>
|
||||
</td>
|
||||
<td >
|
||||
<a href="status_ipsec.php?act=connect&ikeid=<?=$ph1ent['ikeid']; ?>" class="btn btn-xs btn-success">
|
||||
<i class="fa fa-sign-in icon-embed-btn"></i>
|
||||
<?=gettext("Connect VPN")?>
|
||||
</a>
|
||||
</td>
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
</tr>
|
||||
<?php
|
||||
}
|
||||
unset($ipsecconnected, $phase1, $rgmap);
|
||||
?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
unset($status);
|
||||
|
||||
if (ipsec_enabled()) {
|
||||
print('<div class="infoblock">');
|
||||
} else {
|
||||
print('<div class="infoblock blockopen">');
|
||||
}
|
||||
|
||||
print_info_box(sprintf(gettext('IPsec can be configured %1$shere%2$s.'), '<a href="vpn_ipsec.php">', '</a>'), 'info', false);
|
||||
?>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
//<![CDATA[
|
||||
|
||||
// Array in which to keep hte SA show/hide state
|
||||
sa_open = new Array();
|
||||
|
||||
function show_childsa(id, buttonid) {
|
||||
document.getElementById(buttonid).innerHTML='';
|
||||
aodiv = document.getElementById(id);
|
||||
aodiv.style.display = "table";
|
||||
$('#' + id).show();
|
||||
$('#' + buttonid).hide();
|
||||
|
||||
// Record the ID of the SA we have revealed so that it can automatically be shown on AJAX reload
|
||||
idnum = id.replace( /^\D+/g, '');
|
||||
sa_open[idnum] = true;
|
||||
}
|
||||
|
||||
events.push(function() {
|
||||
ajax_lock = false; // Mutex so we don't make a call until the previous call is finished
|
||||
sa_open = [];
|
||||
|
||||
// Fetch the tbody contents from the server
|
||||
function update_table() {
|
||||
if (ajax_lock) {
|
||||
return;
|
||||
}
|
||||
|
||||
ajax_lock = true;
|
||||
|
||||
ajaxRequest = $.ajax(
|
||||
{
|
||||
url: "/status_ipsec.php",
|
||||
type: "post",
|
||||
data: {
|
||||
ajax: "ajax"
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Deal with the results of the above ajax call
|
||||
ajaxRequest.done(function (response, textStatus, jqXHR) {
|
||||
$('#ipsec-body').html(response);
|
||||
ajax_lock = false;
|
||||
|
||||
// Check the sa_open array for SAs we have chosen to show
|
||||
$('[id^=childsa-con]').each(function(idx) {
|
||||
sa_idx = idx + 1;
|
||||
|
||||
if (sa_open[sa_idx]) {
|
||||
show_childsa("childsa-con" + sa_idx, "btnchildsa-con" + sa_idx);
|
||||
}
|
||||
});
|
||||
|
||||
// and do it again
|
||||
setTimeout(update_table, 5000);
|
||||
});
|
||||
}
|
||||
|
||||
// Populate the tbody on page load
|
||||
update_table();
|
||||
});
|
||||
//]]>
|
||||
</script>
|
||||
|
||||
<?php
|
||||
unset($status);
|
||||
if (ipsec_enabled()) {
|
||||
?>
|
||||
<div class="infoblock">
|
||||
<?php
|
||||
} else {
|
||||
?>
|
||||
<div class="infoblock blockopen">
|
||||
<?php
|
||||
}
|
||||
print_info_box(sprintf(gettext('IPsec can be configured %1$shere%2$s.'), '<a href="vpn_ipsec.php">', '</a>'), 'info', false);
|
||||
?>
|
||||
</div>
|
||||
<?php
|
||||
include("foot.inc"); ?>
|
||||
|
||||
Loading…
Reference in New Issue
Block a user