Loading
feat: send CAMARA ipv4 port and private address to SRM
Both mappers put device.ipv4Address.publicAddress into target.device.ipv4 and
dropped publicPort and privateAddress, because the canonical target had nowhere
to put them -- srm/canonical-parameters-schema.md mapped the whole CAMARA
object onto one string.
CAMARA requires publicAddress plus at least one of privateAddress or publicPort
because "in general, mobile devices cannot be identified by their public IPv4
address alone". Under carrier NAT one public address is shared by thousands of
subscribers and the port is what selects one of them, so sending the address
alone asks SRM to resolve a device from information the spec calls
insufficient. CAMARA's own conformance example is {publicAddress, publicPort}.
target.device gains ipv4_port and ipv4_private alongside ipv4. Deliberately not
folded into `ports`: that field is CAMARA's separate devicePorts -- which ports
a capability acts on -- and a QoD CreateSession can carry both at once, so one
list would leave SRM unable to tell a subscriber-identifying port from a port
to shape. Same line ADR-0037 drew for Traffic Influence's traffic_filters.
QoD's build_session_info now reads the fields back. model_construct stays, but
as a genuine fallback: sessions created before this change hold only the bare
address, so their reconstruction can still fall short of CAMARA's rule.
Additive -- ipv4 keeps its type and meaning, so no schema_version bump.
Co-Authored-By:
Claude Opus 5 <noreply@anthropic.com>