diff options
-rw-r--r-- | .SRCINFO | 28 | ||||
-rw-r--r-- | 0001-Added-QMI_OVER_MBIM-config-option.patch | 80 | ||||
-rw-r--r-- | 0002-Added-FCC_AUTH-option.patch | 40 | ||||
-rw-r--r-- | 0003-Added-STATIC_IP-option-to-configure-non-DHCP-network.patch | 121 | ||||
-rw-r--r-- | PKGBUILD | 52 | ||||
-rw-r--r-- | qmi | 24 |
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/" +} @@ -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: |