diff --git a/gateway-info/Makefile b/gateway-info/Makefile index 129451be35b519fe1d4b32ed3b8f3b92cd5bc4ed..6796736dd3818a80270e82650264b4ca7d0eb2a5 100644 --- a/gateway-info/Makefile +++ b/gateway-info/Makefile @@ -8,13 +8,13 @@ include $(TOPDIR)/rules.mk PKG_NAME:=gateway-info -PKG_VERSION:=1.0.0 +PKG_VERSION:=1.0.1 LOCAL_DEV:=0 ifneq ($(LOCAL_DEV),1) PKG_SOURCE_PROTO:=git PKG_SOURCE_URL:=https://dev.iopsys.eu/bbf/gateway-info.git -PKG_SOURCE_VERSION:=26e407a25b156da75e3941d54ddd74294cd9eae8 +PKG_SOURCE_VERSION:=b77871a883797db5c9fce232e2d2f183e59c682d PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_SOURCE_VERSION).tar.gz PKG_MIRROR_HASH:=skip endif @@ -29,7 +29,7 @@ define Package/gateway-info CATEGORY:=Utilities TITLE:=GatewayInfo Data Model Support DEPENDS:=+libuci +libubox +libubus +libblobmsg-json +umdns - DEPENDS+=+libbbfdm-api +libbbfdm-ubus +dm-service + DEPENDS+=+libbbfdm-api +libbbfdm-ubus +dm-service +iputils-arping endef define Package/gateway-info/description diff --git a/gateway-info/files/etc/udhcpc.user.d/udhcpc_gateway_info.user b/gateway-info/files/etc/udhcpc.user.d/udhcpc_gateway_info.user index f757a9874c21ab6e104b1d2f0875e0b086e8ab8f..f5defa6646226972d4a1053851588670b2a828e0 100644 --- a/gateway-info/files/etc/udhcpc.user.d/udhcpc_gateway_info.user +++ b/gateway-info/files/etc/udhcpc.user.d/udhcpc_gateway_info.user @@ -243,11 +243,42 @@ get_usp_agent_id() { get_mac_address() { ip="${1}" + device="${2}" mac="$(cat /proc/net/arp | grep $ip | awk '{print $4}')" + if [ -z "${mac}" ]; then + arp_resp="$(arping -b -f -c 5 -I $device $ip | grep 'Unicast reply from' | awk '{print $5}')" + if [ -n "${arp_resp}" ]; then + mac=${arp_resp:1:-1} + fi + fi + echo "${mac}" } +send_unknown_gw_event() { + mac="${1}" + + cmd="ubus -t 5 send gateway-info.gateway.unknown '{\"hwaddr\":\"$mac\"}'" + eval $cmd +} + +send_cwmp_gw_event() { + oui="${1}" + class="${2}" + serial="${3}" + + cmd="ubus -t 5 send gateway-info.gateway.cwmp '{\"oui\":\"$oui\",\"class\":\"$class\",\"serial\":\"$serial\"}'" + eval $cmd +} + +send_usp_gw_event() { + endpoint="${1}" + + cmd="ubus -t 5 send gateway-info.gateway.usp '{\"endpoint\":\"$endpoint\"}'" + eval $cmd +} + config_load gateway config_get wan_intf global wan_interface "wan" @@ -257,17 +288,18 @@ if [ "${wan_intf}" == "${INTERFACE}" ]; then return 0 fi - if [ -z "$opt125" ]; then - return 0 - fi - - len=$(printf "$opt125"|wc -c) - get_vivsoi "$opt125" "$len" + json_load "$(ifstatus ${INTERFACE})" + json_get_var dev_name device "" + json_select data + json_get_var dhcp_ip dhcpserver "" + json_cleanup - if [ "${GW_DISCOVERED}" -eq 0 ]; then + if [ -z "${dhcp_ip}" ] || [ -z "${dev_name}" ]; then return 0 fi + MAC="$(get_mac_address $dhcp_ip $dev_name)" + mkdir -p /var/state touch /var/state/gwinfo sec=$(uci -q -c /var/state get gwinfo.gatewayinfo) @@ -276,8 +308,27 @@ if [ "${wan_intf}" == "${INTERFACE}" ]; then uci -q -c /var/state rename gwinfo."${sec}"="gatewayinfo" fi - uci -q -c /var/state set gwinfo.gatewayinfo.hwaddr="" + uci -q -c /var/state set gwinfo.gatewayinfo.hwaddr="$MAC" uci -q -c /var/state set gwinfo.gatewayinfo.endpoint="" + uci -q -c /var/state set gwinfo.gatewayinfo.class="" + uci -q -c /var/state set gwinfo.gatewayinfo.oui="" + uci -q -c /var/state set gwinfo.gatewayinfo.serial="" + uci -q -c /var/state set gwinfo.gatewayinfo.proto="" + uci -q -c /var/state commit gwinfo + + if [ -z "$opt125" ]; then + send_unknown_gw_event "${MAC}" + return 0 + fi + + len=$(printf "$opt125"|wc -c) + get_vivsoi "$opt125" "$len" + + if [ "${GW_DISCOVERED}" -eq 0 ]; then + send_unknown_gw_event "${MAC}" + return 0 + fi + uci -q -c /var/state set gwinfo.gatewayinfo.class="$CLASS" uci -q -c /var/state set gwinfo.gatewayinfo.oui="$OUI" uci -q -c /var/state set gwinfo.gatewayinfo.serial="$SERIAL" @@ -287,33 +338,25 @@ if [ "${wan_intf}" == "${INTERFACE}" ]; then # Check for USP parameters ubus -t 15 wait_for umdns if [ "${?}" -ne 0 ]; then - return 0 - fi - - json_load "$(ifstatus ${INTERFACE})" - json_get_var dev_name device "" - json_select data - json_get_var dhcp_ip dhcpserver "" - json_cleanup - - if [ -z "${dhcp_ip}" ] || [ -z "${dev_name}" ]; then + send_cwmp_gw_event "${OUI}" "${CLASS}" "${SERIAL}" return 0 fi resp=$(send_host_query $dev_name) if [ "${resp}" -ne 0 ]; then + send_cwmp_gw_event "${OUI}" "${CLASS}" "${SERIAL}" return 0 fi ID="$(get_usp_agent_id $dhcp_ip)" if [ -z "${ID}" ]; then + send_cwmp_gw_event "${OUI}" "${CLASS}" "${SERIAL}" return 0 fi - MAC="$(get_mac_address $dhcp_ip)" - - uci -q -c /var/state set gwinfo.gatewayinfo.hwaddr="$MAC" uci -q -c /var/state set gwinfo.gatewayinfo.endpoint="$ID" uci -q -c /var/state set gwinfo.gatewayinfo.proto="USP" uci -q -c /var/state commit gwinfo + + send_usp_gw_event "${ID}" fi