The network hands the P-CSCF addresses to the modem in the PDN's Protocol Configuration Options; ModemManager's bearer code does not ask the modem for them, qmicli (libqmi 1.39) prints none of them, and libqmi has no TLV for the IPv6 list (0x2E), which is why PCSCF= was a required setting. A second QMI WDS client reads them once it is bound to the bearer's mux data port (the binding ModemManager gives its own clients): Bind Mux Data Port, Set IP Family 6, Get Current Settings, over one AF_QIPCRTR socket. Imsd:Qmi holds the bytes and the readers (0x22 the flag, 0x23 IPv4, 0x24 FQDN, 0x2E IPv6 in Qualcomm's layout: a count, then 16 bytes each); imsd-pcscf is the socket, the service lookup and the sequence, and prints the list, one address per line; nothing runs it yet. It sends no Start Network and no Stop Network; the bearer stayed connected and the registration stood after its runs (the fp6 journal's probe capture 04, benches 38 and 39). The build, the CI cross-compile, the tarball and the apk gain the product; linux-headers is named in the sysroot for <linux/qrtr.h>. Tested: crafter-build test, 8 passed; the aarch64 build of this commit's helper on the dev phone (KPN) against the live ims bearer.
38 lines
2.2 KiB
Shell
Executable file
38 lines
2.2 KiB
Shell
Executable file
#!/bin/sh
|
|
# SPDX-License-Identifier: GPL-3.0-only
|
|
# SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
|
# make-bin-tarball.sh — bundle the cross-compiled imsd binary + runtime files
|
|
# into the source tarball APKBUILD.binary consumes. Run from the repo root
|
|
# after a cross build; output lands in the current directory.
|
|
set -eu
|
|
|
|
VER="${1:-$(sed -n 's/.*char\* Version = "\(.*\)".*/\1/p' implementations/main.cpp)}"
|
|
[ -n "$VER" ] || { echo "could not determine version — pass it as \$1" >&2; exit 1; }
|
|
BIN=$(ls -t bin/imsd-aarch64-*/imsd 2>/dev/null | head -n1)
|
|
MEDIA=$(ls -t bin/imsd-media-aarch64-*/imsd-media 2>/dev/null | head -n1)
|
|
DIALERD=$(ls -t bin/imsd-dialerd-aarch64-*/imsd-dialerd 2>/dev/null | head -n1)
|
|
OFONOD=$(ls -t bin/imsd-ofonod-aarch64-*/imsd-ofonod 2>/dev/null | head -n1)
|
|
PCSCF=$(ls -t bin/imsd-pcscf-aarch64-*/imsd-pcscf 2>/dev/null | head -n1)
|
|
[ -n "$BIN" ] || { echo "no aarch64 imsd build found — cross-compile first" >&2; exit 1; }
|
|
[ -n "$MEDIA" ] || { echo "no aarch64 imsd-media build — cross-compile with --product=media" >&2; exit 1; }
|
|
[ -n "$DIALERD" ] || { echo "no aarch64 imsd-dialerd build — cross-compile with --product=dialerd" >&2; exit 1; }
|
|
[ -n "$OFONOD" ] || { echo "no aarch64 imsd-ofonod build — cross-compile with --product=ofonod" >&2; exit 1; }
|
|
[ -n "$PCSCF" ] || { echo "no aarch64 imsd-pcscf build — cross-compile with --product=pcscf" >&2; exit 1; }
|
|
|
|
stage=$(mktemp -d)
|
|
trap 'rm -rf "$stage"' EXIT
|
|
mkdir "$stage/imsd-$VER"
|
|
cp "$BIN" "$stage/imsd-$VER/imsd"
|
|
cp "$MEDIA" "$stage/imsd-$VER/imsd-media"
|
|
cp "$DIALERD" "$stage/imsd-$VER/imsd-dialerd"
|
|
cp "$OFONOD" "$stage/imsd-$VER/imsd-ofonod"
|
|
cp "$PCSCF" "$stage/imsd-$VER/imsd-pcscf"
|
|
cp packaging/ims-pdn-up.sh packaging/imsd-handover.sh packaging/imsd.service \
|
|
packaging/imsd-dialerd.desktop packaging/imsd-ofonod.service \
|
|
packaging/imsd-ofono-restart-calls.sh \
|
|
packaging/org.ofono.conf packaging/90_imsd-ofono.gschema.override \
|
|
packaging/80-imsd-ofono.preset \
|
|
packaging/net.catcrafts.IMS1.conf packaging/net.catcrafts.IMS1.policy \
|
|
"$stage/imsd-$VER/"
|
|
tar -C "$stage" -czf "imsd-$VER.tar.gz" "imsd-$VER"
|
|
echo "wrote imsd-$VER.tar.gz ($(du -h "imsd-$VER.tar.gz" | cut -f1))"
|