Merge pull request #1943 from RaspAP/fix/config-defaults

Fix: Apply default values in absence of network configs
This commit is contained in:
Bill Zimmerman
2025-09-12 09:35:14 +02:00
committed by GitHub
3 changed files with 133 additions and 77 deletions

View File

@@ -1,15 +1,15 @@
{
"hostapd":{
"modes":{
"n":{
"settings":[
"hostapd": {
"modes": {
"n": {
"settings": [
"hw_mode=g",
"ieee80211n=1",
"wmm_enabled=1"
]
},
"ac":{
"settings":[
"ac": {
"settings": [
"hw_mode=a",
"# N",
"ieee80211n=1",
@@ -25,90 +25,117 @@
"vht_oper_centr_freq_seg0_idx={VHT_FREQ_IDX}"
]
},
"g":{
"settings":[
"g": {
"settings": [
"hw_mode=g",
"ieee80211n=0"
]
},
"a":{
"settings":[
"a": {
"settings": [
"hw_mode=a",
"ieee80211n=0"
]
},
"b":{
"settings":[
"b": {
"settings": [
"hw_mode=b",
"ieee80211n=0"
]
}
}
},
"dhcp": {
"wlan0": {
"static ip_address": [ "10.3.141.1" ],
"static routers": [ "10.3.141.1" ],
"static domain_name_server": [ "1.1.1.1 8.8.8.8" ],
"subnetmask": [ "255.255.255.0" ]
},
"dhcp":{
"wlan0":{
"static ip_address":[ "10.3.141.1/24" ],
"static routers":[ "10.3.141.1" ],
"static domain_name_server":[ "1.1.1.1 8.8.8.8" ],
"subnetmask":[ "255.255.255.0" ]
},
"wlan1":{
"static ip_address":[ "10.9.141.1/24" ],
"static routers":[ "10.9.141.1" ],
"static domain_name_server":[ "1.1.1.1 8.8.8.8" ],
"subnetmask":[ "255.255.255.0" ]
},
"uap0":{
"static ip_address":[ "192.168.50.1/24" ],
"static routers":[ "192.168.50.1" ],
"static domain_name_server":[ "1.1.1.1 8.8.8.8" ],
"subnetmask":[ "255.255.255.0" ]
},
"options":{
"# RaspAP default configuration":null,
"hostname":null,
"clientid":null,
"persistent":null,
"option rapid_commit":null,
"option domain_name_servers, domain_name, domain_search, host_name":null,
"option classless_static_routes":null,
"option ntp_servers":null,
"require dhcp_server_identifier":null,
"slaac private":null,
"nohook lookup-hostname":null
}
"wlan1": {
"static ip_address": [ "10.9.141.1" ],
"static routers": [ "10.9.141.1" ],
"static domain_name_server": [ "1.1.1.1 8.8.8.8" ],
"subnetmask": [ "255.255.255.0" ]
},
"dnsmasq":{
"wlan0":{
"dhcp-range":[ "10.3.141.50,10.3.141.254,255.255.255.0,12h" ]
},
"wlan1":{
"dhcp-range":[ "10.9.141.50,10.9.141.254,255.255.255.0,12h" ]
},
"uap0":{
"dhcp-range":[ "192.168.50.50,192.168.50.150,12h" ]
}
"wlan2": {
"static ip_address": [ "10.6.141.1" ],
"static routers": [ "10.6.141.1" ],
"static domain_name_server": [ "1.1.1.1 8.8.8.8" ],
"subnetmask": [ "255.255.255.0" ]
},
"wireguard":{
"server":{
"Address":[ "10.8.2.1/24" ],
"ListenPort":[ "51820" ],
"DNS":[ "9.9.9.9" ],
"PostUp":[ "iptables -A FORWARD -i wlan0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE" ],
"PostDown":[ "iptables -D FORWARD -i wlan0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -o wg0 -j MASQUERADE" ],
"PostUpEx":[ "iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL ! -d %s -j REJECT" ],
"PreDown":[ "iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL ! -d %s -j REJECT" ]
},
"peer":{
"Address":[ "10.8.1.2/24" ],
"Endpoint":[ "10.8.2.1:51820" ],
"ListenPort":[ "21841" ],
"AllowedIPs":[ "10.8.2.0/24" ],
"PersistentKeepalive":[ "15" ]
}
},
"txpower": {
"dbm": [ "auto", "30", "20", "17", "10", "6", "3", "1", "0" ]
}
"uap0": {
"static ip_address": ["192.168.50.1" ],
"static routers": [ "192.168.50.1" ],
"static domain_name_server": [ "1.1.1.1 8.8.8.8" ],
"subnetmask": [ "255.255.255.0" ]
},
"eth0": {
"static ip_address": [ "192.168.55.1" ],
"static routers": [ "192.168.55.1" ],
"static domain_name_server": [ "1.1.1.1 8.8.8.8" ],
"subnetmask": [ "255.255.255.0" ]
},
"enx": {
"static ip_address": [ "192.168.60.1" ],
"static routers": [ "192.168.60.1" ],
"static domain_name_server": [ "1.1.1.1 8.8.8.8" ],
"subnetmask": [ "255.255.255.0" ]
},
"options": {
"# RaspAP default configuration": null,
"hostname": null,
"clientid": null,
"persistent": null,
"option rapid_commit": null,
"option domain_name_servers, domain_name, domain_search, host_name": null,
"option classless_static_routes": null,
"option ntp_servers": null,
"require dhcp_server_identifier": null,
"slaac private": null,
"nohook lookup-hostname": null
}
},
"dnsmasq": {
"wlan0": {
"dhcp-range": [ "10.3.141.50,10.3.141.254,255.255.255.0,12h" ]
},
"wlan1": {
"dhcp-range": [ "10.9.141.50,10.9.141.254,255.255.255.0,12h" ]
},
"wlan2": {
"dhcp-range": [ "10.6.141.50,10.6.141.254,255.255.255.0,12h" ]
},
"uap0": {
"dhcp-range": [ "192.168.50.50,192.168.50.150,12h" ]
},
"eth0": {
"dhcp-range": [ "192.168.55.50,192.168.55.150,12h" ]
},
"enx": {
"dhcp-range": [ "192.168.60.50,192.168.60.150,12h" ]
}
},
"wireguard": {
"server": {
"Address": [ "10.8.2.1/24" ],
"ListenPort": [ "51820" ],
"DNS": [ "9.9.9.9" ],
"PostUp": [ "iptables -A FORWARD -i wlan0 -o %i -j ACCEPT; iptables -A FORWARD -i %i -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -A POSTROUTING -o %i -j MASQUERADE" ],
"PostDown": [ "iptables -D FORWARD -i wlan0 -o %i -j ACCEPT; iptables -D FORWARD -i %i -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT; iptables -t nat -D POSTROUTING -o %i -j MASQUERADE" ],
"PostUpEx": [ "iptables -I OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL ! -d %s -j REJECT" ],
"PreDown": [ "iptables -D OUTPUT ! -o %i -m mark ! --mark $(wg show %i fwmark) -m addrtype ! --dst-type LOCAL ! -d %s -j REJECT" ]
},
"peer": {
"Address": [ "10.8.1.2/24" ],
"Endpoint": [ "10.8.2.1:51820" ],
"ListenPort": [ "21841" ],
"AllowedIPs": [ "10.8.2.0/24" ],
"PersistentKeepalive": [ "15" ]
}
},
"txpower": {
"dbm": [ "auto", "30", "20", "17", "10", "6", "3", "1", "0" ]
}
}

View File

@@ -41,7 +41,7 @@ class DhcpcdManager
{
// determine static IP, routers, DNS
$jsonData = $this->getInterfaceConfig($ap_iface);
//error_log("DhcpcdManager::buildConfig() jsonData =" . print_r($jsonData, true));
$ip_address = empty($jsonData['StaticIP'])
? getDefaultNetValue('dhcp', $ap_iface, 'static ip_address')
: $jsonData['StaticIP'];
@@ -485,6 +485,21 @@ class DhcpcdManager
}
}
}
} else {
// fallback to defaults
$rangeRaw = getDefaultNetValue('dnsmasq', $iface, 'dhcp-range');
if ($rangeRaw) {
$result['DHCPEnabled'] = true;
$rangeParts = explode(',', $rangeRaw);
$result['RangeStart'] = $rangeParts[0] ?? null;
$result['RangeEnd'] = $rangeParts[1] ?? null;
$result['RangeMask'] = $rangeParts[2] ?? null;
$leaseSpec = $rangeParts[3] ?? null;
if ($leaseSpec && preg_match('/^(\d+)([smhd])?$/i', $leaseSpec, $m)) {
$result['leaseTime'] = $m[1];
$result['leaseTimeInterval'] = $m[2] ?? 'h';
}
}
}
// dhcpcd
@@ -513,6 +528,11 @@ class DhcpcdManager
$result['FallbackEnabled'] = (bool) preg_match('/fallback\s+static_' . preg_quote($iface, '/') . '/i', $block);
$result['DefaultRoute'] = (bool) preg_match('/\bgateway\b/', $block);
$result['NoHookWPASupplicant'] = (bool) preg_match('/nohook\s+wpa_supplicant/i', $block);
} else {
$result['StaticIP'] = getDefaultNetValue('dhcp', $iface, 'static ip_address');
$result['SubnetMask'] = getDefaultNetValue('dhcp', $iface, 'subnetmask');
$result['StaticRouters'] = getDefaultNetValue('dhcp', $iface, 'static routers');
$result['StaticDNS'] = getDefaultNetValue('dhcp', $iface, 'static domain_name_server');
}
}
return $result;

View File

@@ -61,8 +61,17 @@ class DnsmasqManager
* @return array $config
* @throws \RuntimeException
*/
public function buildConfig(array $syscfg, string $iface, bool $wifiAPEnable, bool $bridgedEnable): array
public function buildConfig(?array $syscfg, string $iface, bool $wifiAPEnable, bool $bridgedEnable): array
{
// fallback: if no syscfg for interface seed with defaults
if ($syscfg === null) {
$syscfg = [];
$dhcp_range = getDefaultNetValue('dnsmasq', $iface, 'dhcp-range');
if ($dhcp_range !== false) {
$syscfg['dhcp-range'] = $dhcp_range;
}
}
if ($wifiAPEnable == 1) {
// Enable uap0 configuration for ap-sta mode
// Set dhcp-range from system config, fallback to default if undefined