summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO28
-rw-r--r--0001-Added-QMI_OVER_MBIM-config-option.patch80
-rw-r--r--0002-Added-FCC_AUTH-option.patch40
-rw-r--r--0003-Added-STATIC_IP-option-to-configure-non-DHCP-network.patch121
-rw-r--r--PKGBUILD52
-rw-r--r--qmi24
6 files changed, 345 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..d4233144c1db
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,28 @@
+pkgbase = libqmi-qmi-over-mbim-netctl
+ pkgdesc = QMI modem protocol helper library with experimental qmi-over-mbim patch
+ pkgver = 1.0.0
+ pkgrel = 4
+ url = http://www.freedesktop.org/wiki/Software/libqmi/
+ arch = x86_64
+ license = GPL2
+ makedepends = git
+ makedepends = gtk-doc
+ makedepends = libmbim-qmi-over-mbim
+ depends = glib2
+ depends = bash
+ depends = iproute2
+ provides = libqmi
+ conflicts = libqmi
+ source = git+https://cgit.freedesktop.org/libqmi
+ source = 0001-Added-QMI_OVER_MBIM-config-option.patch
+ source = 0002-Added-FCC_AUTH-option.patch
+ source = 0003-Added-STATIC_IP-option-to-configure-non-DHCP-network.patch
+ source = qmi
+ md5sums = SKIP
+ md5sums = 379023e2e68bab23dc294c7c600d1d9d
+ md5sums = 5773778a63f7a77b0112e888055c1d09
+ md5sums = 79ccc3075ff1628d63ef7af756dd19c5
+ md5sums = f5d7b11b118b876b1e6f1af3f256c900
+
+pkgname = libqmi-qmi-over-mbim-netctl
+
diff --git a/0001-Added-QMI_OVER_MBIM-config-option.patch b/0001-Added-QMI_OVER_MBIM-config-option.patch
new file mode 100644
index 000000000000..3bd4631760a4
--- /dev/null
+++ b/0001-Added-QMI_OVER_MBIM-config-option.patch
@@ -0,0 +1,80 @@
+From 8e2ae3d491b4a27403d9c4f7457d8095d813d5fd Mon Sep 17 00:00:00 2001
+From: Sebastien Pahl <sebastien.pahl@gmail.com>
+Date: Mon, 30 May 2016 01:48:35 -0700
+Subject: [PATCH 1/3] Added QMI_OVER_MBIM config option
+
+---
+ utils/qmi-network.in | 21 +++++++++++++++------
+ 1 file changed, 15 insertions(+), 6 deletions(-)
+
+diff --git a/utils/qmi-network.in b/utils/qmi-network.in
+index 8411846..519389a 100755
+--- a/utils/qmi-network.in
++++ b/utils/qmi-network.in
+@@ -168,6 +168,13 @@ load_profile ()
+ else
+ echo " qmi-proxy: no"
+ fi
++
++ if [ "$QMI_OVER_MBIM" = "yes" ]; then
++ echo " qmi-over-mbim: $QMI_OVER_MBIM"
++ MBIM_OPT='--device-open-mbim'
++ else
++ echo " qmi-over-mbim: no"
++ fi
+ else
+ echo "Profile at '$PROFILE_FILE' not found..."
+ fi
+@@ -332,7 +339,9 @@ start_network ()
+ exit 3
+ fi
+
+- setup_data_format
++ if [ "$QMI_OVER_MBIM" != "yes" ]; then
++ setup_data_format
++ fi
+
+ START_NETWORK_ARGS="apn='$APN'"
+ if [ -n "$APN_USER" ]; then
+@@ -342,7 +351,7 @@ start_network ()
+ fi
+ fi
+
+- START_NETWORK_CMD="qmicli -d $DEVICE --wds-start-network=$START_NETWORK_ARGS $USE_PREVIOUS_CID --client-no-release-cid $PROXY_OPT"
++ START_NETWORK_CMD="qmicli -d $DEVICE --wds-start-network=$START_NETWORK_ARGS $USE_PREVIOUS_CID --client-no-release-cid $PROXY_OPT $MBIM_OPT"
+ echo "Starting network with '$START_NETWORK_CMD'..."
+
+ if [ -n "$QMIDEBUG" ]; then
+@@ -371,7 +380,7 @@ start_network ()
+ if [ -z "$PDH" ]; then
+ echo "error: network start failed, no packet data handle" 1>&2
+ # Cleanup the client
+- qmicli -d "$DEVICE" --wds-noop --client-cid="$CID" $PROXY_OPT
++ qmicli -d "$DEVICE" --wds-noop --client-cid="$CID" $PROXY_OPT $MBIM_OPT
+ clear_state
+ exit 2
+ else
+@@ -389,9 +398,9 @@ stop_network ()
+ elif [ -z "$PDH" ]; then
+ echo "Network already stopped; need to cleanup CID $CID"
+ # Cleanup the client
+- qmicli -d "$DEVICE" --wds-noop --client-cid="$CID" $PROXY_OPT
++ qmicli -d "$DEVICE" --wds-noop --client-cid="$CID" $PROXY_OPT $MBIM_OPT
+ else
+- STOP_NETWORK_CMD="qmicli -d $DEVICE --wds-stop-network=$PDH --client-cid=$CID $PROXY_OPT"
++ STOP_NETWORK_CMD="qmicli -d $DEVICE --wds-stop-network=$PDH --client-cid=$CID $PROXY_OPT $MBIM_OPT"
+ echo "Stopping network with '$STOP_NETWORK_CMD'..."
+
+ if [ -n "$QMIDEBUG" ]; then
+@@ -415,7 +424,7 @@ packet_service_status ()
+ USE_PREVIOUS_CID="--client-cid=$CID --client-no-release-cid"
+ fi
+
+- STATUS_CMD="qmicli -d $DEVICE --wds-get-packet-service-status $USE_PREVIOUS_CID $PROXY_OPT"
++ STATUS_CMD="qmicli -d $DEVICE --wds-get-packet-service-status $USE_PREVIOUS_CID $PROXY_OPT $MBIM_OPT"
+ echo "Getting status with '$STATUS_CMD'..."
+
+ if [ -n "$QMIDEBUG" ]; then
+--
+2.8.3
+
diff --git a/0002-Added-FCC_AUTH-option.patch b/0002-Added-FCC_AUTH-option.patch
new file mode 100644
index 000000000000..6ab3e22b5452
--- /dev/null
+++ b/0002-Added-FCC_AUTH-option.patch
@@ -0,0 +1,40 @@
+From 21af3ba8cda96659203a47fa16145493c5e65284 Mon Sep 17 00:00:00 2001
+From: Sebastien Pahl <sebastien.pahl@gmail.com>
+Date: Mon, 30 May 2016 01:48:40 -0700
+Subject: [PATCH 2/3] Added FCC_AUTH option
+
+---
+ utils/qmi-network.in | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+diff --git a/utils/qmi-network.in b/utils/qmi-network.in
+index 519389a..480dcf0 100755
+--- a/utils/qmi-network.in
++++ b/utils/qmi-network.in
+@@ -175,6 +175,12 @@ load_profile ()
+ else
+ echo " qmi-over-mbim: no"
+ fi
++
++ if [ -n "$FCC_AUTH" ]; then
++ echo " fcc auth: $FCC_AUTH"
++ else
++ echo " fcc auth: unset"
++ fi
+ else
+ echo "Profile at '$PROFILE_FILE' not found..."
+ fi
+@@ -339,6 +345,10 @@ start_network ()
+ exit 3
+ fi
+
++ if [ "$FCC_AUTH" = "yes" ]; then
++ qmicli -d $DEVICE --dms-set-fcc-authentication $PROXY_OPT $MBIM_OPT
++ fi
++
+ if [ "$QMI_OVER_MBIM" != "yes" ]; then
+ setup_data_format
+ fi
+--
+2.8.3
+
diff --git a/0003-Added-STATIC_IP-option-to-configure-non-DHCP-network.patch b/0003-Added-STATIC_IP-option-to-configure-non-DHCP-network.patch
new file mode 100644
index 000000000000..9e9d1a7cac3f
--- /dev/null
+++ b/0003-Added-STATIC_IP-option-to-configure-non-DHCP-network.patch
@@ -0,0 +1,121 @@
+From 091b4ee4db545538117e7d469516384d7f0af4ef Mon Sep 17 00:00:00 2001
+From: Sebastien Pahl <sebastien.pahl@gmail.com>
+Date: Mon, 30 May 2016 01:48:44 -0700
+Subject: [PATCH 3/3] Added STATIC_IP option to configure non DHCP networks
+
+---
+ utils/qmi-network.in | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 63 insertions(+)
+
+diff --git a/utils/qmi-network.in b/utils/qmi-network.in
+index 480dcf0..077c556 100755
+--- a/utils/qmi-network.in
++++ b/utils/qmi-network.in
+@@ -181,6 +181,12 @@ load_profile ()
+ else
+ echo " fcc auth: unset"
+ fi
++
++ if [ -n "$STATIC_IP" ]; then
++ echo " static ip: $STATIC_IP"
++ else
++ echo " static ip: unset"
++ fi
+ else
+ echo "Profile at '$PROFILE_FILE' not found..."
+ fi
+@@ -328,6 +334,47 @@ Downlink data aggregation max datagrams: '0'
+ fi
+ }
+
++# source: https://forums.gentoo.org/viewtopic-t-888736-start-0.html
++mask2cdr ()
++{
++ # Assumes there's no "255." after a non-255 byte in the mask
++ local x=${1##*255.}
++ set -- 0^^^128^192^224^240^248^252^254^ $(( (${#1} - ${#x})*2 )) ${x%%.*}
++ x=${1%%$3*}
++ echo $(( $2 + (${#x}/4) ))
++}
++
++ip_config ()
++{
++ eval $(qmicli -d $DEVICE --wds-get-current-settings $PROXY_OPT $MBIM_OPT \
++ | grep "IP Family: IPv4" -A6 \
++ | tr '[:lower:]' '[:upper:]' \
++ | sed -e 's/: /=/' -e 's/^[ \t]*//;s/[ \t]*$//' -e 's/ /_/g')
++ IPV4_CIDR=$IPV4_ADDRESS/$(mask2cdr $IPV4_SUBNET_MASK)
++ IFACE=$(qmicli -d $DEVICE -w)
++ echo IP_FAMILY=$IP_FAMILY
++ echo IPV4_ADDRESS=$IPV4_ADDRESS
++ echo IPV4_CIDR=$IPV4_CIDR
++ echo IPV4_SUBNET_MASK=$IPV4_SUBNET_MASK
++ echo IPV4_GATEWAY_ADDRESS=$IPV4_GATEWAY_ADDRESS
++ echo IPV4_PRIMARY_DNS=$IPV4_PRIMARY_DNS
++ echo IPV4_SECONDARY_DNS=$IPV4_SECONDARY_DNS
++ echo MTU=$MTU
++ echo IFACE=$IFACE
++}
++
++static_ip_up ()
++{
++ ip_config
++ save_state "IFACE" $IFACE
++ ip link set $IFACE up
++ ip addr add $IPV4_CIDR broadcast + dev $IFACE
++ ip route add default via $IPV4_GATEWAY_ADDRESS
++ mv /etc/resolv.conf /etc/resolv.conf.qmisave
++ echo nameserver $IPV4_PRIMARY_DNS > /etc/resolv.conf
++ echo nameserver $IPV4_SECONDARY_DNS >> /etc/resolv.conf
++}
++
+ # qmicli -d /dev/cdc-wdm0 --wds-start-network --client-no-release-cid
+ # [/dev/cdc-wdm0] Network started
+ # Packet data handle: 3634026241
+@@ -373,6 +420,9 @@ start_network ()
+ CID: '80'"
+ else
+ START_NETWORK_OUT=`$START_NETWORK_CMD`
++ if [ "$STATIC_IP" = "yes" ]; then
++ static_ip_up
++ fi
+ fi
+
+ # Save the new CID if we didn't use any before
+@@ -400,6 +450,13 @@ start_network ()
+ echo "Network started successfully"
+ }
+
++static_ip_down ()
++{
++ mv /etc/resolv.conf.qmisave /etc/resolv.conf
++ ip addr flush dev $IFACE
++ ip link set $IFACE down
++}
++
+ # qmicli -d /dev/cdc-wdm0 --wds-stop-network
+ stop_network ()
+ {
+@@ -418,6 +475,9 @@ stop_network ()
+ [/dev/cdc-wdm0] Network stopped
+ "
+ else
++ if [ "$STATIC_IP" = "yes" ]; then
++ static_ip_down
++ fi
+ STOP_NETWORK_OUT=`$STOP_NETWORK_CMD`
+ fi
+
+@@ -476,6 +536,9 @@ case $COMMAND in
+ "status")
+ packet_service_status
+ ;;
++ "ip_config")
++ ip_config
++ ;;
+ *)
+ echo "error: unexpected command '$COMMAND'" 1>&2
+ print_usage
+--
+2.8.3
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..8154f20decd4
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,52 @@
+# based on: https://aur.archlinux.org/packages/libqmi-qmi-over-mbim/
+
+pkgname='libqmi-qmi-over-mbim-netctl'
+pkgver='1.0.0'
+pkgrel=4
+pkgdesc="QMI modem protocol helper library with experimental qmi-over-mbim patch"
+arch=('x86_64')
+url='http://www.freedesktop.org/wiki/Software/libqmi/'
+license=('GPL2')
+depends=('glib2' 'bash' 'iproute2')
+makedepends=('git' 'gtk-doc' 'libmbim-qmi-over-mbim')
+provides=('libqmi')
+conflicts=('libqmi')
+source=("git+https://cgit.freedesktop.org/libqmi"
+ "0001-Added-QMI_OVER_MBIM-config-option.patch"
+ "0002-Added-FCC_AUTH-option.patch"
+ "0003-Added-STATIC_IP-option-to-configure-non-DHCP-network.patch"
+ "qmi")
+md5sums=('SKIP'
+ "379023e2e68bab23dc294c7c600d1d9d"
+ "5773778a63f7a77b0112e888055c1d09"
+ "79ccc3075ff1628d63ef7af756dd19c5"
+ "f5d7b11b118b876b1e6f1af3f256c900")
+pkgdir='pkg'
+srcdir='src'
+
+
+prepare() {
+ cd libqmi
+ git checkout qmi-over-mbim
+ git pull origin qmi-over-mbim
+ git apply ${srcdir}/0001-Added-QMI_OVER_MBIM-config-option.patch
+ git apply ${srcdir}/0002-Added-FCC_AUTH-option.patch
+ git apply ${srcdir}/0003-Added-STATIC_IP-option-to-configure-non-DHCP-network.patch
+}
+
+
+build() {
+ cd libqmi
+ ./autogen.sh --enable-mbim-qmux --prefix=/usr
+}
+
+
+package() {
+ cd libqmi
+ make DESTDIR="${pkgdir}/" install
+ libtool --finish "${pkgdir}/usr/lib"
+ # Fix file name for ModemManager
+ ln "${pkgdir}/usr/lib/libqmi-glib.so" "${pkgdir}/usr/lib/libqmi-glib.so.1"
+ mkdir -p "${pkgdir}/usr/lib/network/connections/"
+ cp ${srcdir}/qmi "${pkgdir}/usr/lib/network/connections/"
+}
diff --git a/qmi b/qmi
new file mode 100644
index 000000000000..5c3f12ff974b
--- /dev/null
+++ b/qmi
@@ -0,0 +1,24 @@
+# QMI connection support for netctl
+
+. "$SUBR_DIR/ip"
+. "$SUBR_DIR/rfkill"
+
+
+qmi_up() {
+ if [[ $RFKill ]]; then
+ rf_enable "$Interface" "$RFKill" || return 1
+ fi
+
+ qmi-network $Device start || return 1
+ chmod 644 /etc/resolv.conf
+}
+
+qmi_down() {
+ qmi-network $Device stop
+ if [[ $RFKill ]]; then
+ rf_disable "$Interface" "$RFKill"
+ fi
+}
+
+
+# vim: ft=sh ts=4 et sw=4: