From ea49690ff47d14ee096d7c1368cff03f1cce1d76 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Fri, 10 Dec 2021 11:30:40 +0100 Subject: [PATCH] hostapd: add support for specifying the FILS DHCP server The 'fils_dhcp' option can be set to '*' in order to autodetect the DHCP server For proto=dhcp networks, the discovered dhcp server will be used For all other networks, udhcpc is called to discover the address Signed-off-by: Felix Fietkau --- package/network/services/hostapd/Makefile | 1 + .../services/hostapd/files/dhcp-get-server.sh | 2 ++ .../network/services/hostapd/files/hostapd.sh | 16 +++++++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 package/network/services/hostapd/files/dhcp-get-server.sh diff --git a/package/network/services/hostapd/Makefile b/package/network/services/hostapd/Makefile index 12e200be3ef..7e4056bb180 100644 --- a/package/network/services/hostapd/Makefile +++ b/package/network/services/hostapd/Makefile @@ -601,6 +601,7 @@ endef define Package/hostapd-common/install $(INSTALL_DIR) $(1)/etc/capabilities $(1)/etc/rc.button $(1)/etc/hotplug.d/ieee80211 $(1)/etc/init.d $(1)/lib/netifd $(1)/usr/share/acl.d + $(INSTALL_BIN) ./files/dhcp-get-server.sh $(1)/lib/netifd/dhcp-get-server.sh $(INSTALL_DATA) ./files/hostapd.sh $(1)/lib/netifd/hostapd.sh $(INSTALL_BIN) ./files/wpad.init $(1)/etc/init.d/wpad $(INSTALL_BIN) ./files/wps-hotplug.sh $(1)/etc/rc.button/wps diff --git a/package/network/services/hostapd/files/dhcp-get-server.sh b/package/network/services/hostapd/files/dhcp-get-server.sh new file mode 100644 index 00000000000..a1509ace2f1 --- /dev/null +++ b/package/network/services/hostapd/files/dhcp-get-server.sh @@ -0,0 +1,2 @@ +#!/bin/sh +[ "$1" = bound ] && echo "$serverid" diff --git a/package/network/services/hostapd/files/hostapd.sh b/package/network/services/hostapd/files/hostapd.sh index 30d14187890..d9d5f348775 100644 --- a/package/network/services/hostapd/files/hostapd.sh +++ b/package/network/services/hostapd/files/hostapd.sh @@ -370,6 +370,7 @@ hostapd_common_add_bss_config() { config_add_string eap_user_file ca_cert server_cert private_key private_key_passwd server_id config_add_boolean fils + config_add_string fils_dhcp } hostapd_set_vlan_file() { @@ -670,7 +671,7 @@ hostapd_set_bss_options() { ownip radius_client_addr \ eap_reauth_period request_cui \ erp_domain mobility_domain \ - fils_realm + fils_realm fils_dhcp # radius can provide VLAN ID for clients vlan_possible=1 @@ -689,6 +690,19 @@ hostapd_set_bss_options() { append bss_conf "erp_domain=$erp_domain" "$N" append bss_conf "fils_realm=$fils_realm" "$N" append bss_conf "fils_cache_id=$(echo "$fils_realm" | md5sum | head -c 4)" "$N" + + [ "$fils_dhcp" = "*" ] && { + json_get_values network network + fils_dhcp= + for net in $network; do + fils_dhcp="$(ifstatus "$net" | jsonfilter -e '@.data.dhcpserver')" + [ -n "$fils_dhcp" ] && break + done + + [ -z "$fils_dhcp" -a -n "$network_bridge" -a -n "$network_ifname" ] && \ + fils_dhcp="$(udhcpc -B -n -q -s /lib/netifd/dhcp-get-server.sh -t 1 -i "$network_ifname" 2>/dev/null)" + } + [ -n "$fils_dhcp" ] && append bss_conf "dhcp_server=$fils_dhcp" "$N" } set_default auth_port 1812 -- 2.30.2