diff --git a/files/etc/udhcpc.user.d/udhcpc_icwmp_opt125.user b/files/etc/udhcpc.user.d/udhcpc_icwmp_opt125.user deleted file mode 100644 index f0d035c..0000000 --- a/files/etc/udhcpc.user.d/udhcpc_icwmp_opt125.user +++ /dev/null @@ -1,139 +0,0 @@ -#!/bin/sh - -. /lib/functions.sh - -CLASS="" -OUI="" -SERIAL="" - -get_vivsoi() { - # opt125 environment variable has data in below format - # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - # | enterprise-number1 | - # | | - # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ - # | data-len1 | | - # +-+-+-+-+-+-+-+-+ option-data1 | - # / / - # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----- - # | enterprise-number2 | ^ - # | | | - # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | - # | data-len2 | | optional - # +-+-+-+-+-+-+-+-+ option-data2 | | - # / / | - # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | - # ~ ... ~ V - # +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ----- - - # Enterprise Id Len Sub Op SLen Data Sub Op SLen Data Sub Op SLen Data - # +-------------+-----+------+------+----+------+-----+----+-----+------+-----+----+ - # | id | n | 1 | n1 | D1 | 2 | n2 | D2 | ... | 6 | n6 | D6 | - # +-------------+-----+------+------+----+------+-----+----+-----+------+-----+----+ - - local opt125="$1" - local len="$2" - local ent_id - - #hex-string 2 character=1 Byte - # length in hex string will be twice of actual Byte length - [ "$len" -gt "8" ] || return - - data="${opt125}" - rem_len="${len}" - while [ $rem_len -gt 0 ]; do - ent_id=${data:0:8} - ent_id=$(printf "%d\n" "0x$ent_id") - - if [ $ent_id -ne 3561 ]; then - len_val=${data:8:2} - data_len=$(printf "%d\n" "0x$len_val") - # add 4 byte for ent_id and 1 byte for len - data_len=$(( data_len * 2 + 10 )) - # move ahead data to next enterprise id - data=${data:"${data_len}":"${rem_len}"} - rem_len=$(( rem_len - $data_len )) - continue - fi - - # read the length of enterprise data - len_val=${data:8:2} - data_len=$(printf "%d\n" "0x$len_val") - # add 4 byte for ent_id and 1 byte for len - data_len=$(( data_len * 2 + 10 )) - - opt_len=$(printf "%d\n" "0x$len_val") - [ $opt_len -eq 0 ] && return - - # populate the option data of enterprise id - sub_data_len=$(( opt_len * 2)) - # starting 10 means ahead of length field - sub_data=${data:10:"${sub_data_len}"} - - # parsing of suboption of option 125 - while [ $sub_data_len -gt 0 ]; do - # get the suboption id - sub_opt_id=${sub_data:0:2} - sub_opt_id=$(printf "%d\n" "0x$sub_opt_id") - - # get the length of suboption - sub_opt_len=${sub_data:2:2} - sub_opt_len=$(printf "%d\n" "0x$sub_opt_len") - sub_opt_len=$(( sub_opt_len * 2 )) - - # get the value of sub option starting 4 means starting after length - sub_opt_val=${sub_data:4:${sub_opt_len}} - - # assign the value found in sub option - case "${sub_opt_id}" in - "4") OUI=$(echo -n $sub_opt_val | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '') - ;; - "5") SERIAL=$(echo -n $sub_opt_val | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '') - ;; - "6") CLASS=$(echo -n $sub_opt_val | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '') - ;; - esac - - # add 2 bytes for sub_opt id and sub_opt len field - sub_opt_end=$(( sub_opt_len + 4 )) - - # update the remaining sub option hex string length - sub_data_len=$((sub_data_len - sub_opt_end)) - - # fetch next sub option hex string - sub_data=${sub_data:${sub_opt_end}:${sub_data_len}} - done - - # move ahead data to next enterprise id - data=${data:"${data_len}":"${rem_len}"} - rem_len=$(( rem_len - data_len )) - done -} - -config_load cwmp -config_get_bool enable_cwmp cpe enable 1 -config_get wan_intf cpe default_wan_interface "wan" - -if [ "$enable_cwmp" = "0" ]; then - return 0 -fi - -if [ "${wan_intf}" == "${INTERFACE}" ]; then - if [ -n "$opt125" ]; then - len=$(printf "$opt125"|wc -c) - get_vivsoi "$opt125" "$len" - fi - - mkdir -p /var/state - touch /var/state/icwmp - sec=$(uci -q -c /var/state get icwmp.gatewayinfo) - if [ -z "${sec}" ]; then - sec=$(uci -q -c /var/state add icwmp gatewayinfo) - uci -q -c /var/state rename icwmp."${sec}"="gatewayinfo" - fi - - uci -q -c /var/state set icwmp.gatewayinfo.class="$CLASS" - uci -q -c /var/state set icwmp.gatewayinfo.oui="$OUI" - uci -q -c /var/state set icwmp.gatewayinfo.serial="$SERIAL" - uci -q -c /var/state commit icwmp -fi diff --git a/files/etc/udhcpc.user.d/udhcpc_icwmp_opt43.user b/files/etc/udhcpc.user.d/udhcpc_icwmp_opt43.user deleted file mode 100644 index 6e5b5d2..0000000 --- a/files/etc/udhcpc.user.d/udhcpc_icwmp_opt43.user +++ /dev/null @@ -1,141 +0,0 @@ -#!/bin/sh - -. /lib/functions.sh - -DHCP_ACS_URL="" -DHCP_PROV_CODE="" -MIN_WAIT_INVL="" -INVL_MULTIPLIER="" - -log() { - echo "$@" |logger -t cwmp.update -p info -} - -get_opt43() { - # Check if option value is in encapsulated form - local opt43="$1" - local len="$2" - - [ "$len" -gt "2" ] || return - - first_byte=${opt43:0:2} - first_byte=$(printf "%d\n" "0x$first_byte") - - if [ $len -ge 4 ] && [ $first_byte -ge 1 ] && [ $first_byte -le 4 ]; then - # it is in encapsulated form - # opt43 encapsulated vendor-specific option has data in below format - # Code Len Data item Code Len Data item Code - # +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ - # | T1 | n | d1 | d2 | ... | T2 | n | D1 | D2 | ... | ... | - # +-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+ - - #hex-string 2 character=1 Byte - # length in hex string will be twice of actual Byte length - - data="${opt43}" - rem_len="${len}" - # parsing of suboption of option 43 - while [ $rem_len -gt 0 ]; do - # get the suboption id - sub_opt_id=${data:0:2} - sub_opt_id=$(printf "%d\n" "0x$sub_opt_id") - - # get the length of suboption - sub_opt_len=${data:2:2} - sub_opt_len=$(printf "%d\n" "0x$sub_opt_len") - sub_opt_len=$(( sub_opt_len * 2 )) - - # get the value of sub option starting 4 means starting after length - sub_opt_val=${data:4:${sub_opt_len}} - - # assign the value found in sub option - case "${sub_opt_id}" in - "1") DHCP_ACS_URL=$(echo -n $sub_opt_val | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '') - ;; - "2") DHCP_PROV_CODE=$(echo -n $sub_opt_val | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '') - ;; - "3") MIN_WAIT_INVL=$(echo -n $sub_opt_val | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '') - ;; - "4") INVL_MULTIPLIER=$(echo -n $sub_opt_val | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '') - ;; - esac - - # add 2 bytes for sub_opt id and sub_opt len field - sub_opt_end=$(( sub_opt_len + 4 )) - - # fetch next sub option hex string - data=${data:${sub_opt_end}:${len}} - - # update the remaining sub option hex string length - rem_len=$((rem_len - sub_opt_end)) - done - else - DHCP_ACS_URL=$(echo -n $opt43 | sed 's/\([0-9A-F]\{2\}\)/\\\\\\x\1/gI' | xargs printf && echo '') - fi -} - -config_load cwmp -config_get wan_intf cpe default_wan_interface "wan" -config_get dhcp_discovery acs dhcp_discovery "0" -config_get dhcp_url acs dhcp_url "" -config_get min_wait_intvl acs dhcp_retry_min_wait_interval "0" -config_get intvl_multi acs dhcp_retry_interval_multiplier "0" - -config_change=0 -discovery_enable=0 - -if [ "$dhcp_discovery" = "1" ] || [ "$dhcp_discovery" = "true" ] || [ "$dhcp_discovery" = "enable" ]; then - discovery_enable=1 -fi - -if [ "$discovery_enable" = "0" ]; then - return 0 -fi - -if [ "${wan_intf}" == "${INTERFACE}" ]; then - if [ -n "$opt43" ]; then - len=$(printf "$opt43"|wc -c) - get_opt43 "$opt43" "$len" - fi - - if [ -z "$DHCP_ACS_URL" ]; then - return 0 - fi - - sec=$(uci -q get cwmp.acs) - - if [ -z "${sec}" ]; then - return 0 - fi - - if [ "${dhcp_url}" != "${DHCP_ACS_URL}" ]; then - uci -q set cwmp.acs.dhcp_url="$DHCP_ACS_URL" - config_change=1 - fi - - if [ -n "$MIN_WAIT_INVL" ] && [ "${MIN_WAIT_INVL}" != "${min_wait_intvl}" ]; then - uci -q set cwmp.acs.dhcp_retry_min_wait_interval="$MIN_WAIT_INVL" - config_change=1 - fi - - if [ -n "$INVL_MULTIPLIER" ] && [ "${INVL_MULTIPLIER}" != "${intvl_multi}" ]; then - uci -q set cwmp.acs.dhcp_retry_interval_multiplier="$INVL_MULTIPLIER" - config_change=1 - fi - - sec=$(uci -q get cwmp.cpe) - - if [ -n "${sec}" ] && [ -n "$DHCP_PROV_CODE" ]; then - uci -q set cwmp.cpe.dhcp_provisioning_code="$DHCP_PROV_CODE" - config_change=1 - fi - - if [ $config_change -eq 0 ]; then - return 0 - fi - - # ACS url has been set, inform icwmpd to reload new configuration - sleep 10 # wait for some time to avoid interface fluctuation - - ubus call uci commit '{"config":"cwmp"}' -fi