build_interface

This commit is contained in:
devdatt 2025-12-23 00:43:18 +05:30
parent ff74d1ac20
commit 6cc98b1fa4
1 changed files with 37 additions and 14 deletions

View File

@ -136,33 +136,41 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
function build_interface(array $d, string $key): array function build_interface(array $d, string $key): array
{ {
$cfg = []; $cfg = [];
$addresses = [];
$routes = [];
/* ================= IPv4 ================= */
switch ($d['mode'] ?? 'disabled') {
/* IPv4 */
switch ($d['mode']) {
case 'dhcp': case 'dhcp':
$cfg['dhcp4'] = true; $cfg['dhcp4'] = true;
break; break;
case 'static': case 'static':
if (!empty($d["network_{$key}_ip"]) && !empty($d["network_{$key}_subnet"])) { if (!empty($d["network_{$key}_ip"]) && !empty($d["network_{$key}_subnet"])) {
$cfg['addresses'][] = $addresses[] =
$d["network_{$key}_ip"] . '/' . $d["network_{$key}_subnet"]; $d["network_{$key}_ip"] . '/' . $d["network_{$key}_subnet"];
} }
if (!empty($d["network_{$key}_gateway"])) { if (!empty($d["network_{$key}_gateway"])) {
$cfg['routes'][] = [ $routes[] = [
'to' => 'default', 'to' => 'default',
'via' => $d["network_{$key}_gateway"] 'via' => $d["network_{$key}_gateway"]
]; ];
} }
$cfg['dhcp4'] = false;
break; break;
case 'disabled': case 'disabled':
default:
$cfg['dhcp4'] = false; $cfg['dhcp4'] = false;
break; break;
} }
/* IPv6 */ /* ================= IPv6 ================= */
switch ($d['modev6']) { switch ($d['modev6'] ?? 'disabled') {
case 'auto': // SLAAC case 'auto': // SLAAC
$cfg['accept-ra'] = true; $cfg['accept-ra'] = true;
$cfg['dhcp6'] = false; $cfg['dhcp6'] = false;
@ -175,36 +183,51 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') {
case 'static': case 'static':
if (!empty($d["network_{$key}_ipv6"]) && !empty($d["network_{$key}_ipv6_prefix"])) { if (!empty($d["network_{$key}_ipv6"]) && !empty($d["network_{$key}_ipv6_prefix"])) {
$cfg['addresses'][] = $addresses[] =
$d["network_{$key}_ipv6"] . '/' . $d["network_{$key}_ipv6_prefix"]; $d["network_{$key}_ipv6"] . '/' . $d["network_{$key}_ipv6_prefix"];
} }
if (!empty($d["network_{$key}_ipv6_gateway"])) { if (!empty($d["network_{$key}_ipv6_gateway"])) {
$cfg['routes'][] = [ $routes[] = [
'to' => '::/0', 'to' => '::/0',
'via' => $d["network_{$key}_ipv6_gateway"] 'via' => $d["network_{$key}_ipv6_gateway"]
]; ];
} }
$cfg['dhcp6'] = false;
$cfg['accept-ra'] = false; $cfg['accept-ra'] = false;
break; break;
case 'disabled': case 'disabled':
default:
$cfg['dhcp6'] = false; $cfg['dhcp6'] = false;
$cfg['accept-ra'] = false; $cfg['accept-ra'] = false;
break; break;
} }
/* DNS */ /* ================= Addresses ================= */
$dns = array_filter([ if ($addresses) {
$cfg['addresses'] = $addresses;
}
/* ================= Routes ================= */
if ($routes) {
$cfg['routes'] = $routes;
}
/* ================= DNS ================= */
$dns = array_values(array_filter([
$d["network_{$key}_dns1"] ?? '', $d["network_{$key}_dns1"] ?? '',
$d["network_{$key}_dns2"] ?? '', $d["network_{$key}_dns2"] ?? '',
$d["network_{$key}_ipv6_dns1"] ?? '', $d["network_{$key}_ipv6_dns1"] ?? '',
$d["network_{$key}_ipv6_dns2"] ?? '' $d["network_{$key}_ipv6_dns2"] ?? '',
]); ]));
if ($dns) { if ($dns) {
$cfg['nameservers']['addresses'] = array_values($dns); $cfg['nameservers'] = [
'addresses' => $dns
];
} }
return $cfg; return $cfg;
} }