ims-pdn-up: never let the ims PDN be the IPv6 default route
The PGW's router advertisement on the ims netdev offers a default router, and on IPv4-only wifi that is the phone's only IPv6 default route. Every AAAA-first client (apk, browsers) then sends its SYN into the IMS walled garden, which drops it: apk sat in SYN-SENT for nine minutes on the dev phone, and a field user's remedy was to stop imsd before package work. Set accept_ra_defrtr=0 on the muxed netdev before link-up (the router solicitation goes out once the link-local address passes DAD), flush a default route an earlier RA installed (an imsd restart), and give the P-CSCF a host route over the netdev instead. imsd talks to the P-CSCF only and already installs a host route per media peer; the RA's prefix and MTU still apply. The host route makes the P-CSCF reachable before the RA has been processed, so the PDN MTU ModemManager reports is set on the link as well, the way NetworkManager does for its bearers. A failed host route, or a P-CSCF that is not an IPv6 address (the PDN is brought up IPv6-only), fails the unit with a clear message. Dev phone (KPN, 0.3.8-r0): restart path drops the RA default and registers over the host route, apk update in 6 s where it hung; MO and MT calls with audio both ways; cold boot never installs the default route, the link carries the 1280 MTU before the host route exists, fresh registration in 1 s.
This commit is contained in:
parent
194e545a5a
commit
8b376bbf95
2 changed files with 62 additions and 3 deletions
11
README.md
11
README.md
|
|
@ -149,7 +149,16 @@ On a phone the daemon runs as root on the system bus (policy in
|
|||
account `user` access; adjust it alongside `AUDIO_USER` if your session
|
||||
account is named differently), started by `packaging/imsd.service`
|
||||
after `packaging/ims-pdn-up.sh` has brought up the ims PDN through
|
||||
ModemManager. It spawns `/usr/libexec/imsd-media` per call. Registration
|
||||
ModemManager. The bring-up never lets the ims PDN become the phone's IPv6
|
||||
default route: the PDN's router advertisement is not accepted as a default
|
||||
router (`accept_ra_defrtr=0` on the netdev; its prefix and MTU still apply)
|
||||
and the P-CSCF gets a host route instead, so on IPv4-only wifi the phone's
|
||||
other IPv6 traffic (apk, browsers) is not sent into the IMS walled garden,
|
||||
where it would hang. Media peers get a host route per call; anything else
|
||||
on the IMS network (its DNS servers, a traceroute target) needs its own
|
||||
(`ip -6 route add <addr> dev qmapmux0.0`). The PDN MTU ModemManager reports
|
||||
is set on the link. It spawns
|
||||
`/usr/libexec/imsd-media` per call. Registration
|
||||
resumes an in-kernel IPsec SA when one is present (avoiding the network's
|
||||
fresh-SA throttle) and keeps itself alive with a re-REGISTER refresh at half
|
||||
the granted lifetime. `packaging/APKBUILD` builds the apk from source via
|
||||
|
|
|
|||
Loading…
Reference in a new issue