From patchwork Fri Aug 7 18:50:04 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?b?QW50dGkgU2VwcMOkbMOk?= X-Patchwork-Id: 505225 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.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 57676140285 for ; Sat, 8 Aug 2015 04:52:39 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=Fv+v8HiK; dkim-atps=neutral Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id CDA7B2845FE; Fri, 7 Aug 2015 20:50:15 +0200 (CEST) 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,FREEMAIL_FROM, 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 999062809D4 for ; Fri, 7 Aug 2015 20:49:46 +0200 (CEST) X-policyd-weight: using cached result; rate: -8.5 Received: from mail-lb0-f169.google.com (mail-lb0-f169.google.com [209.85.217.169]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Fri, 7 Aug 2015 20:49:46 +0200 (CEST) Received: by lbbpo9 with SMTP id po9so66025926lbb.2 for ; Fri, 07 Aug 2015 11:50:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-type:content-transfer-encoding; bh=oo75yl7YmlNI+eVrj9FxHtSdaOC7RQHKWnxmCROx+Mo=; b=Fv+v8HiK9P54nyj0Wq4APj1C/ldqGCEm1C9ubcECc4aGyLgnFbVJnQ1jKotEFISVtz EQ4Qq0uHZ5y3oKbjUsM9Lp/U0/q7tK5XLz9qaV9Ckd4idUoOVnCWf5bFUsSl7NcPQImG rtWuq6mwlFUt8fyfZjxHaEXmRpu5I5JQncY0qeeHhMZ9q6y86PobZmfUU8+6zh9mSddE +y5AvgXH+RcOFA3iU0QWtf36IN/xlrl9sHvrgS2ONBpLpyXaMFJ4MBqcgtZQzhCX2GLP pt1S0yGF2+ioEkrT9c5cRAw+4QsPPnveW0ATnhQCiMmAWW3gqsdwEtIsDiLqRPq10Zle MPbQ== X-Received: by 10.112.13.134 with SMTP id h6mr9574347lbc.15.1438973424677; Fri, 07 Aug 2015 11:50:24 -0700 (PDT) Received: from raspberrypi.lan (a88-115-235-191.elisa-laajakaista.fi. [88.115.235.191]) by smtp.gmail.com with ESMTPSA id r6sm2348886lbw.10.2015.08.07.11.50.23 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 07 Aug 2015 11:50:24 -0700 (PDT) From: =?UTF-8?q?Antti=20Sepp=C3=A4l=C3=A4?= To: openwrt-devel@lists.openwrt.org Date: Fri, 7 Aug 2015 18:50:04 +0000 Message-Id: <1438973405-25757-2-git-send-email-a.seppala@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1438973405-25757-1-git-send-email-a.seppala@gmail.com> References: <1438973405-25757-1-git-send-email-a.seppala@gmail.com> MIME-Version: 1.0 Cc: Matti Laakso Subject: [OpenWrt-Devel] [PATCH 1/2] uqmi: Add IP family selection command-line switch 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" This patch adds support for (optionally) specifying ip family via a command- line switch. The switch sends respective "Set IP Family" WDS message to qmi-device before actually connecting. Using this switch allows connecting to ipv6 enabled networks or networks with dual-stack support with the appropriate hardware (dongle and FW with ipv6 support) and configuration (AT+CGDCONT reporting ipv6 or ipv4v6 capability). Help text: --ip-family : Set ip-family for the connection (ipv4, ipv6, unspecified) Usage example for ipv6: uqmi -d /dev/cdc-wdm0 --set-client-id wds, --start-network --ip-family ipv6 Dual-stack usage example: uqmi -d /dev/cdc-wdm0 --get-client-id wds uqmi -d /dev/cdc-wdm0 --set-client-id wds, --start-network --ip-family ipv4 uqmi -d /dev/cdc-wdm0 --get-client-id wds uqmi -d /dev/cdc-wdm0 --set-client-id wds, --start-network --ip-family ipv6 Signed-off-by: Antti Seppälä Tested-by: Matti Laakso --- commands-wds.c | 28 ++++++++++++++++++++++++++++ commands-wds.h | 2 ++ 2 files changed, 30 insertions(+) diff --git a/commands-wds.c b/commands-wds.c index aa57d03..fdf9003 100644 --- a/commands-wds.c +++ b/commands-wds.c @@ -170,3 +170,31 @@ cmd_wds_reset_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_m qmi_set_wds_reset_request(msg); return QMI_CMD_REQUEST; } + +#define cmd_wds_set_ip_family_cb no_cb +static enum qmi_cmd_result +cmd_wds_set_ip_family_prepare(struct qmi_dev *qmi, struct qmi_request *req, struct qmi_msg *msg, char *arg) +{ + struct qmi_wds_set_ip_family_request ipf_req; + const struct ip_modes { + const char *name; + const QmiWdsIpFamily mode; + } modes[] = { + { "ipv4", QMI_WDS_IP_FAMILY_IPV4 }, + { "ipv6", QMI_WDS_IP_FAMILY_IPV6 }, + { "unspecified", QMI_WDS_IP_FAMILY_UNSPECIFIED }, + }; + int i; + + for (i = 0; i < ARRAY_SIZE(modes); i++) { + if (strcasecmp(modes[i].name, arg) != 0) + continue; + + qmi_set(&ipf_req, preference, modes[i].mode); + qmi_set_wds_set_ip_family_request(msg, &ipf_req); + return QMI_CMD_REQUEST; + } + + uqmi_add_error("Invalid value (valid: ipv4, ipv6, unspecified)"); + return QMI_CMD_EXIT; +} diff --git a/commands-wds.h b/commands-wds.h index 19e6406..8ddfb1e 100644 --- a/commands-wds.h +++ b/commands-wds.h @@ -24,6 +24,7 @@ __uqmi_command(wds_set_auth, auth-type, required, CMD_TYPE_OPTION), \ __uqmi_command(wds_set_username, username, required, CMD_TYPE_OPTION), \ __uqmi_command(wds_set_password, password, required, CMD_TYPE_OPTION), \ + __uqmi_command(wds_set_ip_family, ip-family, required, CMD_TYPE_OPTION), \ __uqmi_command(wds_set_autoconnect, autoconnect, no, CMD_TYPE_OPTION), \ __uqmi_command(wds_stop_network, stop-network, required, QMI_SERVICE_WDS), \ __uqmi_command(wds_get_packet_service_status, get-data-status, no, QMI_SERVICE_WDS), \ @@ -36,6 +37,7 @@ " --auth-type pap|chap|both|none: Use network authentication type\n" \ " --username : Use network username\n" \ " --password : Use network password\n" \ + " --ip-family : Use ip-family for the connection (ipv4, ipv6, unspecified)\n" \ " --autoconnect: Enable automatic connect/reconnect\n" \ " --stop-network : Stop network connection (use with option below)\n" \ " --autoconnect: Disable automatic connect/reconnect\n" \