From patchwork Fri Jan 16 19:30:38 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?S=C5=82awomir_Demeszko?= X-Patchwork-Id: 429996 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 60EFD140146 for ; Sat, 17 Jan 2015 06:30:55 +1100 (AEDT) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id DBB3F28A716; Fri, 16 Jan 2015 20:28:33 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 48413280142 for ; Fri, 16 Jan 2015 20:28:28 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 CL_IP_EQ_FROM_MX=-3.1; rate: -7.6 Received: from hosting.nazwa24.pl (ns1.hosting.nazwa24.pl [46.242.129.143]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Fri, 16 Jan 2015 20:28:27 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=wireless-instruments.com; s=default; h=Content-Transfer-Encoding:Content-Type:MIME-Version:Message-Id:Date:Subject:Cc:To:From; bh=ldt7ASjyRfG1UJNoEaFWNDW8cB5L3Kz2AG26wuu/rOg=; b=cR0CTCHXfTQoEkSFLOLpEL2u2ikxV6tCNQzf67uw2Cle6xDqeK6/pCyI1mBgeSYRbKHt2YuXHcVxwbU1izOxwWz6oDPWxfO1QbV8QZliyITZYfOHqcLNyXqSf1zyH+a6SVVVLAEqEuCYdI7gKnpskxFk3W02U01T/QmLWVC228A=; Received: from afo149.internetdsl.tpnet.pl ([83.16.144.149]:42958 helo=localhost.localdomain) by hosting.nazwa24.pl with esmtpsa (UNKNOWN:AES128-SHA256:128) (Exim 4.82) (envelope-from ) id 1YCCbU-0007VH-77; Fri, 16 Jan 2015 20:30:44 +0100 From: =?UTF-8?q?S=C5=82awomir=20Demeszko?= To: openwrt-devel@lists.openwrt.org Date: Fri, 16 Jan 2015 20:30:38 +0100 Message-Id: <1421436638-25758-1-git-send-email-s.demeszko@wireless-instruments.com> X-Mailer: git-send-email 1.9.1 MIME-Version: 1.0 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - hosting.nazwa24.pl X-AntiAbuse: Original Domain - lists.openwrt.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - wireless-instruments.com X-Get-Message-Sender-Via: hosting.nazwa24.pl: authenticated_id: s.demeszko@wireless-instruments.com Cc: =?UTF-8?q?S=C5=82awomir=20Demeszko?= Subject: [OpenWrt-Devel] [PATCH uqmi] Add command to specify preferred PLMN X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" Signed-off-by: SÅ‚awomir Demeszko --- commands-nas.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ commands-nas.h | 6 ++++++ 2 files changed, 66 insertions(+) diff --git a/commands-nas.c b/commands-nas.c index 831e3f4..33477dd 100644 --- a/commands-nas.c +++ b/commands-nas.c @@ -1,6 +1,10 @@ #include "qmi-message.h" static struct qmi_nas_set_system_selection_preference_request sel_req; +static struct { + bool mcc_is_set; + bool mnc_is_set; +} plmn_code_flag; #define cmd_nas_do_set_system_selection_cb no_cb static enum qmi_cmd_result @@ -99,6 +103,62 @@ cmd_nas_set_roaming_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct return do_sel_network(); } +#define cmd_nas_set_mcc_cb no_cb +static enum qmi_cmd_result +cmd_nas_set_mcc_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg) +{ + char *err; + int value = strtoul(arg, &err, 10); + if (err && *err) { + uqmi_add_error("Invalid MCC value"); + return QMI_CMD_EXIT; + } + + sel_req.data.network_selection_preference.mcc = value; + plmn_code_flag.mcc_is_set = true; + return QMI_CMD_DONE; +} + +#define cmd_nas_set_mnc_cb no_cb +static enum qmi_cmd_result +cmd_nas_set_mnc_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg) +{ + char *err; + int value = strtoul(arg, &err, 10); + if (err && *err) { + uqmi_add_error("Invalid MNC value"); + return QMI_CMD_EXIT; + } + + sel_req.data.network_selection_preference.mnc = value; + plmn_code_flag.mnc_is_set = true; + return QMI_CMD_DONE; +} + +#define cmd_nas_set_plmn_cb no_cb +static enum qmi_cmd_result +cmd_nas_set_plmn_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg) +{ + sel_req.set.network_selection_preference = 1; + sel_req.data.network_selection_preference.mode = QMI_NAS_NETWORK_SELECTION_PREFERENCE_AUTOMATIC; + + if (!plmn_code_flag.mcc_is_set && plmn_code_flag.mnc_is_set) { + uqmi_add_error("No MCC value"); + return QMI_CMD_EXIT; + } + + if (plmn_code_flag.mcc_is_set && sel_req.data.network_selection_preference.mcc) { + if (!plmn_code_flag.mnc_is_set) { + uqmi_add_error("No MNC value"); + return QMI_CMD_EXIT; + } else { + sel_req.data.network_selection_preference.mode = QMI_NAS_NETWORK_SELECTION_PREFERENCE_MANUAL; + } + } + + return do_sel_network(); +} + #define cmd_nas_initiate_network_register_cb no_cb static enum qmi_cmd_result cmd_nas_initiate_network_register_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg) diff --git a/commands-nas.h b/commands-nas.h index 4a4dace..d2bde7b 100644 --- a/commands-nas.h +++ b/commands-nas.h @@ -2,6 +2,9 @@ __uqmi_command(nas_do_set_system_selection, __set-system-selection, no, QMI_SERVICE_NAS), \ __uqmi_command(nas_set_network_modes, set-network-modes, required, CMD_TYPE_OPTION), \ __uqmi_command(nas_initiate_network_register, network-register, no, QMI_SERVICE_NAS), \ + __uqmi_command(nas_set_plmn, set-plmn, no, QMI_SERVICE_NAS), \ + __uqmi_command(nas_set_mcc, mcc, required, CMD_TYPE_OPTION), \ + __uqmi_command(nas_set_mnc, mnc, required, CMD_TYPE_OPTION), \ __uqmi_command(nas_network_scan, network-scan, no, QMI_SERVICE_NAS), \ __uqmi_command(nas_get_signal_info, get-signal-info, no, QMI_SERVICE_NAS), \ __uqmi_command(nas_get_serving_system, get-serving-system, no, QMI_SERVICE_NAS), \ @@ -17,6 +20,9 @@ " Available modes: any, off, only\n" \ " --network-scan: Initiate network scan\n" \ " --network-register: Initiate network register\n" \ + " --set-plmn: Register at specified network\n" \ + " --mcc : Mobile Country Code (0 - auto)\n" \ + " --mnc : Mobile Network Code\n" \ " --get-signal-info: Get signal strength info\n" \ " --get-serving-system: Get serving system info\n" \