qmi, imsd-pcscf: read the ims PDN's P-CSCF list from the modem's runtime settings
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.
This commit is contained in:
parent
40a960f749
commit
a89ca5a60c
10 changed files with 701 additions and 25 deletions
|
|
@ -45,6 +45,7 @@ package() {
|
|||
cd "$srcdir/imsd-$pkgver"
|
||||
install -Dm755 imsd "$pkgdir"/usr/bin/imsd
|
||||
install -Dm755 imsd-media "$pkgdir"/usr/libexec/imsd-media
|
||||
install -Dm755 imsd-pcscf "$pkgdir"/usr/libexec/imsd-pcscf
|
||||
install -Dm755 imsd-dialerd "$pkgdir"/usr/bin/imsd-dialerd
|
||||
install -Dm755 ims-pdn-up.sh "$pkgdir"/usr/libexec/ims-pdn-up.sh
|
||||
install -Dm755 imsd-handover.sh "$pkgdir"/usr/libexec/imsd-handover.sh
|
||||
|
|
|
|||
|
|
@ -91,6 +91,7 @@ crafter-build -- $XTARGET
|
|||
crafter-build -- --product=media $XTARGET
|
||||
crafter-build -- --product=dialerd $XTARGET
|
||||
crafter-build -- --product=ofonod $XTARGET
|
||||
crafter-build -- --product=pcscf $XTARGET
|
||||
crafter-build test
|
||||
|
||||
# --- bundle + package
|
||||
|
|
|
|||
|
|
@ -12,10 +12,12 @@ 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
|
||||
|
|
@ -24,6 +26,7 @@ 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 \
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@
|
|||
# make-sysroot.sh — build an Alpine aarch64 sysroot for cross-compiling imsd.
|
||||
#
|
||||
# Downloads apk-tools-static + the Alpine signing keys from the CDN and
|
||||
# populates a minimal rootfs (musl, libc++, glib and their headers) that
|
||||
# populates a minimal rootfs (musl, libc++, glib and their headers, the Linux
|
||||
# UAPI headers) that
|
||||
# clang can use via --sysroot. No root, no qemu, no device needed:
|
||||
#
|
||||
# packaging/make-sysroot.sh [dir] # default: ~/.cache/imsd/sysroot-aarch64-alpine
|
||||
|
|
@ -22,8 +23,10 @@ ARCH=aarch64
|
|||
# none): crafter-build compiles the sysroot's own copy first. --upgrade below
|
||||
# is for a run over an existing sysroot: added alone beside libc++ 22,
|
||||
# llvm-runtimes 23's source did not compile against its headers; upgraded
|
||||
# with it, it did.
|
||||
PKGS="musl-dev libc++ libc++-dev llvm-runtimes glib-dev compiler-rt llvm-libunwind-dev gcc"
|
||||
# with it, it did. linux-headers is in it for <linux/qrtr.h>, which
|
||||
# imsd-pcscf's QRTR socket needs (the sysroot had it only as another
|
||||
# package's dependency before).
|
||||
PKGS="musl-dev libc++ libc++-dev llvm-runtimes glib-dev compiler-rt llvm-libunwind-dev gcc linux-headers"
|
||||
|
||||
work=$(mktemp -d)
|
||||
trap 'rm -rf "$work"' EXIT
|
||||
|
|
|
|||
Loading…
Reference in a new issue