From b6371cba1a690ffa52b324b7b3fb4316f8dde41f Mon Sep 17 00:00:00 2001 From: suvendhu Date: Thu, 6 Oct 2022 15:27:56 +0530 Subject: [PATCH] icwmpd: 8.4.25.5 --- icwmp/Makefile | 4 +- icwmp/files/etc/config/cwmp | 1 + icwmp/files/etc/init.d/icwmpd | 212 +++++++++++++++++++++++++++++++++- 3 files changed, 214 insertions(+), 3 deletions(-) diff --git a/icwmp/Makefile b/icwmp/Makefile index b8ae7d328..357c5649a 100755 --- a/icwmp/Makefile +++ b/icwmp/Makefile @@ -8,11 +8,11 @@ include $(TOPDIR)/rules.mk PKG_NAME:=icwmp -PKG_VERSION:=8.4.25.4 +PKG_VERSION:=8.4.25.5 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://dev.iopsys.eu/iopsys/icwmp.git -PKG_SOURCE_VERSION:=8d4e865dd34a9703fa64a1f651553c8bfb132a9e +PKG_SOURCE_VERSION:=902c30a855c91c9a3a6ff8fe8e677e7c3af30070 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz PKG_MIRROR_HASH:=skip diff --git a/icwmp/files/etc/config/cwmp b/icwmp/files/etc/config/cwmp index a649a8eb7..81a4f0222 100644 --- a/icwmp/files/etc/config/cwmp +++ b/icwmp/files/etc/config/cwmp @@ -17,6 +17,7 @@ config acs 'acs' config cpe 'cpe' option enable '1' option default_wan_interface 'wan' + option default_lan_interface 'lan' option log_to_console 'disable' option log_to_file 'disable' # log_severity: INFO (Default) diff --git a/icwmp/files/etc/init.d/icwmpd b/icwmp/files/etc/init.d/icwmpd index c508c1743..869cde7b6 100755 --- a/icwmp/files/etc/init.d/icwmpd +++ b/icwmp/files/etc/init.d/icwmpd @@ -71,6 +71,206 @@ enable_dhcp_option43() { fi } +convert_to_hex() { + local val="" + local optval="${1}" + OPTIND=1 + while getopts ":" opt "-$optval" + do + temp=$(printf "%X" "'${OPTARG:-:}") + val="${val}:${temp}" + done + + echo "${val}" +} + +configure_send_op125() { + local sendopt="${1}" + local intf="${2}" + local uci="${3}" + local hex_oui="" + local hex_serial="" + local hex_class="" + local oui_len=0 + local serial_len=0 + local class_len=0 + + if [ "${uci}" = "network" ]; then + local opt125="125:00:00:0D:E9" + else + local opt125="125,00:00:0D:E9" + fi + + config_get oui cpe manufacturer_oui "" + if [ -z "${oui}" ]; then + oui=$(db -q get device.deviceinfo.ManufacturerOUI) + fi + + oui=$(echo "${oui}" | tr 'a-f' 'A-F') + + config_get serial cpe serial_number "" + if [ -z "${serial}" ]; then + serial=$(db -q get device.deviceinfo.SerialNumber) + fi + + config_get class cpe product_class "" + if [ -z "${class}" ]; then + class=$(db -q get device.deviceinfo.ProductClass) + fi + + oui_len=$(echo -n "${oui}" | wc -m) + serial_len=$(echo -n "${serial}" | wc -m) + class_len=$(echo -n "${class}" | wc -m) + + if [ ${oui_len} -eq 0 ] || [ ${serial_len} -eq 0 ]; then + return 0 + fi + + opt125_len=$((oui_len + serial_len + class_len)) + if [ ${class_len} -gt 0 ]; then + opt125_len=$((opt125_len + 6)) + else + opt125_len=$((opt125_len + 4)) + fi + + hex_opt125_len=$(printf "%X" "${opt125_len}") + opt125="${opt125}:${hex_opt125_len}" + hex_oui=$(convert_to_hex "${oui}") + if [ -z "${hex_oui}" ]; then + return 0 + fi + + hex_oui_len=$(printf "%X" "${oui_len}") + if [ "${uci}" = "network" ]; then + opt125="${opt125}:01:${hex_oui_len}${hex_oui}" + else + opt125="${opt125}:04:${hex_oui_len}${hex_oui}" + fi + + hex_serial=$(convert_to_hex "${serial}") + if [ -z "${hex_serial}" ]; then + return 0 + fi + + hex_serial_len=$(printf "%X" "${serial_len}") + if [ "${uci}" = "network" ]; then + opt125="${opt125}:02:${hex_serial_len}${hex_serial}" + else + opt125="${opt125}:05:${hex_serial_len}${hex_serial}" + fi + + if [ ${class_len} -gt 0 ]; then + hex_class=$(convert_to_hex "${class}") + if [ -z "${hex_class}" ]; then + return 0 + fi + + hex_class_len=$(printf "%X" "${class_len}") + if [ "${uci}" = "network" ]; then + opt125="${opt125}:03:${hex_class_len}${hex_class}" + else + opt125="${opt125}:06:${hex_class_len}${hex_class}" + fi + fi + + + if [ "${uci}" = "network" ]; then + new_send_opt="$sendopt $opt125" + uci -q set network.$intf.sendopts="$new_send_opt" + else + uci -q add_list dhcp.$intf.dhcp_option="$opt125" + fi +} + +enable_dnsmasq_option125() { + local lan="${1}" + local send125_present=0 + local opt125="125," + + local proto="$(uci -q get dhcp.$lan.dhcpv4)" + if [ "${proto}" = "server" ]; then + opt_list="$(uci -q get dhcp.$lan.dhcp_option)" + + for sopt in $opt_list; do + if [[ "$sopt" == "$opt125"* ]]; then + send125_present=1 + break + fi + done + + if [ ${send125_present} -eq 0 ]; then + configure_send_op125 "" "${lan}" "dhcp" + ubus call uci commit '{"config":"dhcp"}' + fi + fi +} + +enable_disable_dhcp_option125() { + local wan="${1}" + local action="${2}" + + local reqopts="$(uci -q get network.$wan.reqopts)" + local sendopts="$(uci -q get network.$wan.sendopts)" + local proto="$(uci -q get network.$wan.proto)" + local newreqopts="" + local newsendopts="" + local req125_present=0 + local send125_present=0 + local network_uci_update=0 + local opt125="125:" + + for ropt in $reqopts; do + case $ropt in + 125) req125_present=1 ;; + *) ;; + esac + done + + for sopt in $sendopts; do + if [[ "$sopt" == "$opt125"* ]]; then + send125_present=1 + break + fi + done + + if [ "${proto}" == "dhcp" ]; then + if [ "${action}" == "enable" ]; then + if [ ${req125_present} -eq 0 ]; then + newreqopts="$reqopts 125" + uci -q set network.$wan.reqopts="$newreqopts" + network_uci_update=1 + fi + + if [ ${send125_present} -eq 0 ]; then + configure_send_op125 "${sendopts}" "${wan}" "network" + network_uci_update=1 + fi + else + if [ ${req125_present} -eq 1 ]; then + newreqopts=$(echo ${reqopts/125/}) + uci -q set network.$wan.reqopts="$newreqopts" + network_uci_update=1 + fi + + if [ ${send125_present} -eq 1 ]; then + for sopt in $sendopts; do + if [[ "$sopt" == "$opt125"* ]]; then + newsendopts=$(echo ${sendopts/"${sopt}"/}) + uci -q set network.$wan.sendopts="$newreqopts" + network_uci_update=1 + break + fi + done + fi + fi + fi + + if [ ${network_uci_update} -eq 1 ]; then + uci commit network + ubus call network reload + fi +} + wait_for_resolvfile() { local time=$1 local tm=1 @@ -197,11 +397,21 @@ boot() { config_load cwmp config_get dhcp_discovery acs dhcp_discovery "0" + config_get wan_interface cpe default_wan_interface "wan" if [ "${dhcp_discovery}" == "enable" ] || [ "${dhcp_discovery}" == "1" ]; then # Set dhcp option 43 if not already configured - config_get wan_interface cpe default_wan_interface "wan" enable_dhcp_option43 "${wan_interface}" fi + + config_get lan_interface cpe default_lan_interface "" + if [ -n "${lan_interface}" ]; then + # Set dhcp_option 125 if not already configured + enable_disable_dhcp_option125 "${wan_interface}" "enable" + enable_dnsmasq_option125 "${lan_interface}" + else + # Remove dhcp option 125 if exists + enable_disable_dhcp_option125 "${wan_interface}" "disable" + fi config_get ssl_capath acs ssl_capath