mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-18 09:51:26 +00:00
firstcontact: Zero touch provisioning with DHCP option 138
Fixes: WIFI-7266 Signed-off-by: Tanya Singh <tanya_singh@accton.com>
This commit is contained in:
parent
7e2cec9d91
commit
d9a8e771ae
@ -7,39 +7,8 @@ if (!fd) {
|
|||||||
devid = fd.read("all");
|
devid = fd.read("all");
|
||||||
fd.close();
|
fd.close();
|
||||||
|
|
||||||
ret = system(sprintf('/usr/sbin/firstcontact -i %s', devid));
|
|
||||||
|
|
||||||
if (ret) {
|
|
||||||
warn("firstcontact failed to contact redirector\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
let redirector = { };
|
|
||||||
let fd = fs.open("/etc/ucentral/redirector.json", "r");
|
|
||||||
if (fd) {
|
|
||||||
let data = fd.read("all");
|
|
||||||
fd.close();
|
|
||||||
|
|
||||||
try {
|
|
||||||
redirector = json(data);
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
warn("firstcontact: Unable to parse JSON data in %s: %s", path, e);
|
|
||||||
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
let config = {};
|
let config = {};
|
||||||
|
|
||||||
for (let r in redirector.fields)
|
|
||||||
if (r.name && r.value)
|
|
||||||
config[r.name] = r.value;
|
|
||||||
if (!config.Redirector) {
|
|
||||||
warn("Reply is missing Redirector field\n");
|
|
||||||
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
function store_config(path) {
|
function store_config(path) {
|
||||||
let cursor = uci.cursor(path);
|
let cursor = uci.cursor(path);
|
||||||
let redir = split(config.Redirector, ":");
|
let redir = split(config.Redirector, ":");
|
||||||
@ -50,6 +19,44 @@ function store_config(path) {
|
|||||||
cursor.commit();
|
cursor.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = system(sprintf('/usr/sbin/firstcontact -i %s', devid));
|
||||||
|
if (ret) {
|
||||||
|
warn("firstcontact failed to contact redirector, check DHCP option\n");
|
||||||
|
let fd = fs.open("/tmp/capwap/dhcp_opt.txt", "r");
|
||||||
|
if (!fd) {
|
||||||
|
warn("No redirector found\n");
|
||||||
|
exit(1);
|
||||||
|
} else {
|
||||||
|
config.Redirector = fd.read("all");
|
||||||
|
fd.close();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
let redirector = { };
|
||||||
|
let fd = fs.open("/etc/ucentral/redirector.json", "r");
|
||||||
|
if (fd) {
|
||||||
|
let data = fd.read("all");
|
||||||
|
fd.close();
|
||||||
|
|
||||||
|
try {
|
||||||
|
redirector = json(data);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
warn("firstcontact: Unable to parse JSON data in %s: %s", path, e);
|
||||||
|
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let r in redirector.fields)
|
||||||
|
if (r.name && r.value)
|
||||||
|
config[r.name] = r.value;
|
||||||
|
if (!config.Redirector) {
|
||||||
|
warn("Reply is missing Redirector field\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
store_config();
|
store_config();
|
||||||
store_config("/etc/config-shadow/");
|
store_config("/etc/config-shadow/");
|
||||||
|
|
||||||
|
|||||||
93
patches/base/0055-support-dhcp-option138.patch
Normal file
93
patches/base/0055-support-dhcp-option138.patch
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
From 61a2e46d47dcd76dfd4b8d18036794dae4f4f212 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tanya Singh <tanya_singh@accton.com>
|
||||||
|
Date: Tue, 28 Jun 2022 17:11:52 +0800
|
||||||
|
Subject: [PATCH] Support DHCP option 138 and store values in
|
||||||
|
/tmp/capwap/dhcp_opt.txt
|
||||||
|
|
||||||
|
Signed-off-by: Tanya Singh <tanya_singh@accton.com>
|
||||||
|
---
|
||||||
|
.../netifd/files/lib/netifd/dhcp.script | 22 +++++++++++++++++++
|
||||||
|
.../netifd/files/lib/netifd/proto/dhcp.sh | 1 +
|
||||||
|
.../busybox/patches/531-dhcp_opt_capwap.patch | 18 +++++++++++++++
|
||||||
|
3 files changed, 41 insertions(+)
|
||||||
|
create mode 100644 package/utils/busybox/patches/531-dhcp_opt_capwap.patch
|
||||||
|
|
||||||
|
diff --git a/package/network/config/netifd/files/lib/netifd/dhcp.script b/package/network/config/netifd/files/lib/netifd/dhcp.script
|
||||||
|
index 6fcf139beb..d7c1324184 100755
|
||||||
|
--- a/package/network/config/netifd/files/lib/netifd/dhcp.script
|
||||||
|
+++ b/package/network/config/netifd/files/lib/netifd/dhcp.script
|
||||||
|
@@ -4,6 +4,24 @@
|
||||||
|
. /lib/functions.sh
|
||||||
|
. /lib/netifd/netifd-proto.sh
|
||||||
|
|
||||||
|
+WORKING_PATH=/tmp/capwap
|
||||||
|
+DHCP_OPT_FILE=${WORKING_PATH}/dhcp_opt.txt
|
||||||
|
+DHCP_OPT_FILE_TMP=${WORKING_PATH}/dhcp_opt_tmp.txt
|
||||||
|
+
|
||||||
|
+set_capwap_ip()
|
||||||
|
+{
|
||||||
|
+ local ip
|
||||||
|
+ if [ ! -d "${WORKING_PATH}" ]; then
|
||||||
|
+ mkdir -p ${WORKING_PATH}
|
||||||
|
+ fi
|
||||||
|
+ for ip in ${capwap}; do
|
||||||
|
+ echo ${ip} >> ${DHCP_OPT_FILE_TMP}
|
||||||
|
+ done
|
||||||
|
+ if ! cmp -s "${DHCP_OPT_FILE}" "${DHCP_OPT_FILE_TMP}"; then
|
||||||
|
+ mv ${DHCP_OPT_FILE_TMP} ${DHCP_OPT_FILE}
|
||||||
|
+ fi
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
set_classless_routes() {
|
||||||
|
local max=128
|
||||||
|
while [ -n "$1" -a -n "$2" -a $max -gt 0 ]; do
|
||||||
|
@@ -111,6 +129,10 @@ case "$1" in
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
+if [ -n "${capwap}" ]; then
|
||||||
|
+ set_capwap_ip
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
# user rules
|
||||||
|
[ -f /etc/udhcpc.user ] && . /etc/udhcpc.user "$@"
|
||||||
|
for f in /etc/udhcpc.user.d/*; do
|
||||||
|
diff --git a/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh b/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh
|
||||||
|
index 3034b2ba68..89908e5ca4 100755
|
||||||
|
--- a/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh
|
||||||
|
+++ b/package/network/config/netifd/files/lib/netifd/proto/dhcp.sh
|
||||||
|
@@ -61,6 +61,7 @@ proto_dhcp_setup() {
|
||||||
|
[ "$delegate" = "0" ] && proto_export "IFACE6RD_DELEGATE=0"
|
||||||
|
# Request classless route option (see RFC 3442) by default
|
||||||
|
[ "$classlessroute" = "0" ] || append dhcpopts "-O 121"
|
||||||
|
+ append dhcpopts "-O 138"
|
||||||
|
|
||||||
|
proto_export "INTERFACE=$config"
|
||||||
|
proto_run_command "$config" udhcpc \
|
||||||
|
diff --git a/package/utils/busybox/patches/531-dhcp_opt_capwap.patch b/package/utils/busybox/patches/531-dhcp_opt_capwap.patch
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..c705c0e40e
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/package/utils/busybox/patches/531-dhcp_opt_capwap.patch
|
||||||
|
@@ -0,0 +1,18 @@
|
||||||
|
+--- a/networking/udhcp/common.c 2022-06-28 09:32:48.853072914 +0800
|
||||||
|
++++ b/networking/udhcp/common.c 2022-06-28 09:39:28.000000000 +0800
|
||||||
|
+@@ -54,6 +54,7 @@
|
||||||
|
+ { OPTION_STRING , 0x43 }, /* DHCP_BOOT_FILE */
|
||||||
|
+ //TODO: not a string, but a set of LASCII strings:
|
||||||
|
+ // { OPTION_STRING , 0x4D }, /* DHCP_USER_CLASS */
|
||||||
|
++ { OPTION_STRING , 0x8A }, /* DHCP_CAPWAP */
|
||||||
|
+ { OPTION_STRING , 0x64 }, /* DHCP_PCODE */
|
||||||
|
+ { OPTION_STRING , 0x65 }, /* DHCP_TCODE */
|
||||||
|
+ #if ENABLE_FEATURE_UDHCP_RFC3397
|
||||||
|
+@@ -123,6 +124,7 @@
|
||||||
|
+ "tftp" "\0" /* DHCP_TFTP_SERVER_NAME*/
|
||||||
|
+ "bootfile" "\0" /* DHCP_BOOT_FILE */
|
||||||
|
+ // "userclass" "\0" /* DHCP_USER_CLASS */
|
||||||
|
++ "capwap" "\0" /* DHCP_CAPWAP */
|
||||||
|
+ "tzstr" "\0" /* DHCP_PCODE */
|
||||||
|
+ "tzdbstr" "\0" /* DHCP_TCODE */
|
||||||
|
+ #if ENABLE_FEATURE_UDHCP_RFC3397
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
||||||
Loading…
Reference in New Issue
Block a user