From patchwork Thu Jul 1 19:50:19 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Arjun AK X-Patchwork-Id: 1499706 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (no SPF record) smtp.mailfrom=lists.openwrt.org (client-ip=2607:7c80:54:e::133; helo=bombadil.infradead.org; envelope-from=openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; secure) header.d=lists.infradead.org header.i=@lists.infradead.org header.a=rsa-sha256 header.s=bombadil.20210309 header.b=mXY4AlII; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20161025 header.b=XAuWeYQj; dkim-atps=neutral Received: from bombadil.infradead.org (bombadil.infradead.org [IPv6:2607:7c80:54:e::133]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 4GG85Q39Rbz9sSs for ; Fri, 2 Jul 2021 05:52:58 +1000 (AEST) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Message-Id:Date:Subject:Cc :To:From:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=1HODgmpKjxTc3XVLbxiVPF3YMiqayVr3JK1tHAgxw4g=; b=mXY4AlII5ZPNlq 6QgZ6THqavbSYoRvu2FRCr00ePsz3eIlPbjxUV/DgE3+DNrctCVj38P2eLKwjVax1/vrknarUwTpq Bt+fe4plTePrHOwFlxy3xNzU1l96nXNVBAMdwT4nzCoCvvQUSU87YZ/pjC5niuQGkR6chhPZR88cr kKpnm0wYUNsruLi2pD5Dh1meRB27obH0R7PB2oCbemgy4KzEWYiPGxWuHOsF7DUEaG4dH1VGHevke E00C6R48uJ3K4AJcmPJ++0GQqY1rVxNKaitXyEjhSRdoAOWpf2j2ahhV4YYiVyqZuzVFekFRj/m3P 0s2j73H1oP0/WwOsdFmA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1lz2hu-000vGg-8y; Thu, 01 Jul 2021 19:50:42 +0000 Received: from mail-pg1-x52d.google.com ([2607:f8b0:4864:20::52d]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1lz2hp-000vGH-Dj for openwrt-devel@lists.openwrt.org; Thu, 01 Jul 2021 19:50:40 +0000 Received: by mail-pg1-x52d.google.com with SMTP id a7so7168248pga.1 for ; Thu, 01 Jul 2021 12:50:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=0gZb+ywd4J0xXIMMGfMR2i4jFIbK6ramDMeQ1MUkc/4=; b=XAuWeYQjLmXY8s4hIg/7Pq3pTcNyUYoFhdB+BnpZCP9N71R7XZ1YTdl0UbuQDQWhBE 75Bo9Fsd1No+vvz3rtmKgDNasdwVf/iTBb43gisaSWx1XhFMAtLrRWEpBZzYqzpnGj0i BnIumd57pZJvq6x/OHGDmTMQAD7UUkGjtA1wCz5AwvCKWrIKVb+OfKLwmH0DNtp2aHA5 7yR2VONfAofjO1Ka9i/BRQMn9FdswHbqhCh0b8+MQP6KILsV5CL9e8P+9ncV39cqBVu+ /ebaxYFiSAh8kL55rGt/H605fIMKz2P1I/81mXOr3cvs5K+Dkt8Mu5Tu8Kb8Jnnuwiki TZ/Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=0gZb+ywd4J0xXIMMGfMR2i4jFIbK6ramDMeQ1MUkc/4=; b=lL1OUPg2zazdzQfl6g/Ke8MvdQT3vAZ3RG0tQ54VnOgqN0gymqOI4T/dhAQk7YKexX ndamaafykI5TjThC1EhL45YQEoITlQx5xmUGKXMyXU9uip6nCS/TDttye/xeuDC5xnV4 nPCOw41U6SWrRzMf5veH5mFVGvCFLNipcQffEr9BNUxdjtPSGmXCBdtcYYDo4Z48mytr BPuFNS7ttb9mB7ruh4sFmt3yCixm1ylX8VMSDdLzFQz5FHiAsr99kZTCDdhxvSDCmZ+o EAToHkXV7lBqtw7T+vdBZ1V0A6QQFoBtTCn3tD/3OWwP85JiRapBBTjZX9o0D7gq4IaY RhZg== X-Gm-Message-State: AOAM532MyHoyyU2sDUG6GD+bic7CGZw4iT0GDk8If3Vx2HL5uBbyePso KbSouz55j3E7eSmQHFdmul4I+7/FOmo= X-Google-Smtp-Source: ABdhPJy8nGep7pzN2u8ERgEZzupSVAIp/ni43qR79ilbyTkjQuanhHQgBaBUS6TmDdKr8BrF62nFoA== X-Received: by 2002:a63:5144:: with SMTP id r4mr1192529pgl.223.1625169035898; Thu, 01 Jul 2021 12:50:35 -0700 (PDT) Received: from debian.lan ([49.206.13.223]) by smtp.gmail.com with ESMTPSA id p26sm848292pfn.94.2021.07.01.12.50.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 01 Jul 2021 12:50:35 -0700 (PDT) From: Arjun AK To: openwrt-devel@lists.openwrt.org Cc: arjunak234@gmail.com, malaakso@elisanet.fi Subject: [PATCH] uqmi: Move to community packages repo Date: Fri, 2 Jul 2021 01:20:19 +0530 Message-Id: <20210701195019.16553-1-arjunak234@gmail.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210701_125037_539411_14C8CDC3 X-CRM114-Status: GOOD ( 22.92 ) X-Spam-Score: 0.1 (/) X-Spam-Report: Spam detection software, running on the system "bombadil.infradead.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: Signed-off-by: Arjun AK --- package/network/utils/uqmi/Makefile | 48 -- .../utils/uqmi/files/lib/netifd/proto/qmi.sh | 471 2 files changed, 519 deletions(-) delete mode 100644 pac [...] Content analysis details: (0.1 points, 5.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:52d listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [arjunak234[at]gmail.com] 0.2 FREEMAIL_ENVFROM_END_DIGIT Envelope-from freemail username ends in digit [arjunak234[at]gmail.com] -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "openwrt-devel" Errors-To: openwrt-devel-bounces+incoming=patchwork.ozlabs.org@lists.openwrt.org Signed-off-by: Arjun AK Nacked-by: Rafał Miłecki --- package/network/utils/uqmi/Makefile | 48 -- .../utils/uqmi/files/lib/netifd/proto/qmi.sh | 471 ------------------ 2 files changed, 519 deletions(-) delete mode 100644 package/network/utils/uqmi/Makefile delete mode 100755 package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh diff --git a/package/network/utils/uqmi/Makefile b/package/network/utils/uqmi/Makefile deleted file mode 100644 index 53ca67230b..0000000000 --- a/package/network/utils/uqmi/Makefile +++ /dev/null @@ -1,48 +0,0 @@ -include $(TOPDIR)/rules.mk - -PKG_NAME:=uqmi -PKG_RELEASE:=3 - -PKG_SOURCE_PROTO:=git -PKG_SOURCE_URL=$(PROJECT_GIT)/project/uqmi.git -PKG_SOURCE_DATE:=2020-11-22 -PKG_SOURCE_VERSION:=0a19b5b77140465c29e2afa7d611fe93abc9672f -PKG_MIRROR_HASH:=0a6641f8e167efd21d464b0b2aeb1fec5f974dddcdb8822fbd5d7190d0b741b4 -PKG_MAINTAINER:=Matti Laakso - -PKG_LICENSE:=GPL-2.0 -PKG_LICENSE_FILES:= - -PKG_FLAGS:=nonshared - -include $(INCLUDE_DIR)/package.mk -include $(INCLUDE_DIR)/cmake.mk - -define Package/uqmi - SECTION:=net - CATEGORY:=Network - SUBMENU:=WWAN - DEPENDS:=+libubox +libblobmsg-json +kmod-usb-net +kmod-usb-net-qmi-wwan +wwan - TITLE:=Control utility for mobile broadband modems -endef - -define Package/uqmi/description - uqmi is a command line tool for controlling mobile broadband modems using - the QMI-protocol. -endef - -TARGET_CFLAGS += \ - -I$(STAGING_DIR)/usr/include -ffunction-sections -fdata-sections - -TARGET_LDFLAGS += -Wl,--gc-sections - -CMAKE_OPTIONS += \ - -DDEBUG=1 - -define Package/uqmi/install - $(INSTALL_DIR) $(1)/sbin - $(INSTALL_BIN) $(PKG_BUILD_DIR)/uqmi $(1)/sbin/ - $(CP) ./files/* $(1)/ -endef - -$(eval $(call BuildPackage,uqmi)) diff --git a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh b/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh deleted file mode 100755 index c0134f44dd..0000000000 --- a/package/network/utils/uqmi/files/lib/netifd/proto/qmi.sh +++ /dev/null @@ -1,471 +0,0 @@ -#!/bin/sh - -[ -n "$INCLUDE_ONLY" ] || { - . /lib/functions.sh - . ../netifd-proto.sh - init_proto "$@" -} - -proto_qmi_init_config() { - available=1 - no_device=1 - proto_config_add_string "device:device" - proto_config_add_string apn - proto_config_add_string auth - proto_config_add_string username - proto_config_add_string password - proto_config_add_string pincode - proto_config_add_int delay - proto_config_add_string modes - proto_config_add_string pdptype - proto_config_add_int profile - proto_config_add_boolean dhcp - proto_config_add_boolean dhcpv6 - proto_config_add_boolean autoconnect - proto_config_add_int plmn - proto_config_add_int timeout - proto_config_add_int mtu - proto_config_add_defaults -} - -proto_qmi_setup() { - local interface="$1" - local dataformat connstat plmn_mode mcc mnc - local device apn auth username password pincode delay modes pdptype - local profile dhcp dhcpv6 autoconnect plmn timeout mtu $PROTO_DEFAULT_OPTIONS - local ip4table ip6table - local cid_4 pdh_4 cid_6 pdh_6 - local ip_6 ip_prefix_length gateway_6 dns1_6 dns2_6 - - json_get_vars device apn auth username password pincode delay modes - json_get_vars pdptype profile dhcp dhcpv6 autoconnect plmn ip4table - json_get_vars ip6table timeout mtu $PROTO_DEFAULT_OPTIONS - - [ "$timeout" = "" ] && timeout="10" - - [ "$metric" = "" ] && metric="0" - - [ -n "$ctl_device" ] && device=$ctl_device - - [ -n "$device" ] || { - echo "No control device specified" - proto_notify_error "$interface" NO_DEVICE - proto_set_available "$interface" 0 - return 1 - } - - [ -n "$delay" ] && sleep "$delay" - - device="$(readlink -f $device)" - [ -c "$device" ] || { - echo "The specified control device does not exist" - proto_notify_error "$interface" NO_DEVICE - proto_set_available "$interface" 0 - return 1 - } - - devname="$(basename "$device")" - devpath="$(readlink -f /sys/class/usbmisc/$devname/device/)" - ifname="$( ls "$devpath"/net )" - [ -n "$ifname" ] || { - echo "The interface could not be found." - proto_notify_error "$interface" NO_IFACE - proto_set_available "$interface" 0 - return 1 - } - - [ -n "$mtu" ] && { - echo "Setting MTU to $mtu" - /sbin/ip link set dev $ifname mtu $mtu - } - - echo "Waiting for SIM initialization" - local uninitialized_timeout=0 - while uqmi -s -d "$device" --get-pin-status | grep '"UIM uninitialized"' > /dev/null; do - [ -e "$device" ] || return 1 - if [ "$uninitialized_timeout" -lt "$timeout" -o "$timeout" = "0" ]; then - let uninitialized_timeout++ - sleep 1; - else - echo "SIM not initialized" - proto_notify_error "$interface" SIM_NOT_INITIALIZED - proto_block_restart "$interface" - return 1 - fi - done - - if uqmi -s -d "$device" --get-pin-status | grep '"Not supported"\|"Invalid QMI command"' > /dev/null; then - [ -n "$pincode" ] && { - uqmi -s -d "$device" --verify-pin1 "$pincode" > /dev/null || uqmi -s -d "$device" --uim-verify-pin1 "$pincode" > /dev/null || { - echo "Unable to verify PIN" - proto_notify_error "$interface" PIN_FAILED - proto_block_restart "$interface" - return 1 - } - } - else - . /usr/share/libubox/jshn.sh - json_load "$(uqmi -s -d "$device" --get-pin-status)" - json_get_var pin1_status pin1_status - json_get_var pin1_verify_tries pin1_verify_tries - - case "$pin1_status" in - disabled) - echo "PIN verification is disabled" - ;; - blocked) - echo "SIM locked PUK required" - proto_notify_error "$interface" PUK_NEEDED - proto_block_restart "$interface" - return 1 - ;; - not_verified) - [ "$pin1_verify_tries" -lt "3" ] && { - echo "PIN verify count value is $pin1_verify_tries this is below the limit of 3" - proto_notify_error "$interface" PIN_TRIES_BELOW_LIMIT - proto_block_restart "$interface" - return 1 - } - if [ -n "$pincode" ]; then - uqmi -s -d "$device" --verify-pin1 "$pincode" > /dev/null 2>&1 || uqmi -s -d "$device" --uim-verify-pin1 "$pincode" > /dev/null 2>&1 || { - echo "Unable to verify PIN" - proto_notify_error "$interface" PIN_FAILED - proto_block_restart "$interface" - return 1 - } - else - echo "PIN not specified but required" - proto_notify_error "$interface" PIN_NOT_SPECIFIED - proto_block_restart "$interface" - return 1 - fi - ;; - verified) - echo "PIN already verified" - ;; - *) - echo "PIN status failed ($pin1_status)" - proto_notify_error "$interface" PIN_STATUS_FAILED - proto_block_restart "$interface" - return 1 - ;; - esac - fi - - if [ -n "$plmn" ]; then - json_load "$(uqmi -s -d "$device" --get-plmn)" - json_get_var plmn_mode mode - json_get_vars mcc mnc || { - mcc=0 - mnc=0 - } - - if [ "$plmn" = "0" ]; then - if [ "$plmn_mode" != "automatic" ]; then - mcc=0 - mnc=0 - echo "Setting PLMN to auto" - fi - elif [ "$mcc" -ne "${plmn:0:3}" -o "$mnc" -ne "${plmn:3}" ]; then - mcc=${plmn:0:3} - mnc=${plmn:3} - echo "Setting PLMN to $plmn" - else - mcc="" - mnc="" - fi - fi - - if [ -n "$mcc" -a -n "$mnc" ]; then - uqmi -s -d "$device" --set-plmn --mcc "$mcc" --mnc "$mnc" > /dev/null 2>&1 || { - echo "Unable to set PLMN" - proto_notify_error "$interface" PLMN_FAILED - proto_block_restart "$interface" - return 1 - } - fi - - # Cleanup current state if any - uqmi -s -d "$device" --stop-network 0xffffffff --autoconnect > /dev/null 2>&1 - - # Go online - uqmi -s -d "$device" --set-device-operating-mode online > /dev/null 2>&1 - - # Set IP format - uqmi -s -d "$device" --set-data-format 802.3 > /dev/null 2>&1 - uqmi -s -d "$device" --wda-set-data-format 802.3 > /dev/null 2>&1 - dataformat="$(uqmi -s -d "$device" --wda-get-data-format)" - - if [ "$dataformat" = '"raw-ip"' ]; then - - [ -f /sys/class/net/$ifname/qmi/raw_ip ] || { - echo "Device only supports raw-ip mode but is missing this required driver attribute: /sys/class/net/$ifname/qmi/raw_ip" - return 1 - } - - echo "Device does not support 802.3 mode. Informing driver of raw-ip only for $ifname .." - echo "Y" > /sys/class/net/$ifname/qmi/raw_ip - fi - - uqmi -s -d "$device" --sync > /dev/null 2>&1 - - uqmi -s -d "$device" --network-register > /dev/null 2>&1 - - echo "Waiting for network registration" - sleep 1 - local registration_timeout=0 - local registration_state="" - while true; do - registration_state=$(uqmi -s -d "$device" --get-serving-system 2>/dev/null | jsonfilter -e "@.registration" 2>/dev/null) - - [ "$registration_state" = "registered" ] && break - - if [ "$registration_state" = "searching" ] || [ "$registration_state" = "not_registered" ]; then - if [ "$registration_timeout" -lt "$timeout" ] || [ "$timeout" = "0" ]; then - [ "$registration_state" = "searching" ] || { - echo "Device stopped network registration. Restart network registration" - uqmi -s -d "$device" --network-register > /dev/null 2>&1 - } - let registration_timeout++ - sleep 1 - continue - fi - echo "Network registration failed, registration timeout reached" - else - # registration_state is 'registration_denied' or 'unknown' or '' - echo "Network registration failed (reason: '$registration_state')" - fi - - proto_notify_error "$interface" NETWORK_REGISTRATION_FAILED - proto_block_restart "$interface" - return 1 - done - - [ -n "$modes" ] && uqmi -s -d "$device" --set-network-modes "$modes" > /dev/null 2>&1 - - echo "Starting network $interface" - - pdptype=$(echo "$pdptype" | awk '{print tolower($0)}') - [ "$pdptype" = "ip" -o "$pdptype" = "ipv6" -o "$pdptype" = "ipv4v6" ] || pdptype="ip" - - if [ "$pdptype" = "ip" ]; then - [ -z "$autoconnect" ] && autoconnect=1 - [ "$autoconnect" = 0 ] && autoconnect="" - else - [ "$autoconnect" = 1 ] || autoconnect="" - fi - - [ "$pdptype" = "ip" -o "$pdptype" = "ipv4v6" ] && { - cid_4=$(uqmi -s -d "$device" --get-client-id wds) - if ! [ "$cid_4" -eq "$cid_4" ] 2> /dev/null; then - echo "Unable to obtain client ID" - proto_notify_error "$interface" NO_CID - return 1 - fi - - uqmi -s -d "$device" --set-client-id wds,"$cid_4" --set-ip-family ipv4 > /dev/null 2>&1 - - pdh_4=$(uqmi -s -d "$device" --set-client-id wds,"$cid_4" \ - --start-network \ - ${apn:+--apn $apn} \ - ${profile:+--profile $profile} \ - ${auth:+--auth-type $auth} \ - ${username:+--username $username} \ - ${password:+--password $password} \ - ${autoconnect:+--autoconnect}) - - # pdh_4 is a numeric value on success - if ! [ "$pdh_4" -eq "$pdh_4" ] 2> /dev/null; then - echo "Unable to connect IPv4" - uqmi -s -d "$device" --set-client-id wds,"$cid_4" --release-client-id wds > /dev/null 2>&1 - proto_notify_error "$interface" CALL_FAILED - return 1 - fi - - # Check data connection state - connstat=$(uqmi -s -d "$device" --get-data-status) - [ "$connstat" == '"connected"' ] || { - echo "No data link!" - uqmi -s -d "$device" --set-client-id wds,"$cid_4" --release-client-id wds > /dev/null 2>&1 - proto_notify_error "$interface" CALL_FAILED - return 1 - } - } - - [ "$pdptype" = "ipv6" -o "$pdptype" = "ipv4v6" ] && { - cid_6=$(uqmi -s -d "$device" --get-client-id wds) - if ! [ "$cid_6" -eq "$cid_6" ] 2> /dev/null; then - echo "Unable to obtain client ID" - proto_notify_error "$interface" NO_CID - return 1 - fi - - uqmi -s -d "$device" --set-client-id wds,"$cid_6" --set-ip-family ipv6 > /dev/null 2>&1 - - pdh_6=$(uqmi -s -d "$device" --set-client-id wds,"$cid_6" \ - --start-network \ - ${apn:+--apn $apn} \ - ${profile:+--profile $profile} \ - ${auth:+--auth-type $auth} \ - ${username:+--username $username} \ - ${password:+--password $password} \ - ${autoconnect:+--autoconnect}) - - # pdh_6 is a numeric value on success - if ! [ "$pdh_6" -eq "$pdh_6" ] 2> /dev/null; then - echo "Unable to connect IPv6" - uqmi -s -d "$device" --set-client-id wds,"$cid_6" --release-client-id wds > /dev/null 2>&1 - proto_notify_error "$interface" CALL_FAILED - return 1 - fi - - # Check data connection state - connstat=$(uqmi -s -d "$device" --get-data-status) - [ "$connstat" == '"connected"' ] || { - echo "No data link!" - uqmi -s -d "$device" --set-client-id wds,"$cid_6" --release-client-id wds > /dev/null 2>&1 - proto_notify_error "$interface" CALL_FAILED - return 1 - } - } - - echo "Setting up $ifname" - proto_init_update "$ifname" 1 - proto_set_keep 1 - proto_add_data - [ -n "$pdh_4" ] && { - json_add_string "cid_4" "$cid_4" - json_add_string "pdh_4" "$pdh_4" - } - [ -n "$pdh_6" ] && { - json_add_string "cid_6" "$cid_6" - json_add_string "pdh_6" "$pdh_6" - } - proto_close_data - proto_send_update "$interface" - - local zone="$(fw3 -q network "$interface" 2>/dev/null)" - - [ -n "$pdh_6" ] && { - if [ -z "$dhcpv6" -o "$dhcpv6" = 0 ]; then - json_load "$(uqmi -s -d $device --set-client-id wds,$cid_6 --get-current-settings)" - json_select ipv6 - json_get_var ip_6 ip - json_get_var gateway_6 gateway - json_get_var dns1_6 dns1 - json_get_var dns2_6 dns2 - json_get_var ip_prefix_length ip-prefix-length - - proto_init_update "$ifname" 1 - proto_set_keep 1 - proto_add_ipv6_address "$ip_6" "128" - proto_add_ipv6_prefix "${ip_6}/${ip_prefix_length}" - proto_add_ipv6_route "$gateway_6" "128" - [ "$defaultroute" = 0 ] || proto_add_ipv6_route "::0" 0 "$gateway_6" "" "" "${ip_6}/${ip_prefix_length}" - [ "$peerdns" = 0 ] || { - proto_add_dns_server "$dns1_6" - proto_add_dns_server "$dns2_6" - } - [ -n "$zone" ] && { - proto_add_data - json_add_string zone "$zone" - proto_close_data - } - proto_send_update "$interface" - else - json_init - json_add_string name "${interface}_6" - json_add_string ifname "@$interface" - json_add_string proto "dhcpv6" - [ -n "$ip6table" ] && json_add_string ip6table "$ip6table" - proto_add_dynamic_defaults - # RFC 7278: Extend an IPv6 /64 Prefix to LAN - json_add_string extendprefix 1 - [ -n "$zone" ] && json_add_string zone "$zone" - json_close_object - ubus call network add_dynamic "$(json_dump)" - fi - } - - [ -n "$pdh_4" ] && { - if [ "$dhcp" = 0 ]; then - json_load "$(uqmi -s -d $device --set-client-id wds,$cid_4 --get-current-settings)" - json_select ipv4 - json_get_var ip_4 ip - json_get_var gateway_4 gateway - json_get_var dns1_4 dns1 - json_get_var dns2_4 dns2 - json_get_var subnet_4 subnet - - proto_init_update "$ifname" 1 - proto_set_keep 1 - proto_add_ipv4_address "$ip_4" "$subnet_4" - proto_add_ipv4_route "$gateway_4" "128" - [ "$defaultroute" = 0 ] || proto_add_ipv4_route "0.0.0.0" 0 "$gateway_4" - [ "$peerdns" = 0 ] || { - proto_add_dns_server "$dns1_4" - proto_add_dns_server "$dns2_4" - } - [ -n "$zone" ] && { - proto_add_data - json_add_string zone "$zone" - proto_close_data - } - proto_send_update "$interface" - else - json_init - json_add_string name "${interface}_4" - json_add_string ifname "@$interface" - json_add_string proto "dhcp" - [ -n "$ip4table" ] && json_add_string ip4table "$ip4table" - proto_add_dynamic_defaults - [ -n "$zone" ] && json_add_string zone "$zone" - json_close_object - ubus call network add_dynamic "$(json_dump)" - fi - } -} - -qmi_wds_stop() { - local cid="$1" - local pdh="$2" - - [ -n "$cid" ] || return - - uqmi -s -d "$device" --set-client-id wds,"$cid" \ - --stop-network 0xffffffff \ - --autoconnect > /dev/null 2>&1 - - [ -n "$pdh" ] && { - uqmi -s -d "$device" --set-client-id wds,"$cid" \ - --stop-network "$pdh" > /dev/null 2>&1 - } - - uqmi -s -d "$device" --set-client-id wds,"$cid" \ - --release-client-id wds > /dev/null 2>&1 -} - -proto_qmi_teardown() { - local interface="$1" - - local device cid_4 pdh_4 cid_6 pdh_6 - json_get_vars device - - [ -n "$ctl_device" ] && device=$ctl_device - - echo "Stopping network $interface" - - json_load "$(ubus call network.interface.$interface status)" - json_select data - json_get_vars cid_4 pdh_4 cid_6 pdh_6 - - qmi_wds_stop "$cid_4" "$pdh_4" - qmi_wds_stop "$cid_6" "$pdh_6" - - proto_init_update "*" 0 - proto_send_update "$interface" -} - -[ -n "$INCLUDE_ONLY" ] || { - add_protocol qmi -}